Commit | Line | Data |
---|---|---|
9c0ffa34 | 1 | /********************************************************************** |
ed902a2b | 2 | * Copyright (c) 2013, 2014 Ericsson |
9c0ffa34 BH |
3 | * |
4 | * All rights reserved. This program and the accompanying materials are | |
5 | * made available under the terms of the Eclipse Public License v1.0 which | |
6 | * accompanies this distribution, and is available at | |
7 | * http://www.eclipse.org/legal/epl-v10.html | |
8 | * | |
9 | * Contributors: | |
10 | * Bernd Hufmann - Initial API and implementation | |
11 | **********************************************************************/ | |
9d26aebf | 12 | package org.eclipse.tracecompass.internal.tracing.rcp.ui; |
9c0ffa34 | 13 | |
f2c0b466 | 14 | import java.lang.reflect.InvocationTargetException; |
9c0ffa34 BH |
15 | import java.net.URL; |
16 | ||
17 | import org.eclipse.core.resources.IWorkspace; | |
18 | import org.eclipse.core.resources.ResourcesPlugin; | |
f2c0b466 | 19 | import org.eclipse.core.runtime.CoreException; |
9c0ffa34 BH |
20 | import org.eclipse.core.runtime.FileLocator; |
21 | import org.eclipse.core.runtime.IAdaptable; | |
f2c0b466 BH |
22 | import org.eclipse.core.runtime.IProgressMonitor; |
23 | import org.eclipse.core.runtime.IStatus; | |
24 | import org.eclipse.core.runtime.MultiStatus; | |
9c0ffa34 BH |
25 | import org.eclipse.core.runtime.Path; |
26 | import org.eclipse.core.runtime.Platform; | |
f2c0b466 BH |
27 | import org.eclipse.core.runtime.Status; |
28 | import org.eclipse.jface.dialogs.ErrorDialog; | |
29 | import org.eclipse.jface.dialogs.ProgressMonitorDialog; | |
30 | import org.eclipse.jface.operation.IRunnableWithProgress; | |
9c0ffa34 | 31 | import org.eclipse.jface.resource.ImageDescriptor; |
9d26aebf | 32 | import org.eclipse.tracecompass.internal.tracing.rcp.ui.messages.Messages; |
9c0ffa34 BH |
33 | import org.eclipse.ui.application.IWorkbenchConfigurer; |
34 | import org.eclipse.ui.application.IWorkbenchWindowConfigurer; | |
35 | import org.eclipse.ui.application.WorkbenchAdvisor; | |
36 | import org.eclipse.ui.application.WorkbenchWindowAdvisor; | |
37 | import org.eclipse.ui.ide.IDE; | |
38 | import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages; | |
39 | import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; | |
40 | import org.osgi.framework.Bundle; | |
41 | ||
42 | ||
43 | /** | |
44 | * WorkbenchAdvisor implementation of the LTTng RCP. | |
45 | * | |
46 | * @author Bernd Hufmann | |
47 | */ | |
48 | @SuppressWarnings("restriction") | |
49 | public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { | |
50 | ||
51 | // ------------------------------------------------------------------------ | |
52 | // Constants | |
53 | // ------------------------------------------------------------------------ | |
54 | // The default perspective | |
39e2a8dd | 55 | private static final String PERSPECTIVE_ID = "org.eclipse.linuxtools.tmf.ui.perspective"; //$NON-NLS-1$ |
9c0ffa34 | 56 | |
574f43ad MK |
57 | private static final String ICONS_PATH = "$nl$/icons/full/"; //$NON-NLS-1$ |
58 | private static final String PATH_ELOCALTOOL = ICONS_PATH + "elcl16/"; //$NON-NLS-1$ | |
59 | private static final String PATH_DLOCALTOOL = ICONS_PATH + "dlcl16/"; //$NON-NLS-1$ | |
60 | private static final String PATH_ETOOL = ICONS_PATH + "etool16/"; //$NON-NLS-1$ | |
61 | private static final String PATH_DTOOL = ICONS_PATH + "dtool16/"; //$NON-NLS-1$ | |
62 | private static final String PATH_OBJECT = ICONS_PATH + "obj16/"; //$NON-NLS-1$ | |
63 | private static final String PATH_WIZBAN = ICONS_PATH + "wizban/";//$NON-NLS-1$ | |
9c0ffa34 BH |
64 | |
65 | // ------------------------------------------------------------------------ | |
66 | // Operations | |
67 | // ------------------------------------------------------------------------ | |
68 | @Override | |
69 | public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { | |
70 | return new ApplicationWorkbenchWindowAdvisor(configurer); | |
71 | } | |
72 | ||
73 | @Override | |
74 | public void initialize(IWorkbenchConfigurer configurer) { | |
75 | configurer.setSaveAndRestore(true); | |
76 | declareWorkbenchImages(); | |
77 | } | |
78 | ||
79 | @Override | |
80 | public String getInitialWindowPerspectiveId() { | |
81 | return PERSPECTIVE_ID; | |
82 | } | |
83 | ||
84 | @Override | |
85 | public IAdaptable getDefaultPageInput() { | |
86 | IWorkspace workspace = ResourcesPlugin.getWorkspace(); | |
87 | return workspace.getRoot(); | |
88 | } | |
89 | ||
90 | @Override | |
91 | public void preStartup() { | |
92 | IDE.registerAdapters(); | |
93 | } | |
94 | ||
f2c0b466 BH |
95 | @Override |
96 | public void postShutdown() { | |
97 | // Save workspace | |
98 | final MultiStatus status = new MultiStatus(TracingRcpPlugin.PLUGIN_ID, 1, Messages.Application_WorkspaceSavingError, null); | |
99 | try { | |
100 | IRunnableWithProgress runnable = new IRunnableWithProgress() { | |
101 | @Override | |
102 | public void run(IProgressMonitor monitor) { | |
103 | try { | |
104 | IWorkspace ws = ResourcesPlugin.getWorkspace(); | |
105 | status.merge(ws.save(true, monitor)); | |
106 | } catch (CoreException e) { | |
107 | status.merge(e.getStatus()); | |
108 | } | |
109 | } | |
110 | }; | |
111 | new ProgressMonitorDialog(null).run(true, true, runnable); | |
112 | } catch (InvocationTargetException e) { | |
113 | status.merge(new Status(IStatus.ERROR, TracingRcpPlugin.PLUGIN_ID, Messages.Application_InternalError, e.getTargetException())); | |
114 | } catch (InterruptedException e) { | |
115 | status.merge(Status.CANCEL_STATUS); | |
116 | } | |
117 | if (!status.isOK()) { | |
118 | ErrorDialog.openError(null, Messages.Application_WorkspaceSavingError, null, status, IStatus.ERROR | IStatus.WARNING); | |
119 | TracingRcpPlugin.getDefault().getLog().log(status); | |
120 | } | |
121 | } | |
122 | ||
9c0ffa34 BH |
123 | // ------------------------------------------------------------------------ |
124 | // Helper methods | |
125 | // ------------------------------------------------------------------------ | |
126 | private void declareWorkbenchImages() { | |
127 | ||
128 | Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH); | |
129 | ||
130 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC, | |
131 | PATH_ETOOL + "build_exec.gif", false); //$NON-NLS-1$ | |
132 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_HOVER, | |
133 | PATH_ETOOL + "build_exec.gif", false); //$NON-NLS-1$ | |
134 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_DISABLED, | |
135 | PATH_DTOOL + "build_exec.gif", false); //$NON-NLS-1$ | |
136 | ||
137 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC, | |
138 | PATH_ETOOL + "search_src.gif", false); //$NON-NLS-1$ | |
139 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_HOVER, | |
140 | PATH_ETOOL + "search_src.gif", false); //$NON-NLS-1$ | |
141 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_DISABLED, | |
142 | PATH_DTOOL + "search_src.gif", false); //$NON-NLS-1$ | |
143 | ||
144 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_NEXT_NAV, PATH_ETOOL | |
145 | + "next_nav.gif", false); //$NON-NLS-1$ | |
146 | ||
147 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_PREVIOUS_NAV, | |
148 | PATH_ETOOL + "prev_nav.gif", false); //$NON-NLS-1$ | |
149 | ||
150 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWPRJ_WIZ, | |
151 | PATH_WIZBAN + "newprj_wiz.png", false); //$NON-NLS-1$ | |
152 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFOLDER_WIZ, | |
153 | PATH_WIZBAN + "newfolder_wiz.png", false); //$NON-NLS-1$ | |
154 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFILE_WIZ, | |
155 | PATH_WIZBAN + "newfile_wiz.png", false); //$NON-NLS-1$ | |
156 | ||
157 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTDIR_WIZ, | |
158 | PATH_WIZBAN + "importdir_wiz.png", false); //$NON-NLS-1$ | |
159 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTZIP_WIZ, | |
160 | PATH_WIZBAN + "importzip_wiz.png", false); //$NON-NLS-1$ | |
161 | ||
162 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTDIR_WIZ, | |
163 | PATH_WIZBAN + "exportdir_wiz.png", false); //$NON-NLS-1$ | |
164 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTZIP_WIZ, | |
165 | PATH_WIZBAN + "exportzip_wiz.png", false); //$NON-NLS-1$ | |
166 | ||
167 | declareWorkbenchImage(ideBundle, | |
168 | IDEInternalWorkbenchImages.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ, PATH_WIZBAN | |
169 | + "workset_wiz.png", false); //$NON-NLS-1$ | |
170 | ||
171 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG, | |
172 | PATH_WIZBAN + "saveas_wiz.png", false); //$NON-NLS-1$ | |
173 | ||
174 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_DLGBAN_QUICKFIX_DLG, | |
175 | PATH_WIZBAN + "quick_fix.png", false); //$NON-NLS-1$ | |
176 | ||
177 | declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT, PATH_OBJECT | |
178 | + "prj_obj.gif", true); //$NON-NLS-1$ | |
179 | declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT | |
180 | + "cprj_obj.gif", true); //$NON-NLS-1$ | |
181 | declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OPEN_MARKER, PATH_ELOCALTOOL | |
182 | + "gotoobj_tsk.gif", true); //$NON-NLS-1$ | |
183 | ||
184 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ELCL_QUICK_FIX_ENABLED, | |
185 | PATH_ELOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$ | |
186 | ||
187 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_DLCL_QUICK_FIX_DISABLED, | |
188 | PATH_DLOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$ | |
189 | ||
190 | declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_TASK_TSK, PATH_OBJECT | |
191 | + "taskmrk_tsk.gif", true); //$NON-NLS-1$ | |
192 | declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_BKMRK_TSK, PATH_OBJECT | |
193 | + "bkmrk_tsk.gif", true); //$NON-NLS-1$ | |
194 | ||
195 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_COMPLETE_TSK, | |
196 | PATH_OBJECT + "complete_tsk.gif", true); //$NON-NLS-1$ | |
197 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_INCOMPLETE_TSK, | |
198 | PATH_OBJECT + "incomplete_tsk.gif", true); //$NON-NLS-1$ | |
199 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_ITEM, | |
200 | PATH_OBJECT + "welcome_item.gif", true); //$NON-NLS-1$ | |
201 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_BANNER, | |
202 | PATH_OBJECT + "welcome_banner.gif", true); //$NON-NLS-1$ | |
203 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_ERROR_PATH, | |
204 | PATH_OBJECT + "error_tsk.gif", true); //$NON-NLS-1$ | |
205 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WARNING_PATH, | |
206 | PATH_OBJECT + "warn_tsk.gif", true); //$NON-NLS-1$ | |
207 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_INFO_PATH, PATH_OBJECT | |
208 | + "info_tsk.gif", true); //$NON-NLS-1$ | |
209 | ||
210 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_LCL_FLAT_LAYOUT, | |
211 | PATH_ELOCALTOOL + "flatLayout.gif", true); //$NON-NLS-1$ | |
212 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_LCL_HIERARCHICAL_LAYOUT, | |
213 | PATH_ELOCALTOOL + "hierarchicalLayout.gif", true); //$NON-NLS-1$ | |
214 | declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEM_CATEGORY, | |
215 | PATH_ETOOL + "problem_category.gif", true); //$NON-NLS-1$ | |
216 | } | |
217 | ||
218 | /** | |
219 | * Declares an IDE-specific workbench image. | |
220 | * | |
221 | * Declares all IDE-specific workbench images. This includes both "shared" | |
222 | * images (named in ( @link IDE.SharedImages} ) and internal images (named in | |
223 | * {@link org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages}). | |
224 | * | |
225 | * @param symbolicName | |
226 | * the symbolic name of the image | |
227 | * @param path | |
228 | * the path of the image file; this path is relative to the base | |
229 | * of the IDE plug-in | |
230 | * @param shared | |
231 | * <code>true</code> if this is a shared image, and | |
232 | * <code>false</code> if this is not a shared image | |
233 | */ | |
234 | private void declareWorkbenchImage(Bundle ideBundle, String symbolicName, String path, boolean shared) { | |
235 | URL url = FileLocator.find(ideBundle, new Path(path), null); | |
236 | ImageDescriptor desc = ImageDescriptor.createFromURL(url); | |
237 | getWorkbenchConfigurer().declareImage(symbolicName, desc, shared); | |
238 | } | |
239 | } |