]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/ExpandNodeHandler.java
DefaultMouseListener was added twice in GraphExplorerComposite
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / ExpandNodeHandler.java
index c5553a2a20828e7be5bbf822bd3659f88873c40c..9ad34737ebed0bbd4c87de96eea83b139f5367cb 100644 (file)
@@ -1,74 +1,67 @@
-package org.simantics.modeling.ui;\r
-\r
-import java.util.Arrays;\r
-import java.util.Comparator;\r
-\r
-import org.simantics.browsing.ui.BuiltinKeys;\r
-import org.simantics.browsing.ui.GraphExplorer;\r
-import org.simantics.browsing.ui.NodeContext;\r
-import org.simantics.browsing.ui.PrimitiveQueryProcessor;\r
-import org.simantics.browsing.ui.common.processors.IsExpandedProcessor;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.SelectionHints;\r
-import org.simantics.ui.DoubleClickEvent;\r
-import org.simantics.ui.IDoubleClickAction;\r
-import org.simantics.ui.workbench.action.IWorkbenchActionHints;\r
-import org.simantics.ui.workbench.editor.EditorAdapter;\r
-import org.simantics.ui.workbench.editor.EditorRegistry;\r
-import org.simantics.utils.ui.ISelectionUtils;\r
-import org.simantics.utils.ui.action.IPriorityAction;\r
-import org.simantics.utils.ui.action.PriorityAction;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class ExpandNodeHandler implements IDoubleClickAction {\r
-\r
-    @Override\r
-    public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException {\r
-        ReadGraph g = e.getGraph();\r
-        final NodeContext node = ISelectionUtils.getSinglePossibleKey(e.getResource(), SelectionHints.KEY_MAIN, NodeContext.class);\r
-        if (node == null)\r
-            return;\r
-\r
-        Object widget = e.getHintContext().getHint(IWorkbenchActionHints.KEY_WIDGET);\r
-        if (!(widget instanceof GraphExplorer))\r
-            return;\r
-        final GraphExplorer explorer = (GraphExplorer) widget;\r
-\r
-        EditorAdapter[] editorAdapters = EditorRegistry.getInstance().getAdaptersFor(g, node);\r
-\r
-        Arrays.sort(editorAdapters, new Comparator<EditorAdapter>() {\r
-            @Override\r
-            public int compare(EditorAdapter o1, EditorAdapter o2) {\r
-                // Sort in descending priority order\r
-                return -(o1.getPriority() - o2.getPriority());\r
-            }\r
-        });\r
-\r
-        // If editor selection is unanimous, use the editor. Otherwise just expand/collapse the clicked node.\r
-        if (editorAdapters.length == 0) {\r
-            e.add(expandAction(explorer, node));\r
-            e.consume();\r
-        } else if (editorAdapters.length > 1 && editorAdapters[0].getPriority() == editorAdapters[1].getPriority()) {\r
-            e.add(expandAction(explorer, node));\r
-            e.consume();\r
-        }\r
-    }\r
-\r
-    private IPriorityAction expandAction(final GraphExplorer explorer, final NodeContext node) {\r
-        return new PriorityAction(100) {\r
-            @Override\r
-            public void run() {\r
-                PrimitiveQueryProcessor<?> pqp = explorer.getPrimitiveProcessor(BuiltinKeys.IS_EXPANDED);\r
-                if (pqp instanceof IsExpandedProcessor) {\r
-                    IsExpandedProcessor iep = (IsExpandedProcessor) pqp;\r
-                    boolean expanded = iep.getExpanded(node);\r
-                    iep.replaceExpanded(node, !expanded);\r
-                }\r
-            }\r
-        };\r
-    }\r
-\r
-}\r
+package org.simantics.modeling.ui;
+
+import java.util.Arrays;
+
+import org.simantics.browsing.ui.BuiltinKeys;
+import org.simantics.browsing.ui.GraphExplorer;
+import org.simantics.browsing.ui.NodeContext;
+import org.simantics.browsing.ui.PrimitiveQueryProcessor;
+import org.simantics.browsing.ui.common.processors.IsExpandedProcessor;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.SelectionHints;
+import org.simantics.ui.DoubleClickEvent;
+import org.simantics.ui.IDoubleClickAction;
+import org.simantics.ui.workbench.action.IWorkbenchActionHints;
+import org.simantics.ui.workbench.editor.EditorAdapter;
+import org.simantics.ui.workbench.editor.EditorRegistry;
+import org.simantics.utils.ui.ISelectionUtils;
+import org.simantics.utils.ui.action.IPriorityAction;
+import org.simantics.utils.ui.action.PriorityAction;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class ExpandNodeHandler implements IDoubleClickAction {
+
+    @Override
+    public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException {
+        Object selection = e.getResource();
+        NodeContext node = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MAIN, NodeContext.class);
+        if (node == null)
+            return;
+
+        Object widget = e.getHintContext().getHint(IWorkbenchActionHints.KEY_WIDGET);
+        if (!(widget instanceof GraphExplorer))
+            return;
+        GraphExplorer explorer = (GraphExplorer) widget;
+
+        // Get adapters in descending priority order
+        EditorAdapter[] editorAdapters = EditorRegistry.getInstance().getAdaptersFor(e.getGraph(), selection);
+        if (editorAdapters.length > 1)
+            Arrays.sort(editorAdapters, (o1,o2) -> -(o1.getPriority() - o2.getPriority()));
+
+        // If editor selection is unanimous, use the editor. Otherwise just expand/collapse the clicked node.
+        if (editorAdapters.length == 0) {
+            e.add(expandAction(explorer, node));
+            e.consume();
+        } else if (editorAdapters.length > 1 && editorAdapters[0].getPriority() == editorAdapters[1].getPriority()) {
+            e.add(expandAction(explorer, node));
+            e.consume();
+        }
+    }
+
+    private IPriorityAction expandAction(GraphExplorer explorer, NodeContext node) {
+        return new PriorityAction(100) {
+            @Override
+            public void run() {
+                PrimitiveQueryProcessor<?> pqp = explorer.getPrimitiveProcessor(BuiltinKeys.IS_EXPANDED);
+                if (pqp instanceof IsExpandedProcessor) {
+                    IsExpandedProcessor iep = (IsExpandedProcessor) pqp;
+                    boolean expanded = iep.getExpanded(node);
+                    iep.replaceExpanded(node, !expanded);
+                }
+            }
+        };
+    }
+
+}