From: Reino Ruusu Date: Thu, 5 Dec 2019 11:55:38 +0000 (+0200) Subject: Fix issue with cell editor type mismatch and disable user-entered values X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=e5d47e2e8dec89c834322ce1e33a9f0c4ef330a1;p=simantics%2F3d.git Fix issue with cell editor type mismatch and disable user-entered values gitlab #62 Change-Id: I57d6f6c69fed6c8b840cc0a5011f802e29a96fb3 (cherry picked from commit adacf2d554617e099485801fbf480a7be166e39d) --- diff --git a/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java b/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java index 344dd8ca..15b787d6 100644 --- a/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java +++ b/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java @@ -39,7 +39,6 @@ import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent; 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; @@ -67,6 +66,7 @@ import org.eclipse.swt.widgets.Item; 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; @@ -870,7 +870,8 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri int index; NodeMap nodeMap; TableViewer viewer; - CellEditor editor; + CellEditor propertyItemEditor; + Map comboEditors = new HashMap<>(); public PropertyEditingSupport(AnnotatedPropertyTab tab, TableViewer viewer, int index, NodeMap nodeMap) { super(viewer); @@ -897,38 +898,52 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri 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