package org.juxtapose.fxtradingclient; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.Display; import org.juxtapose.streamline.util.IInputListener; import org.juxtapose.streamline.util.ISTMContainerListener; import org.juxtapose.streamline.util.data.DataType; import com.trifork.clj_ds.IPersistentMap; /** * @author Pontus J�rgne * 3 jun 2013 * Copyright (c) Pontus J�rgne. All rights reserved */ public class DataEditingSupportEnum extends DataEditingSupport { String[] items; ComboBoxCellEditor cellEditor; Display display; public DataEditingSupportEnum( ColumnViewer viewer, String inKey, final InputContainer inInputContainer, Display inDisplay, boolean inKeyField ) { super( viewer, inKey, inKeyField ); items = inInputContainer.getInputObjects(); display = inDisplay; inInputContainer.addInputListener( new IInputListener() { @Override public void inputChanged() { items = inInputContainer.getInputObjects(); updateItems( items ); } } ); } @Override protected CellEditor getCellEditor(Object element) { cellEditor = new ComboBoxCellEditor(( (TableViewer) getViewer() ).getTable(), items); return cellEditor; } public void updateItems( final String[] inItems ) { display.asyncExec( new Runnable() { @Override public void run() { if( cellEditor != null) cellEditor.setItems( inItems ); } }); } @Override protected Object getValue(Object element) { IPersistentMap<String, DataType<?>> map = ((ViewDataObject)element).getData(); DataType<?> dVal = map.valAt( key ); if( dVal == null ) return -1; String val = dVal.get().toString(); for( int i = 0; i < items.length; i++ ) { if( val.equals( items[i] ) ) return i; } return -1; } @Override protected void setValue(Object element, Object value) { Integer index = (Integer)value; if( index < 0 || index > items.length-1 ) return; String val = items[index]; IPersistentMap<String, DataType<?>> map = ((ViewDataObject)element).getData(); map = map.assoc( key, getDataType( val ) ); ((ViewDataObject)element).updateData(map, key); getViewer().update( element, null ); } }