package org.juxtapose.fxtradingclient;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.juxtapose.streamline.util.data.DataType;
import org.juxtapose.streamline.util.data.DataTypeString;
import com.trifork.clj_ds.IPersistentMap;
public class DataEditingSupport extends EditingSupport
{
protected final String key;
boolean keyField;
public DataEditingSupport( ColumnViewer viewer, String inKey, boolean inKeyField )
{
super( viewer );
key = inKey;
keyField = inKeyField;
}
@Override
protected CellEditor getCellEditor(Object element) {
return new TextCellEditor(( (TableViewer) getViewer() ).getTable());
}
@Override
protected boolean canEdit(Object element)
{
return !keyField || ((ViewDataObject)element).getKey() == null;
}
@Override
protected Object getValue(Object element)
{
IPersistentMap<String, DataType<?>> map = ((ViewDataObject)element).getData();
DataType<?> val = map.valAt( key );
if( val == null )
return "";
return val.get().toString();
}
@Override
protected void setValue(Object element, Object value)
{
IPersistentMap<String, DataType<?>> map = ((ViewDataObject)element).getData();
map = map.assoc( key, getDataType( value ) );
((ViewDataObject)element).updateData(map, key);
getViewer().update( element, null );
}
protected DataType<?> getDataType( Object inValue )
{
return new DataTypeString( inValue.toString() );
}
}