]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.ui.workbench;\r
13 \r
14 import java.util.List;\r
15 \r
16 import org.eclipse.swt.widgets.Menu;\r
17 import org.eclipse.ui.IPerspectiveDescriptor;\r
18 import org.eclipse.ui.IPerspectiveListener4;\r
19 import org.eclipse.ui.IWindowListener;\r
20 \r
21 import org.eclipse.ui.IWorkbenchPage;\r
22 import org.eclipse.ui.IWorkbenchPartReference;\r
23 import org.eclipse.ui.IWorkbenchWindow;\r
24 import org.eclipse.ui.PlatformUI;\r
25 import org.eclipse.ui.internal.WorkbenchWindow;\r
26 import org.eclipse.ui.internal.progress.ProgressRegion;\r
27 \r
28 /**\r
29  * Handler for perspectiveBars ExtensionPoint\r
30  * \r
31  * FIXME : statusLine widgets are not restored into original positions.\r
32  * \r
33  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
34  *\r
35  */\r
36 @SuppressWarnings("restriction")\r
37 public class PerspectiveBarsActivator implements IPerspectiveListener4, IWindowListener {\r
38 \r
39     private IWorkbenchWindow                    activeWindow;\r
40 \r
41 \r
42     public PerspectiveBarsActivator() {\r
43         PlatformUI.getWorkbench().addWindowListener(this);\r
44     }\r
45 \r
46     public void dispose() {\r
47         PlatformUI.getWorkbench().removeWindowListener(this);\r
48     }\r
49 \r
50     //------------------------------------------------------------------------\r
51     // IPerspectiveListener4\r
52     //------------------------------------------------------------------------\r
53 \r
54     @Override\r
55     public void perspectivePreDeactivate(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
56     }\r
57 \r
58     @Override\r
59     public void perspectiveClosed(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
60     }\r
61 \r
62     @Override\r
63     public void perspectiveDeactivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
64     }\r
65 \r
66     @Override\r
67     public void perspectiveOpened(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
68     }\r
69 \r
70     @Override\r
71     public void perspectiveSavedAs(IWorkbenchPage page, IPerspectiveDescriptor oldPerspective,\r
72             IPerspectiveDescriptor newPerspective) {\r
73     }\r
74 \r
75     @Override\r
76     public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective,\r
77             IWorkbenchPartReference partRef, String changeId) {\r
78         // See IWorkbenchPage.CHANGED_* constants for change id's.\r
79     }\r
80 \r
81     @Override\r
82     public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {\r
83         activatePerspective(perspective.getId());\r
84     }\r
85 \r
86     @Override\r
87     public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) {\r
88         // See IWorkbenchPage.CHANGED_* constants for change id's.\r
89     }\r
90 \r
91     //------------------------------------------------------------------------\r
92     // IWindowListener\r
93     //------------------------------------------------------------------------\r
94 \r
95     @Override\r
96     public void windowActivated(IWorkbenchWindow window) {\r
97 //        System.out.println("attaching to window: " + window);\r
98         attachToWindow(window);\r
99     }\r
100 \r
101     @Override\r
102     public void windowClosed(IWorkbenchWindow window) {\r
103     }\r
104 \r
105     @Override\r
106     public void windowDeactivated(IWorkbenchWindow window) {\r
107 //        System.out.println("detaching from window: " + window);\r
108         detachFromWindow(window);\r
109     }\r
110 \r
111     @Override\r
112     public void windowOpened(IWorkbenchWindow window) {\r
113     }\r
114 \r
115     //------------------------------------------------------------------------\r
116     // UTILITIES\r
117     //------------------------------------------------------------------------\r
118 \r
119     private void attachToWindow(IWorkbenchWindow window) {\r
120         activeWindow = window;\r
121         window.addPerspectiveListener(this);\r
122         IPerspectiveDescriptor perspective = window.getActivePage().getPerspective();\r
123         if (perspective != null) {\r
124             activatePerspective(perspective.getId());\r
125         }\r
126     }\r
127 \r
128     private void detachFromWindow(IWorkbenchWindow window) {\r
129         window.removePerspectiveListener(this);\r
130     }\r
131 \r
132 \r
133 \r
134 \r
135     private Menu menu;\r
136     \r
137         private void activatePerspective(String perspectiveId) {\r
138 //        System.out.println("activating perspective: " + perspectiveId);\r
139         \r
140         \r
141         List<IPerspectiveBarsExtension> exts = PerspectiveBarsManager.getInstance().getExtensions(perspectiveId);\r
142         Boolean menuBar = null;\r
143         Boolean coolBar = null;\r
144         Boolean statusLine = null;\r
145         Boolean perspectiveBar = null;\r
146         Boolean fastViewBar = null;\r
147         Boolean progressIndicator = null;\r
148         for (IPerspectiveBarsExtension ext : exts) {\r
149             if (menuBar == null)\r
150                 menuBar = ext.getMenuBar();\r
151             if (coolBar == null)\r
152                 coolBar = ext.getCoolBar();\r
153             if (statusLine == null)\r
154                 statusLine = ext.getStatusLine();\r
155             if (perspectiveBar == null)\r
156                 perspectiveBar = ext.getPerspectiveBar();\r
157             if (fastViewBar == null)\r
158                 fastViewBar = ext.getFastViewBar();\r
159             if (progressIndicator == null)\r
160                 progressIndicator = ext.getProgressIndicator();\r
161         }\r
162         \r
163         if (activeWindow instanceof WorkbenchWindow) {\r
164                 WorkbenchWindow window = (WorkbenchWindow)activeWindow;\r
165                 \r
166                 if (menuBar == null || menuBar == true) {\r
167                         Menu m = window.getShell().getMenuBar();\r
168                         if (m == null && menu != null) {\r
169                                 window.getShell().setMenuBar(menu);\r
170                         }\r
171                 } else {\r
172                         Menu m = window.getShell().getMenuBar();\r
173                         if (m != null) {\r
174                                 menu = m;\r
175                                 window.getShell().setMenuBar(null);\r
176                                 \r
177                         }\r
178                 }\r
179                 \r
180                 if (coolBar == null || coolBar == true) {\r
181                         window.setCoolBarVisible(true);\r
182                 } else {\r
183                         window.setCoolBarVisible(false);\r
184                 }\r
185                 \r
186                 if (statusLine == null || statusLine == true) {\r
187                         window.setStatusLineVisible(true);\r
188                         //window.showHeapStatus(true);\r
189                 } else {\r
190                         window.setStatusLineVisible(false);\r
191                         //window.showHeapStatus(false);\r
192                 }\r
193                 \r
194                 if (perspectiveBar == null || perspectiveBar == true) {\r
195                         window.setPerspectiveBarVisible(true);\r
196                 } else {\r
197                         window.setPerspectiveBarVisible(false);\r
198                 }\r
199 \r
200                 // Bug 479522 - Remove unused fastView methods in WorkbenchWindow \r
201                 //if (fastViewBar == null || fastViewBar == true) {\r
202                 //      window.setFastViewBarVisible(true);\r
203                 //} else {\r
204                 //      window.setFastViewBarVisible(false);\r
205                 //}\r
206                 \r
207                 if (progressIndicator == null || progressIndicator == true) {\r
208                         ProgressRegion r = window.getProgressRegion();\r
209                         if (r != null)\r
210                                 r.getControl().setVisible(true);\r
211                         \r
212                 } else {\r
213                         ProgressRegion r = window.getProgressRegion();\r
214                         if (r != null)\r
215                                 r.getControl().setVisible(false);\r
216                 }\r
217                 // Bug 486768 - Delete unused internal ITrimManager\r
218                 //window.getTrimManager().forceLayout();\r
219         }\r
220       \r
221     }\r
222 \r
223 }\r