]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.ui/src/org/simantics/ui/workbench/PerspectiveBarsActivator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / workbench / PerspectiveBarsActivator.java
diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/workbench/PerspectiveBarsActivator.java b/bundles/org.simantics.ui/src/org/simantics/ui/workbench/PerspectiveBarsActivator.java
new file mode 100644 (file)
index 0000000..82cddaa
--- /dev/null
@@ -0,0 +1,223 @@
+/*******************************************************************************\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.ui.workbench;\r
+\r
+import java.util.List;\r
+\r
+import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.ui.IPerspectiveDescriptor;\r
+import org.eclipse.ui.IPerspectiveListener4;\r
+import org.eclipse.ui.IWindowListener;\r
+\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.IWorkbenchPartReference;\r
+import org.eclipse.ui.IWorkbenchWindow;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.internal.WorkbenchWindow;\r
+import org.eclipse.ui.internal.progress.ProgressRegion;\r
+\r
+/**\r
+ * Handler for perspectiveBars ExtensionPoint\r
+ * \r
+ * FIXME : statusLine widgets are not restored into original positions.\r
+ * \r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+@SuppressWarnings("restriction")\r
+public class PerspectiveBarsActivator implements IPerspectiveListener4, IWindowListener {\r
+\r
+    private IWorkbenchWindow                    activeWindow;\r
+\r
+\r
+    public PerspectiveBarsActivator() {\r
+        PlatformUI.getWorkbench().addWindowListener(this);\r
+    }\r
+\r
+    public void dispose() {\r
+        PlatformUI.getWorkbench().removeWindowListener(this);\r
+    }\r
+\r
+    //------------------------------------------------------------------------\r
+    // IPerspectiveListener4\r
+    //------------------------------------------------------------------------\r
+\r
+    @Override\r
+    public void perspectivePreDeactivate(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
+    }\r
+\r
+    @Override\r
+    public void perspectiveClosed(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
+    }\r
+\r
+    @Override\r
+    public void perspectiveDeactivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
+    }\r
+\r
+    @Override\r
+    public void perspectiveOpened(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
+    }\r
+\r
+    @Override\r
+    public void perspectiveSavedAs(IWorkbenchPage page, IPerspectiveDescriptor oldPerspective,\r
+            IPerspectiveDescriptor newPerspective) {\r
+    }\r
+\r
+    @Override\r
+    public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective,\r
+            IWorkbenchPartReference partRef, String changeId) {\r
+        // See IWorkbenchPage.CHANGED_* constants for change id's.\r
+    }\r
+\r
+    @Override\r
+    public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
+        activatePerspective(perspective.getId());\r
+    }\r
+\r
+    @Override\r
+    public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) {\r
+        // See IWorkbenchPage.CHANGED_* constants for change id's.\r
+    }\r
+\r
+    //------------------------------------------------------------------------\r
+    // IWindowListener\r
+    //------------------------------------------------------------------------\r
+\r
+    @Override\r
+    public void windowActivated(IWorkbenchWindow window) {\r
+//        System.out.println("attaching to window: " + window);\r
+        attachToWindow(window);\r
+    }\r
+\r
+    @Override\r
+    public void windowClosed(IWorkbenchWindow window) {\r
+    }\r
+\r
+    @Override\r
+    public void windowDeactivated(IWorkbenchWindow window) {\r
+//        System.out.println("detaching from window: " + window);\r
+        detachFromWindow(window);\r
+    }\r
+\r
+    @Override\r
+    public void windowOpened(IWorkbenchWindow window) {\r
+    }\r
+\r
+    //------------------------------------------------------------------------\r
+    // UTILITIES\r
+    //------------------------------------------------------------------------\r
+\r
+    private void attachToWindow(IWorkbenchWindow window) {\r
+        activeWindow = window;\r
+        window.addPerspectiveListener(this);\r
+        IPerspectiveDescriptor perspective = window.getActivePage().getPerspective();\r
+        if (perspective != null) {\r
+            activatePerspective(perspective.getId());\r
+        }\r
+    }\r
+\r
+    private void detachFromWindow(IWorkbenchWindow window) {\r
+        window.removePerspectiveListener(this);\r
+    }\r
+\r
+\r
+\r
+\r
+    private Menu menu;\r
+    \r
+       private void activatePerspective(String perspectiveId) {\r
+//        System.out.println("activating perspective: " + perspectiveId);\r
+       \r
+        \r
+        List<IPerspectiveBarsExtension> exts = PerspectiveBarsManager.getInstance().getExtensions(perspectiveId);\r
+        Boolean menuBar = null;\r
+        Boolean coolBar = null;\r
+        Boolean statusLine = null;\r
+        Boolean perspectiveBar = null;\r
+        Boolean fastViewBar = null;\r
+        Boolean progressIndicator = null;\r
+        for (IPerspectiveBarsExtension ext : exts) {\r
+            if (menuBar == null)\r
+               menuBar = ext.getMenuBar();\r
+            if (coolBar == null)\r
+               coolBar = ext.getCoolBar();\r
+            if (statusLine == null)\r
+               statusLine = ext.getStatusLine();\r
+            if (perspectiveBar == null)\r
+               perspectiveBar = ext.getPerspectiveBar();\r
+            if (fastViewBar == null)\r
+               fastViewBar = ext.getFastViewBar();\r
+            if (progressIndicator == null)\r
+               progressIndicator = ext.getProgressIndicator();\r
+        }\r
+        \r
+        if (activeWindow instanceof WorkbenchWindow) {\r
+               WorkbenchWindow window = (WorkbenchWindow)activeWindow;\r
+               \r
+               if (menuBar == null || menuBar == true) {\r
+                       Menu m = window.getShell().getMenuBar();\r
+                       if (m == null && menu != null) {\r
+                               window.getShell().setMenuBar(menu);\r
+                       }\r
+               } else {\r
+                       Menu m = window.getShell().getMenuBar();\r
+                       if (m != null) {\r
+                               menu = m;\r
+                               window.getShell().setMenuBar(null);\r
+                               \r
+                       }\r
+               }\r
+               \r
+               if (coolBar == null || coolBar == true) {\r
+                       window.setCoolBarVisible(true);\r
+               } else {\r
+                       window.setCoolBarVisible(false);\r
+               }\r
+               \r
+               if (statusLine == null || statusLine == true) {\r
+                       window.setStatusLineVisible(true);\r
+                       //window.showHeapStatus(true);\r
+               } else {\r
+                       window.setStatusLineVisible(false);\r
+                       //window.showHeapStatus(false);\r
+               }\r
+               \r
+               if (perspectiveBar == null || perspectiveBar == true) {\r
+                       window.setPerspectiveBarVisible(true);\r
+               } else {\r
+                       window.setPerspectiveBarVisible(false);\r
+               }\r
+\r
+               // Bug 479522 - Remove unused fastView methods in WorkbenchWindow \r
+               //if (fastViewBar == null || fastViewBar == true) {\r
+               //      window.setFastViewBarVisible(true);\r
+               //} else {\r
+               //      window.setFastViewBarVisible(false);\r
+               //}\r
+               \r
+               if (progressIndicator == null || progressIndicator == true) {\r
+                       ProgressRegion r = window.getProgressRegion();\r
+                       if (r != null)\r
+                               r.getControl().setVisible(true);\r
+                       \r
+               } else {\r
+                       ProgressRegion r = window.getProgressRegion();\r
+                       if (r != null)\r
+                               r.getControl().setVisible(false);\r
+               }\r
+               // Bug 486768 - Delete unused internal ITrimManager\r
+               //window.getTrimManager().forceLayout();\r
+        }\r
+      \r
+    }\r
+\r
+}\r