插件为工作台中已经存在的视图添加行为是很常见的。这是通过 org.eclipse.ui.viewActions 扩展点来完成的。此扩展点允许插件为现有视图的本地下拉菜单和本地工具栏添加菜单项、子菜单和工具栏条目。
您可能已经注意到,每当选择自述文件时,就会启用导航器的本地工具栏中的项。此项还会出现在导航器的本地下拉菜单中。这些操作出现的原因是自述文件工具使用 viewActions 扩展来添加它们。
下面是相关的 plugin.xml 添加项。
<extension point = "org.eclipse.ui.viewActions"> <viewContribution id="org.eclipse.ui.examples.readmetool.vc1" targetID="org.eclipse.ui.views.ResourceNavigator"> <action id="org.eclipse.ui.examples.readmetool.va1" label="%PopupMenu.ResourceNav.label" menubarPath="additions" toolbarPath="additions" icon="icons/obj16/editor.gif" tooltip="%PopupMenu.ResourceNav.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.view_action_context" class="org.eclipse.ui.examples.readmetool.ViewActionDelegate" enablesFor="1"> <selection class="org.eclipse.core.resources.IFile" name="*.readme"/> </action> </viewContribution> </extension>
指定了具有唯一标识的视图添加项。在 targetID 中指定了我们正在将操作添加至的视图。正在为资源导航器的菜单添加操作。 指定标号以及新操作的菜单栏和工具栏位置。(有关菜单和工具栏位置的完整讨论, 参见菜单和工具栏路径)。
还要指定启用操作应该采用的条件。可以看到,当一个选择(enablesFor="1")的类型为 IFile (class="org.eclipse.core.resources.IFile"), 其名称在文件扩展名(name="*.readme")中具有“.readme”时,将启用此操作。的确,那刚好是当您单击资源导航器周围时所发生的情况。
plugin.xml 中的信息是将各项添加至菜单和工具栏所需的全部信息, 因为仅当从菜单或工具栏实际选择该操作时,插件代码才会运行。要提供操作行为,plugin.xml 中指定的实现类必须实现 IViewActionDelegate 接口。
在此示例中,自述文件插件提供了 ViewActionDelegate 来实现操作。如果您浏览此类, 将看到它包括用于记录它的视图、处理选择更改和调用它的操作的方法。 当调用操作时,它自身仅启动一个对话框,声明已执行该操作。
public void run(org.eclipse.jface.action.IAction action) { MessageDialog.openInformation(view.getSite().getShell(), MessageUtil.getString("Readme_Editor"), MessageUtil.getString("View_Action_executed")); }
尽管此操作很简单,但是我们可以想象通过使用选择和更多功能对话框如何使此操作执行更有意义的任务。