]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewerActionContributor.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagramEditor / DiagramViewerActionContributor.java
index d5cf1fc604e09a84fc69ecdc88bd68ae374e9420..62783b655224363d201ec30105e89dfb73cccca3 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.modeling.ui.diagramEditor;\r
-\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.action.ActionContributionItem;\r
-import org.eclipse.jface.action.IContributionItem;\r
-import org.eclipse.jface.action.ICoolBarManager;\r
-import org.eclipse.jface.action.IToolBarManager;\r
-import org.eclipse.jface.action.ToolBarContributionItem;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.IPartListener2;\r
-import org.eclipse.ui.IWorkbenchPart;\r
-import org.eclipse.ui.IWorkbenchPartReference;\r
-import org.eclipse.ui.part.EditorActionBarContributor;\r
-import org.simantics.g2d.canvas.Hints;\r
-import org.simantics.g2d.canvas.ICanvasContext;\r
-import org.simantics.g2d.canvas.IToolMode;\r
-import org.simantics.modeling.ui.Activator;\r
-import org.simantics.utils.datastructures.hints.HintListenerAdapter;\r
-import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
-import org.simantics.utils.datastructures.hints.IHintListener;\r
-import org.simantics.utils.datastructures.hints.IHintObservable;\r
-import org.simantics.utils.threads.ThreadUtils;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class DiagramViewerActionContributor extends EditorActionBarContributor {\r
-\r
-    private static final boolean DEBUG = false;\r
-\r
-    private IEditorPart    activePart;\r
-    private Display        display;\r
-\r
-    private ICanvasContext currentContext;\r
-\r
-    ModeAction             pointerAction;\r
-    ModeAction             connectAction;\r
-    IContributionItem      pointerItem;\r
-    IContributionItem      connectItem;\r
-    protected IToolBarManager        mgr;\r
-\r
-    IPartListener2 partListener = new IPartListener2() {\r
-        @Override\r
-        public void partVisible(IWorkbenchPartReference partRef) {\r
-        }\r
-        @Override\r
-        public void partOpened(IWorkbenchPartReference partRef) {\r
-        }\r
-        @Override\r
-        public void partInputChanged(IWorkbenchPartReference partRef) {\r
-        }\r
-        @Override\r
-        public void partHidden(IWorkbenchPartReference partRef) {\r
-        }\r
-        @Override\r
-        public void partDeactivated(IWorkbenchPartReference partRef) {\r
-            IWorkbenchPart part = partRef.getPart(false);\r
-            if (part == activePart) {\r
-                setActiveEditor(null);\r
-            }\r
-        }\r
-        @Override\r
-        public void partClosed(IWorkbenchPartReference partRef) {\r
-        }\r
-        @Override\r
-        public void partBroughtToTop(IWorkbenchPartReference partRef) {\r
-        }\r
-        @Override\r
-        public void partActivated(IWorkbenchPartReference partRef) {\r
-        }\r
-    };\r
-\r
-    @Override\r
-    public void contributeToCoolBar(ICoolBarManager coolBarManager) {\r
-        IContributionItem item = coolBarManager.find("org.simantics.modeling.ui.diagramtoolbar");\r
-        if (item instanceof ToolBarContributionItem)\r
-            mgr = ((ToolBarContributionItem) item).getToolBarManager();\r
-        if (mgr == null)\r
-            return;\r
-\r
-        pointerAction = new ModeAction("org.simantics.modeling.ui.pointerMode", Hints.POINTERTOOL);\r
-        pointerAction.setText("Pointer Mode");\r
-        pointerAction.setImageDescriptor(Activator.POINTER_MODE);\r
-        connectAction = new ModeAction("org.simantics.modeling.ui.connectMode", Hints.CONNECTTOOL);\r
-        connectAction.setText("Connect Mode");\r
-        connectAction.setImageDescriptor(Activator.CONNECT_MODE);\r
-\r
-        pointerItem = new ActionContributionItem(pointerAction);\r
-        connectItem = new ActionContributionItem(connectAction);\r
-\r
-        mgr.appendToGroup("tool.additions", pointerItem);\r
-        mgr.appendToGroup("tool.additions", connectItem);\r
-        mgr.markDirty();\r
-\r
-        getPage().addPartListener(partListener);\r
-    }\r
-\r
-    @Override\r
-    public void dispose() {\r
-        getPage().removePartListener(partListener);\r
-\r
-        if (mgr != null) {\r
-            mgr.remove(connectItem);\r
-            mgr.remove(pointerItem);\r
-            connectItem.dispose();\r
-            pointerItem.dispose();\r
-            mgr.markDirty();\r
-            mgr.update(true);\r
-            if (activePart != null) {\r
-                activePart.getEditorSite().getActionBars().updateActionBars();\r
-                activePart = null;\r
-            }\r
-        }\r
-        setContext(null, null);\r
-        super.dispose();\r
-        setContext(null, null);\r
-        activePart = null;\r
-    }\r
-\r
-    public void setActiveEditor(IEditorPart part) {\r
-        if (DEBUG)\r
-            System.out.println("setActiveEditor: " + part);\r
-        if (part == activePart)\r
-            return;\r
-\r
-        this.activePart = part;\r
-        if (part != null) {\r
-            this.display = part.getSite().getShell().getDisplay();\r
-        }\r
-\r
-        ICanvasContext ctx = part != null ? (ICanvasContext) part.getAdapter(ICanvasContext.class) : null;\r
-        setContext(part, ctx);\r
-    }\r
-\r
-    private void setContext(IEditorPart part, ICanvasContext context) {\r
-        if (DEBUG)\r
-            System.out.println("setContext: " + part + "\nNEW CONTEXT: " + context + "\nPREVIOUS CONTEXT: " + currentContext);\r
-\r
-        ICanvasContext previous = currentContext;\r
-        currentContext = context;\r
-        if (previous != context) {\r
-            if (previous != null && !previous.isDisposed())\r
-                previous.getHintStack().removeKeyHintListener(Hints.KEY_TOOL, TOOL_LISTENER);\r
-            if (context != null && !context.isDisposed())\r
-                context.getHintStack().addKeyHintListener(Hints.KEY_TOOL, TOOL_LISTENER);\r
-        }\r
-\r
-        if (part != null && context != null && !context.isDisposed())\r
-            updateActionBars(part, (IToolMode) context.getHintStack().getHint(Hints.KEY_TOOL));\r
-        else\r
-            updateActionBars(null, null);\r
-    }\r
-\r
-    private void updateActionBars(IEditorPart part, IToolMode toolMode) {\r
-        if (DEBUG)\r
-            System.out.println("updateActionBars: " + part + ", " + toolMode);\r
-        updateToolMode(toolMode);\r
-        if (part != null)\r
-            part.getEditorSite().getActionBars().updateActionBars();\r
-    }\r
-\r
-    private void updateToolMode(IToolMode toolMode) {\r
-        if (DEBUG)\r
-            System.out.println("updateToolMode: " + toolMode);\r
-        if (toolMode != null) {\r
-            pointerAction.setEnabled(true);\r
-            connectAction.setEnabled(true);\r
-            if (toolMode == Hints.POINTERTOOL) {\r
-                pointerAction.setChecked(true);\r
-                connectAction.setChecked(false);\r
-            } else if (toolMode == Hints.CONNECTTOOL) {\r
-                pointerAction.setChecked(false);\r
-                connectAction.setChecked(true);\r
-            }\r
-        } else {\r
-            pointerAction.setEnabled(false);\r
-            connectAction.setEnabled(false);\r
-        }\r
-    }\r
-\r
-    IHintListener TOOL_LISTENER = new HintListenerAdapter() {\r
-        @Override\r
-        public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {\r
-            final IToolMode mode = (IToolMode) newValue;\r
-            final IEditorPart part = activePart;\r
-            display.asyncExec(new Runnable() {\r
-                @Override\r
-                public void run() {\r
-                    if (display.isDisposed())\r
-                        return;\r
-                    if (activePart != part)\r
-                        return;\r
-                    updateActionBars(part, mode);\r
-                }\r
-            });\r
-        }\r
-    };\r
-\r
-    public class ModeAction extends Action {\r
-\r
-        private IToolMode targetMode;\r
-\r
-        public ModeAction(String id, IToolMode targetMode) {\r
-            super(id, Action.AS_RADIO_BUTTON);\r
-            this.targetMode = targetMode;\r
-        }\r
-\r
-        @Override\r
-        public void run() {\r
-            final ICanvasContext context = currentContext;\r
-            if (context == null)\r
-                return;\r
-\r
-            final IEditorPart part = activePart;\r
-            if (part == null)\r
-                return;\r
-\r
-            if (context.isDisposed())\r
-                return;\r
-\r
-            ThreadUtils.asyncExec(context.getThreadAccess(), new Runnable() {\r
-                @Override\r
-                public void run() {\r
-                    if (context.isDisposed())\r
-                        return;\r
-                    IToolMode toolMode = context.getHintStack().getHint(Hints.KEY_TOOL);\r
-                    if (!targetMode.equals(toolMode)) {\r
-                        if (DEBUG)\r
-                            System.out.println("changing tool mode to " + targetMode.getId());\r
-                        context.getDefaultHintContext().setHint(Hints.KEY_TOOL, targetMode);\r
-                    }\r
-                }\r
-            });\r
-        }\r
-\r
-    }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.modeling.ui.diagramEditor;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.ICoolBarManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.ToolBarContributionItem;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.part.EditorActionBarContributor;
+import org.simantics.g2d.canvas.Hints;
+import org.simantics.g2d.canvas.ICanvasContext;
+import org.simantics.g2d.canvas.IToolMode;
+import org.simantics.modeling.ui.Activator;
+import org.simantics.utils.datastructures.hints.HintListenerAdapter;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
+import org.simantics.utils.datastructures.hints.IHintListener;
+import org.simantics.utils.datastructures.hints.IHintObservable;
+import org.simantics.utils.threads.ThreadUtils;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class DiagramViewerActionContributor extends EditorActionBarContributor {
+
+    private static final boolean DEBUG = false;
+
+    private IEditorPart    activePart;
+    private Display        display;
+
+    private ICanvasContext currentContext;
+
+    ModeAction             pointerAction;
+    ModeAction             connectAction;
+    IContributionItem      pointerItem;
+    IContributionItem      connectItem;
+    protected IToolBarManager        mgr;
+
+    IPartListener2 partListener = new IPartListener2() {
+        @Override
+        public void partVisible(IWorkbenchPartReference partRef) {
+        }
+        @Override
+        public void partOpened(IWorkbenchPartReference partRef) {
+        }
+        @Override
+        public void partInputChanged(IWorkbenchPartReference partRef) {
+        }
+        @Override
+        public void partHidden(IWorkbenchPartReference partRef) {
+        }
+        @Override
+        public void partDeactivated(IWorkbenchPartReference partRef) {
+            IWorkbenchPart part = partRef.getPart(false);
+            if (part == activePart) {
+                setActiveEditor(null);
+            }
+        }
+        @Override
+        public void partClosed(IWorkbenchPartReference partRef) {
+        }
+        @Override
+        public void partBroughtToTop(IWorkbenchPartReference partRef) {
+        }
+        @Override
+        public void partActivated(IWorkbenchPartReference partRef) {
+        }
+    };
+
+    @Override
+    public void contributeToCoolBar(ICoolBarManager coolBarManager) {
+        IContributionItem item = coolBarManager.find("org.simantics.modeling.ui.diagramtoolbar");
+        if (item instanceof ToolBarContributionItem)
+            mgr = ((ToolBarContributionItem) item).getToolBarManager();
+        if (mgr == null)
+            return;
+
+        pointerAction = new ModeAction("org.simantics.modeling.ui.pointerMode", Hints.POINTERTOOL);
+        pointerAction.setText("Pointer Mode");
+        pointerAction.setImageDescriptor(Activator.POINTER_MODE);
+        connectAction = new ModeAction("org.simantics.modeling.ui.connectMode", Hints.CONNECTTOOL);
+        connectAction.setText("Connect Mode");
+        connectAction.setImageDescriptor(Activator.CONNECT_MODE);
+
+        pointerItem = new ActionContributionItem(pointerAction);
+        connectItem = new ActionContributionItem(connectAction);
+
+        mgr.appendToGroup("tool.additions", pointerItem);
+        mgr.appendToGroup("tool.additions", connectItem);
+        mgr.markDirty();
+
+        getPage().addPartListener(partListener);
+    }
+
+    @Override
+    public void dispose() {
+        getPage().removePartListener(partListener);
+
+        if (mgr != null) {
+            mgr.remove(connectItem);
+            mgr.remove(pointerItem);
+            connectItem.dispose();
+            pointerItem.dispose();
+            mgr.markDirty();
+            mgr.update(true);
+            if (activePart != null) {
+                activePart.getEditorSite().getActionBars().updateActionBars();
+                activePart = null;
+            }
+        }
+        setContext(null, null);
+        super.dispose();
+        setContext(null, null);
+        activePart = null;
+    }
+
+    public void setActiveEditor(IEditorPart part) {
+        if (DEBUG)
+            System.out.println("setActiveEditor: " + part);
+        if (part == activePart)
+            return;
+
+        this.activePart = part;
+        if (part != null) {
+            this.display = part.getSite().getShell().getDisplay();
+        }
+
+        ICanvasContext ctx = part != null ? (ICanvasContext) part.getAdapter(ICanvasContext.class) : null;
+        setContext(part, ctx);
+    }
+
+    private void setContext(IEditorPart part, ICanvasContext context) {
+        if (DEBUG)
+            System.out.println("setContext: " + part + "\nNEW CONTEXT: " + context + "\nPREVIOUS CONTEXT: " + currentContext);
+
+        ICanvasContext previous = currentContext;
+        currentContext = context;
+        if (previous != context) {
+            if (previous != null && !previous.isDisposed())
+                previous.getHintStack().removeKeyHintListener(Hints.KEY_TOOL, TOOL_LISTENER);
+            if (context != null && !context.isDisposed())
+                context.getHintStack().addKeyHintListener(Hints.KEY_TOOL, TOOL_LISTENER);
+        }
+
+        if (part != null && context != null && !context.isDisposed())
+            updateActionBars(part, (IToolMode) context.getHintStack().getHint(Hints.KEY_TOOL));
+        else
+            updateActionBars(null, null);
+    }
+
+    private void updateActionBars(IEditorPart part, IToolMode toolMode) {
+        if (DEBUG)
+            System.out.println("updateActionBars: " + part + ", " + toolMode);
+        updateToolMode(toolMode);
+        if (part != null)
+            part.getEditorSite().getActionBars().updateActionBars();
+    }
+
+    private void updateToolMode(IToolMode toolMode) {
+        if (DEBUG)
+            System.out.println("updateToolMode: " + toolMode);
+        if (toolMode != null) {
+            pointerAction.setEnabled(true);
+            connectAction.setEnabled(true);
+            if (toolMode == Hints.POINTERTOOL) {
+                pointerAction.setChecked(true);
+                connectAction.setChecked(false);
+            } else if (toolMode == Hints.CONNECTTOOL) {
+                pointerAction.setChecked(false);
+                connectAction.setChecked(true);
+            }
+        } else {
+            pointerAction.setEnabled(false);
+            connectAction.setEnabled(false);
+        }
+    }
+
+    IHintListener TOOL_LISTENER = new HintListenerAdapter() {
+        @Override
+        public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
+            final IToolMode mode = (IToolMode) newValue;
+            final IEditorPart part = activePart;
+            display.asyncExec(new Runnable() {
+                @Override
+                public void run() {
+                    if (display.isDisposed())
+                        return;
+                    if (activePart != part)
+                        return;
+                    updateActionBars(part, mode);
+                }
+            });
+        }
+    };
+
+    public class ModeAction extends Action {
+
+        private IToolMode targetMode;
+
+        public ModeAction(String id, IToolMode targetMode) {
+            super(id, Action.AS_RADIO_BUTTON);
+            this.targetMode = targetMode;
+        }
+
+        @Override
+        public void run() {
+            final ICanvasContext context = currentContext;
+            if (context == null)
+                return;
+
+            final IEditorPart part = activePart;
+            if (part == null)
+                return;
+
+            if (context.isDisposed())
+                return;
+
+            ThreadUtils.asyncExec(context.getThreadAccess(), new Runnable() {
+                @Override
+                public void run() {
+                    if (context.isDisposed())
+                        return;
+                    IToolMode toolMode = context.getHintStack().getHint(Hints.KEY_TOOL);
+                    if (!targetMode.equals(toolMode)) {
+                        if (DEBUG)
+                            System.out.println("changing tool mode to " + targetMode.getId());
+                        context.getDefaultHintContext().setHint(Hints.KEY_TOOL, targetMode);
+                    }
+                }
+            });
+        }
+
+    }
+
+}