X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fproperty%2FAnnotatedPropertyTabContributorFactory.java;h=36da53ab504ec4989339fc51dbf6f2daf4b3074e;hb=931bd308e072f5923f4088e25e91e4f3b192a86d;hp=73526d1c3a60c7216b2d2e18efbea12a64278b5d;hpb=488e24d71d14e60c7da3272e2428a0b23b57c87c;p=simantics%2F3d.git 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 73526d1c..36da53ab 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; @@ -86,10 +86,12 @@ import org.simantics.g3d.tools.AdaptationUtils; import org.simantics.selectionview.IPropertyTab; import org.simantics.selectionview.IPropertyTab2; import org.simantics.utils.datastructures.MapList; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class AnnotatedPropertyTabContributorFactory implements PropertyTabContributorFactory { - private static final boolean DEBUG = false; + private static final Logger LOGGER = LoggerFactory.getLogger(AnnotatedPropertyTabContributorFactory.class); @SuppressWarnings("unchecked") @Override @@ -602,8 +604,9 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri protected boolean isEditorActivationEvent( ColumnViewerEditorActivationEvent event) { return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL + || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION - || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == SWT.CR) + || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && (event.keyCode == SWT.CR || event.keyCode == SWT.F2)) || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; } }; @@ -798,7 +801,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri if (Thread.currentThread() == Display.getDefault().getThread()) { if (viewer.getTable().isDisposed()) return; - if (DEBUG)System.out.println("Viewer refresh " + id); + if (LOGGER.isTraceEnabled()) LOGGER.trace("Viewer refresh " + id); for (IPropertyItem item : resolvedItems) if (!item.equals(selectedItem)) viewer.refresh(item); @@ -814,7 +817,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri AnnotatedPropertyTab.this.node.removeListener(AnnotatedPropertyTab.this); return; } - if (DEBUG) System.out.println("Viewer threaded refresh " + id); + if (LOGGER.isTraceEnabled()) LOGGER.trace("Viewer threaded refresh " + id); for (IPropertyItem item : resolvedItems) if (!item.equals(selectedItem)) viewer.refresh(item); @@ -858,7 +861,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); @@ -885,38 +889,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 (LOGGER.isTraceEnabled()) LOGGER.trace("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 (LOGGER.isTraceEnabled()) LOGGER.trace("CELL EDITOR: " + element); + return editor; + } + else { + throw new IllegalStateException("Unsupported property item type " + item.getClass().getName()); + } } @Override @@ -939,7 +957,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri PropertyManipulator manipulator = tab.getManipulator(item);//createManipulator(item, obj); if (manipulator.getValueCount() <= index) throw new IllegalAccessError("Editing value in index " + index + " is not allowed."); - if (DEBUG)System.err.println("CELL SET VALUE: " + element + " " + value); + if (LOGGER.isTraceEnabled()) LOGGER.trace("CELL SET VALUE: " + element + " " + value); manipulator.setValue(value.toString(),index); viewer.refresh(item); nodeMap.commit("Set " + item.getId() + " value to " + value); @@ -1179,7 +1197,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri || event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL) { if (focusCellManager != null) { try { - if (DEBUG)System.err.println("FOCUS CELL: " + focusCell); + if (LOGGER.isTraceEnabled()) LOGGER.trace("FOCUS CELL: " + focusCell); Method m = AbstractTableViewer.class.getDeclaredMethod( "getSelectionFromWidget"); @@ -1241,7 +1259,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri row.getCell(columnIndex), getViewer()); } } - if (DEBUG) System.err.println("NEXT CELL: " + cell2edit); + if (LOGGER.isTraceEnabled()) LOGGER.trace("NEXT CELL: " + cell2edit); if (cell2edit != null) { getViewer().getControl().setRedraw(false); ColumnViewerEditorActivationEvent acEvent = new ColumnViewerEditorActivationEvent(