1 /**********************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
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
10 * Bernd Hufmann - Initial API and implementation
11 **********************************************************************/
12 package org
.eclipse
.tracecompass
.internal
.tracing
.rcp
.ui
;
14 import java
.lang
.reflect
.InvocationTargetException
;
17 import org
.eclipse
.core
.resources
.IWorkspace
;
18 import org
.eclipse
.core
.resources
.ResourcesPlugin
;
19 import org
.eclipse
.core
.runtime
.CoreException
;
20 import org
.eclipse
.core
.runtime
.FileLocator
;
21 import org
.eclipse
.core
.runtime
.IAdaptable
;
22 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
23 import org
.eclipse
.core
.runtime
.IStatus
;
24 import org
.eclipse
.core
.runtime
.MultiStatus
;
25 import org
.eclipse
.core
.runtime
.Path
;
26 import org
.eclipse
.core
.runtime
.Platform
;
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
;
31 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
32 import org
.eclipse
.tracecompass
.internal
.tracing
.rcp
.ui
.messages
.Messages
;
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
;
44 * WorkbenchAdvisor implementation of the LTTng RCP.
46 * @author Bernd Hufmann
48 @SuppressWarnings("restriction")
49 public class ApplicationWorkbenchAdvisor
extends WorkbenchAdvisor
{
51 // ------------------------------------------------------------------------
53 // ------------------------------------------------------------------------
54 // The default perspective
55 private static final String PERSPECTIVE_ID
= "org.eclipse.linuxtools.tmf.ui.perspective"; //$NON-NLS-1$
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$
65 // ------------------------------------------------------------------------
67 // ------------------------------------------------------------------------
69 public WorkbenchWindowAdvisor
createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer
) {
70 return new ApplicationWorkbenchWindowAdvisor(configurer
);
74 public void initialize(IWorkbenchConfigurer configurer
) {
75 configurer
.setSaveAndRestore(true);
76 declareWorkbenchImages();
80 public String
getInitialWindowPerspectiveId() {
81 return PERSPECTIVE_ID
;
85 public IAdaptable
getDefaultPageInput() {
86 IWorkspace workspace
= ResourcesPlugin
.getWorkspace();
87 return workspace
.getRoot();
91 public void preStartup() {
92 IDE
.registerAdapters();
96 public void postShutdown() {
98 final MultiStatus status
= new MultiStatus(TracingRcpPlugin
.PLUGIN_ID
, 1, Messages
.Application_WorkspaceSavingError
, null);
100 IRunnableWithProgress runnable
= new IRunnableWithProgress() {
102 public void run(IProgressMonitor monitor
) {
104 IWorkspace ws
= ResourcesPlugin
.getWorkspace();
105 status
.merge(ws
.save(true, monitor
));
106 } catch (CoreException e
) {
107 status
.merge(e
.getStatus());
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
);
117 if (!status
.isOK()) {
118 ErrorDialog
.openError(null, Messages
.Application_WorkspaceSavingError
, null, status
, IStatus
.ERROR
| IStatus
.WARNING
);
119 TracingRcpPlugin
.getDefault().getLog().log(status
);
123 // ------------------------------------------------------------------------
125 // ------------------------------------------------------------------------
126 private void declareWorkbenchImages() {
128 Bundle ideBundle
= Platform
.getBundle(IDEWorkbenchPlugin
.IDE_WORKBENCH
);
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$
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$
144 declareWorkbenchImage(ideBundle
, IDEInternalWorkbenchImages
.IMG_ETOOL_NEXT_NAV
, PATH_ETOOL
145 + "next_nav.gif", false); //$NON-NLS-1$
147 declareWorkbenchImage(ideBundle
, IDEInternalWorkbenchImages
.IMG_ETOOL_PREVIOUS_NAV
,
148 PATH_ETOOL
+ "prev_nav.gif", false); //$NON-NLS-1$
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$
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$
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$
167 declareWorkbenchImage(ideBundle
,
168 IDEInternalWorkbenchImages
.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ
, PATH_WIZBAN
169 + "workset_wiz.png", false); //$NON-NLS-1$
171 declareWorkbenchImage(ideBundle
, IDEInternalWorkbenchImages
.IMG_DLGBAN_SAVEAS_DLG
,
172 PATH_WIZBAN
+ "saveas_wiz.png", false); //$NON-NLS-1$
174 declareWorkbenchImage(ideBundle
, IDEInternalWorkbenchImages
.IMG_DLGBAN_QUICKFIX_DLG
,
175 PATH_WIZBAN
+ "quick_fix.png", false); //$NON-NLS-1$
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$
184 declareWorkbenchImage(ideBundle
, IDEInternalWorkbenchImages
.IMG_ELCL_QUICK_FIX_ENABLED
,
185 PATH_ELOCALTOOL
+ "smartmode_co.gif", true); //$NON-NLS-1$
187 declareWorkbenchImage(ideBundle
, IDEInternalWorkbenchImages
.IMG_DLCL_QUICK_FIX_DISABLED
,
188 PATH_DLOCALTOOL
+ "smartmode_co.gif", true); //$NON-NLS-1$
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$
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$
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$
219 * Declares an IDE-specific workbench image.
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}).
225 * @param symbolicName
226 * the symbolic name of the image
228 * the path of the image file; this path is relative to the base
231 * <code>true</code> if this is a shared image, and
232 * <code>false</code> if this is not a shared image
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
);