]> gerrit.simantics Code Review - simantics/3d.git/commitdiff
Fix issue with cell editor type mismatch and disable user-entered values 77/3677/1
authorReino Ruusu <reino.ruusu@semantum.fi>
Thu, 5 Dec 2019 11:55:38 +0000 (13:55 +0200)
committerReino Ruusu <reino.ruusu@semantum.fi>
Thu, 5 Dec 2019 11:58:32 +0000 (13:58 +0200)
gitlab #62

Change-Id: I57d6f6c69fed6c8b840cc0a5011f802e29a96fb3

org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java

index 344dd8cabc1be4805f46f07d46d3025252b880a7..15b787d6d91781b8177e5b824c71eb4860cd611d 100644 (file)
@@ -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<ComboPropertyItem,CellEditor> 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