X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fworkbench%2FPerspectiveBarsActivator.java;fp=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fworkbench%2FPerspectiveBarsActivator.java;h=82cddaa6eff4e9fae0d96eeb2da7a9869b4738ac;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git 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 index 000000000..82cddaa6e --- /dev/null +++ b/bundles/org.simantics.ui/src/org/simantics/ui/workbench/PerspectiveBarsActivator.java @@ -0,0 +1,223 @@ +/******************************************************************************* + * 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.ui.workbench; + +import java.util.List; + +import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IPerspectiveDescriptor; +import org.eclipse.ui.IPerspectiveListener4; +import org.eclipse.ui.IWindowListener; + +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.WorkbenchWindow; +import org.eclipse.ui.internal.progress.ProgressRegion; + +/** + * Handler for perspectiveBars ExtensionPoint + * + * FIXME : statusLine widgets are not restored into original positions. + * + * @author Marko Luukkainen + * + */ +@SuppressWarnings("restriction") +public class PerspectiveBarsActivator implements IPerspectiveListener4, IWindowListener { + + private IWorkbenchWindow activeWindow; + + + public PerspectiveBarsActivator() { + PlatformUI.getWorkbench().addWindowListener(this); + } + + public void dispose() { + PlatformUI.getWorkbench().removeWindowListener(this); + } + + //------------------------------------------------------------------------ + // IPerspectiveListener4 + //------------------------------------------------------------------------ + + @Override + public void perspectivePreDeactivate(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + } + + @Override + public void perspectiveClosed(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + } + + @Override + public void perspectiveDeactivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + } + + @Override + public void perspectiveOpened(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + } + + @Override + public void perspectiveSavedAs(IWorkbenchPage page, IPerspectiveDescriptor oldPerspective, + IPerspectiveDescriptor newPerspective) { + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, + IWorkbenchPartReference partRef, String changeId) { + // See IWorkbenchPage.CHANGED_* constants for change id's. + } + + @Override + public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + activatePerspective(perspective.getId()); + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) { + // See IWorkbenchPage.CHANGED_* constants for change id's. + } + + //------------------------------------------------------------------------ + // IWindowListener + //------------------------------------------------------------------------ + + @Override + public void windowActivated(IWorkbenchWindow window) { +// System.out.println("attaching to window: " + window); + attachToWindow(window); + } + + @Override + public void windowClosed(IWorkbenchWindow window) { + } + + @Override + public void windowDeactivated(IWorkbenchWindow window) { +// System.out.println("detaching from window: " + window); + detachFromWindow(window); + } + + @Override + public void windowOpened(IWorkbenchWindow window) { + } + + //------------------------------------------------------------------------ + // UTILITIES + //------------------------------------------------------------------------ + + private void attachToWindow(IWorkbenchWindow window) { + activeWindow = window; + window.addPerspectiveListener(this); + IPerspectiveDescriptor perspective = window.getActivePage().getPerspective(); + if (perspective != null) { + activatePerspective(perspective.getId()); + } + } + + private void detachFromWindow(IWorkbenchWindow window) { + window.removePerspectiveListener(this); + } + + + + + private Menu menu; + + private void activatePerspective(String perspectiveId) { +// System.out.println("activating perspective: " + perspectiveId); + + + List exts = PerspectiveBarsManager.getInstance().getExtensions(perspectiveId); + Boolean menuBar = null; + Boolean coolBar = null; + Boolean statusLine = null; + Boolean perspectiveBar = null; + Boolean fastViewBar = null; + Boolean progressIndicator = null; + for (IPerspectiveBarsExtension ext : exts) { + if (menuBar == null) + menuBar = ext.getMenuBar(); + if (coolBar == null) + coolBar = ext.getCoolBar(); + if (statusLine == null) + statusLine = ext.getStatusLine(); + if (perspectiveBar == null) + perspectiveBar = ext.getPerspectiveBar(); + if (fastViewBar == null) + fastViewBar = ext.getFastViewBar(); + if (progressIndicator == null) + progressIndicator = ext.getProgressIndicator(); + } + + if (activeWindow instanceof WorkbenchWindow) { + WorkbenchWindow window = (WorkbenchWindow)activeWindow; + + if (menuBar == null || menuBar == true) { + Menu m = window.getShell().getMenuBar(); + if (m == null && menu != null) { + window.getShell().setMenuBar(menu); + } + } else { + Menu m = window.getShell().getMenuBar(); + if (m != null) { + menu = m; + window.getShell().setMenuBar(null); + + } + } + + if (coolBar == null || coolBar == true) { + window.setCoolBarVisible(true); + } else { + window.setCoolBarVisible(false); + } + + if (statusLine == null || statusLine == true) { + window.setStatusLineVisible(true); + //window.showHeapStatus(true); + } else { + window.setStatusLineVisible(false); + //window.showHeapStatus(false); + } + + if (perspectiveBar == null || perspectiveBar == true) { + window.setPerspectiveBarVisible(true); + } else { + window.setPerspectiveBarVisible(false); + } + + // Bug 479522 - Remove unused fastView methods in WorkbenchWindow + //if (fastViewBar == null || fastViewBar == true) { + // window.setFastViewBarVisible(true); + //} else { + // window.setFastViewBarVisible(false); + //} + + if (progressIndicator == null || progressIndicator == true) { + ProgressRegion r = window.getProgressRegion(); + if (r != null) + r.getControl().setVisible(true); + + } else { + ProgressRegion r = window.getProgressRegion(); + if (r != null) + r.getControl().setVisible(false); + } + // Bug 486768 - Delete unused internal ITrimManager + //window.getTrimManager().forceLayout(); + } + + } + +}