Customizing the workbench
The "entry point" for supplying custom workbench behavior is the designation of a
WorkbenchAdvisor
for configuring the workbench. Your rich client plug-in should extend this abstract class to provide
the application-specific configuration for the workbench. The browser example does this using the
BrowserAdvisor class.
...
int code = PlatformUI.createAndRunWorkbench(display,
new BrowserAdvisor());
...
A workbench advisor is responsible for overriding methods to configure the workbench with its desired layout and
features, such as the action bar items or intro page.
The workbench life-cycle
Life-cycle methods provided by the workbench advisor allow
your application to hook into the creation of the workbench at any point in time and influence the behavior.
The following list of advisor life-cycle methods that can be overridden
comes from the javadoc for
WorkbenchAdvisor
.
-
initialize
- called first; before any windows; use to
register things
-
preStartup
- called second; after initialize but
before first window is opened; use to temporarily disable things during
startup or restore
-
postStartup
- called third; after first window is
opened; use to reenable things temporarily disabled in previous step
-
postRestore
- called after the workbench and its windows
have been recreated from a previously saved state; use to adjust the
restored workbench
-
preWindowOpen
- called as each window is being opened;
use to configure aspects of the window other than action bars
-
fillActionBars
- called after preWindowOpen
to
configure a window's action bars
-
postWindowRestore
- called after a window has been
recreated from a previously saved state; use to adjust the restored
window
-
postWindowCreate
- called after a window has been created,
either from an initial state or from a restored state; used to adjust the
window
-
openIntro
- called immediately before a window is opened in
order to create the introduction component, if any.
-
postWindowOpen
- called after a window has been
opened; use to hook window listeners, etc.
-
preWindowShellClose
- called when a window's shell
is closed by the user; use to pre-screen window closings
-
eventLoopException
- called to handle the case where the
event loop has crashed; use to inform the user that things are not well
-
eventLoopIdle
- called when there are currently no more
events to be processed; use to perform other work or to yield until new
events enter the queue
-
preShutdown
- called just after event loop has terminated
but before any windows have been closed; allows the application to veto
the shutdown
-
postShutdown
- called last; after event loop has terminated
and all windows have been closed; use to deregister things registered during
initialize
As you can see, a rich client application has a lot of control over how the workbench is configured
and implemented. In the browser example, the primary function of the BrowserAdvisor is to configure the action bars with
menu items appropriate for a browser. This is done in the fillActionBars method:
public void fillActionBars(IWorkbenchWindow window, IActionBarConfigurer configurer, int flags) {
...
BrowserActionBuilder builder = new BrowserActionBuilder(window);
getWorkbenchConfigurer().getWindowConfigurer(window).setData(BUILDER_KEY, builder);
builder.fillActionBars(configurer, flags);
}
In this method, the workbench is configured with a specialized action builder. This action builder
is used to fill the action bars of the workbench. We'll look at the details for how the actions are specified
in
Defining the actions. For now, we are focusing on how we configure
the workbench.
Note the use of the getWorkbenchConfigurer() method above. The
IWorkbenchConfigurer
and
IWorkbenchWindowConfigurer
are
used in conjunction with the
WorkbenchAdvisor
to customize the window. These classes allow you to override many aspects of workbench creation at different levels.
For example, the
IWorkbenchWindowConfigurer
defines
protocol that assumes a particular configuration of controls in the workbench window, such an action bar, status line, perspective bar,
cool bar, etc. Its protocol allows you customize and populate these items. The
IWorkbenchConfigurer
operates at a higher level, allowing you to store application-specific data with the workbench. The
WorkbenchAdvisor
provides
access to these configurers in the life-cycle methods noted above. Lower level methods inside
WorkbenchAdvisor
may be overridden
to completely replace default behavior. For example, your workbench advisor could
override the method that creates the SWT controls in the window in order to provide a completely
different implementation for the main window.
In other words, there are many ways to customize the workbench and several different levels at which these
techniques can be used.
The javadoc for
WorkbenchAdvisor
,
IWorkbenchConfigurer
, and
IWorkbenchWindowConfigurer
includes a complete description of the available protocol. See also the complete implementation of
BrowserAdvisor for comments on alternate implementations.