插件可以使用 org.eclipse.ui.actionSets 扩展点来向工作台菜单和工具栏添加菜单、菜单项和工具栏项。为了减少同时显示每个插件的菜单添加项而导致的混乱, 可将添加项分成多个操作集,通过用户首选项来使这些操作集可视。
可以通过从工作台菜单中选择窗口 -> 定制透视图... 来查看已经向工作台添加了哪些操作集。此操作将显示一个对话框, 列示可供当前透视图使用的快捷方式和操作集。 操作集列示在其它下面。操作集旁边的选择标记意味着菜单和工具栏操作在工作台中是可视的。可以选择操作集的名称来查看右边的可用操作的列表。下图显示了工作台中可用的操作集的列表。(您的工作台的外观可能有些不同,这取决于您已经安装了哪些插件以及哪个透视图是活动的)。
自述文件工具使用操作集来向工作台菜单添加几个不同的“打开自述文件浏览器”操作。 (我们向资源导航器的弹出菜单添加了类似的操作)。标记如下:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="org_eclipse_ui_examples_readmetool_actionSet" label="%ActionSet.name" visible="true"> <menu id="org_eclipse_ui_examples_readmetool" label="%ActionSet.menu" path="window/additions"> <separator name="slot1"/> <separator name="slot2"/> <separator name="slot3"/> </menu> <action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" label="%ReadmeAction.label" tooltip="%ReadmeAction.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" icon="icons/ctool16/openbrwsr.gif" class="org.eclipse.ui.examples.readmetool.WindowActionDelegate" enablesFor="1"> <selection class="org.eclipse.core.resources.IFile" name="*.readme"> </selection> </action> ... </actionSet> </extension>
哇,现在有很多工作要做!让我们一步一步地来,现在只查看第一个操作。
首先,声明操作集,并指定标号。标号“ReadMe Actions”(在插件的属性文件中为 %ActionSet.name 键定义的)用来显示上面显示的对话框中的操作集。 由于我们将 visible 设置为“true”,对于工作台, 一开始会在操作集列表中选择该操作集,并且这些操作将是可视的。
操作集声明的余下部分与定义将在其中出现操作的菜单以及操作本身有关。
我们定义一个菜单,其标号出现在工作台菜单中。菜单的路径告诉工作台将新菜单放在窗口菜单的添加项槽中。 (有关菜单路径和槽的讨论,参见菜单和工具栏路径。)还会在新菜单中定义一些槽, 以便可以在菜单中的特定位置插入操作。
此标记就足以使菜单出现在工作台窗口菜单中。
接着,我们定义操作本身。
操作定义(标识、标号、图标和类 )类似于我们在视图、 编辑器和弹出菜单中所看到的其它操作。此时我们将主要研究它们的区别: 操作将转至何处?我们使用 menubarPath 和 toolbarPath 指示它的位置。首先,我们定义 menubarPath 以将操作添加至刚定义的菜单中的某个槽("window/org_eclipse_ui_examples_readmetool/slot1")。
然后,我们定义新的 toolbarPath 以将操作插入到工作台工具栏中。 因为我们已经定义了新的工具路径("readme"), 因此工作台将根据其它插件的工具栏添加项来决定它转至何处。
用户选择该操作时将会发生什么事?该操作由在 class 属性中指定的类实现。如果操作将作为下拉工具项显示在工具栏中, 则操作类必须实现 IWorkbenchWindowActionDelegate 或 IWorkbenchWindowPulldownDelegate。 由于我们未创建下拉工具项,因此提供 WindowActionDelegate。 此类与 ObjectActionDelegate 相似。 在用户选择该操作时,它将启动自述文件部分对话框。 (我们将在应用程序对话框中讨论部分对话框。)
该操作还将为其菜单项和工具栏项提供启用条件。 仅当选择单个(enablesFor="1")自述文件 (selectionClass ="org.eclipse.core.resources.IFile" name="*.readme")时, 才会启用菜单和工具栏项。 此操作的菜单和工具栏项的出现和启用取决于 plugin.xml 文件中的标记。在用户选择该操作和工作台运行操作类之前, 将不执行任何插件代码。
稍后我们将在可重定目标的操作的上下文中考察其它两个操作。