--- /dev/null
+/*******************************************************************************\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