import org.eclipse.jface.viewers.ColumnViewerEditorActivationListener;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.ColumnViewerEditorDeactivationEvent;
-import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbenchSite;
+import org.simantics.browsing.ui.swt.ComboBoxCellEditor2;
import org.simantics.db.management.ISessionContext;
import org.simantics.g3d.property.annotations.CompoundGetPropertyValue;
import org.simantics.g3d.property.annotations.CompoundSetPropertyValue;
int index;
NodeMap<?,?,?> nodeMap;
TableViewer viewer;
- CellEditor editor;
+ CellEditor propertyItemEditor;
+ Map<ComboPropertyItem,CellEditor> comboEditors = new HashMap<>();
public PropertyEditingSupport(AnnotatedPropertyTab tab, TableViewer viewer, int index, NodeMap<?,?,?> nodeMap) {
super(viewer);
IPropertyItem item = (IPropertyItem)element;
if (tab.getManipulator(item).getValueCount() <= index)
return null;
- if (editor == null)
- if (item instanceof PropertyItem)
- editor = new TextCellEditor(viewer.getTable(),SWT.NONE) {
- @Override
- public void activate() {
- tab.setEditing(true);
- }
-
- @Override
- public void deactivate() {
- super.deactivate();
- tab.setEditing(false);
- }
- };
- else if (item instanceof ComboPropertyItem) {
- ComboPropertyItem comboPropertyItem = (ComboPropertyItem)item;
- ComboPropertyManipulator manipulator = (ComboPropertyManipulator)tab.manipulators.get(comboPropertyItem);
- editor = new ComboBoxCellEditor(viewer.getTable(), manipulator.getItems()) {
- @Override
- public void activate() {
- tab.setEditing(true);
- }
-
- @Override
- public void deactivate() {
- super.deactivate();
- tab.setEditing(false);
- }
- };
- }
- if (DEBUG)System.err.println("CELL EDITOR: " + element);
- return editor;
+ if (item instanceof PropertyItem) {
+ if (propertyItemEditor == null) {
+ propertyItemEditor = new TextCellEditor(viewer.getTable(),SWT.NONE) {
+ @Override
+ public void activate() {
+ tab.setEditing(true);
+ }
+
+ @Override
+ public void deactivate() {
+ super.deactivate();
+ tab.setEditing(false);
+ }
+ };
+ }
+
+ if (DEBUG) System.err.println("CELL EDITOR: " + element);
+ return propertyItemEditor;
+ }
+ else if (item instanceof ComboPropertyItem) {
+ ComboPropertyItem comboPropertyItem = (ComboPropertyItem)item;
+ CellEditor editor = comboEditors.get(comboPropertyItem);
+ if (editor == null) {
+ ComboPropertyManipulator manipulator = (ComboPropertyManipulator)tab.manipulators.get(comboPropertyItem);
+ editor = new ComboBoxCellEditor2(viewer.getTable(), manipulator.getItems(), SWT.DROP_DOWN | SWT.READ_ONLY) {
+ @Override
+ public void activate() {
+ tab.setEditing(true);
+ }
+
+ @Override
+ public void deactivate() {
+ super.deactivate();
+ tab.setEditing(false);
+ }
+ };
+
+ comboEditors.put(comboPropertyItem, editor);
+ }
+
+ if (DEBUG) System.err.println("CELL EDITOR: " + element);
+ return editor;
+ }
+ else {
+ throw new IllegalStateException("Unsupported property item type " + item.getClass().getName());
+ }
}
@Override