用于提供定制工作台行为的“入口点”是为配置工作台对 WorkbenchAdvisor 的指定。富客户机插件应该扩展此抽象类以便为工作台提供专用配置。浏览器示例是通过使用 BrowserAdvisor 类来完成此任务的。
... int code = PlatformUI.createAndRunWorkbench(display, new BrowserAdvisor()); ...
工作台顾问程序负责覆盖方法以便为工作台配置它期望的布局和功能部件(例如,操作栏项或简介页面)。
工作台顾问程序提供的生命周期方法允许应用程序在任何时候挂接到工作台的创建并影响该行为。可以覆盖的顾问程序生命周期方法的以下列表来自 WorkbenchAdvisor 的 javadoc。
initialize
- 首先调用;在任何窗口之前;用来注册对象preStartup
- 第二步调用;在初始化之后但在第一个窗口打开之前;用来在启动或恢复期间临时禁用对象postStartup
- 第三步调用;在第一个窗口打开之后;用来重新启用在前一步中临时禁用的对象postRestore
- 在已经从先前保存的状态重新创建工作台及其窗口之后调用;用来调整已恢复的工作台preWindowOpen
- 打开每个窗口时都会调用;用来配置窗口中除了操作栏之外的所有对象fillActionBars
- 在 preWindowOpen
之后调用,以便配置窗口的操作栏postWindowRestore
- 在已经从先前保存的状态重新创建窗口之后调用;用来调整已恢复的窗口postWindowCreate
- 在已经从初始状态或者从已恢复的状态创建窗口之后调用;用来调整该窗口openIntro
- 恰好在打开窗口之前调用,以便创建简介组件(如果有)。postWindowOpen
- 在已经打开窗口之后调用;用来挂接窗口侦听器等等preWindowShellClose
- 在用户关闭窗口的 shell 时调用;用来监视窗口关闭情况eventLoopException
- 调用此项来处理事件循环已崩溃的情况;用来通知用户运行状况不太好eventLoopIdle
- 在当前没有更多事件要处理时调用;用来执行其它工作或放弃,直到新事件进入队列为止preShutdown
- 在事件循环终止之后但是要在任何窗口都已经关闭之前调用;允许应用程序禁止关闭postShutdown
- 最后调用;在事件循环已经终止并且所有窗口都已经关闭之后调用;用来注销在初始化期间注册的各个对象正如您可以看到的那样,富客户机应用程序对于如何配置和实现工作台有很高的控制权。在浏览器示例中,BrowserAdvisor 的主要功能是为操作栏配置适用于浏览器的菜单项。这是使用 fillActionBars 方法实现的:
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); }
在此方法中,工作台配置了专用的操作构建器。此操作构建器用来填充工作台的操作栏。我们将在定义操作中查看有关如何指定操作的详细信息。目前,我们主要讨论如何配置工作台。
注意上面的 getWorkbenchConfigurer() 方法的使用。IWorkbenchConfigurer 和 IWorkbenchWindowConfigurer 与 WorkbenchAdvisor 一起用来定制窗口。这些类使您可以覆盖不同级别的工作台创建的许多方面。例如,IWorkbenchWindowConfigurer 定义采用工作台窗口中的控件的特定配置(例如,操作栏、状态行、透视图栏和工具栏等等)的协议。它的协议允许您定制和填充这些项。IWorkbenchConfigurer 在较高级别上运行,这允许您使用工作台存储特定于应用程序的数据。WorkbenchAdvisor 提供对上面说明的生命周期方法中的这些配置程序的访问权。可以覆盖 WorkbenchAdvisor 中较低级别的方法以彻底替换缺省行为。例如,工作台顾问程序可能覆盖在窗口中创建 SWT 控件的方法,以便为主窗口提供完全不同的实现。
换句话说,可以采用多种方法来定制工作台,可以在几个不同的级别使用这些技术。WorkbenchAdvisor、IWorkbenchConfigurer 和 IWorkbenchWindowConfigurer 的 Javadoc 包括对提供的协议的完整描述。有关其它实现的注释,另请参阅 BrowserAdvisor 的完整实现。