org.eclipse.ui.popupMenus 扩展点允许插件添加到其它视图和编辑器的弹出菜单。
可以利用操作的标识将操作添加至特定弹出菜单(viewerContribution),或通过将操作与特定对象类型进行关联来添加操作(objectContribution)。
自述文件定义两者。让我们首先了解对象添加项。
<extension point = "org.eclipse.ui.popupMenus"> <objectContribution id="org.eclipse.ui.examples.readmetool" objectClass="org.eclipse.core.resources.IFile" nameFilter="*.readme"> <action id="org.eclipse.ui.examples.readmetool.action1" label="%PopupMenus.action" icon="icons/ctool16/openbrwsr.png" menubarPath="additions" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate" enablesFor="1"> </action> </objectContribution> ...
为对象类 IFile 添加了操作“显示自述文件操作”。这意味着如果选择了 IFile 对象,则包含 IFile 对象的任何视图将显示添加项。我们看到,使用名称过滤器(nameFilter="*.readme")来进一步限制了选择标准,并且是对单个选择(enablesFor="1")进行限制。正如我们以前讨论的那样,在实际选择菜单项之前,此菜单的注册不会运行插件中的任何代码。
当选择了菜单项时,工作台将运行指定的类。由于将弹出菜单声明为 objectContribution,所提供的类必须实现 IObjectActionDelegate。
操作是在 PopupMenuActionDelegate 中实现的。
public void run(IAction action) { MessageDialog.openInformation( this.part.getSite().getShell(), "Readme Example", "Popup Menu Action executed"); }
当我们从资源导航器中选择自述文件时,就可以看到弹出菜单添加项。
查看器添加项用来使用其标识添加至特定视图或编辑器的弹出菜单。以下是自述文件工具的查看器添加项:
... <viewerContribution id="org.eclipse.ui.examples.readmetool2" targetID="org.eclipse.ui.examples.readmetool.outline"> <action id="org.eclipse.ui.examples.readmetool.action1" label="%PopupMenus.action" icon="icons/ctool16/openbrwsr.png" menubarPath="additions" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" class="org.eclipse.ui.examples.readmetool.ViewActionDelegate"> </action> </viewerContribution> </extension>
注意:名称 viewerContribution 有点让人容易误解,原因是它与 JFace 查看器不相关。更好的名称是 popupMenuContribution。
当扩展是 viewerContribution 时,则提供的类必须实现 IEditorActionDelegate 或 IViewActionDelegate 接口,这取决于是将操作添加至编辑器的弹出菜单还是添加至视图的弹出菜单。
targetID 指定将改变其弹出菜单的视图。在这种情况下,我们会向其中一个自述文件工具视图(大纲图)添加操作。操作本身类似于我们见到的其它操作。我们将在添加项的弹出框中指定操作的标识、标签、图标以及路径。该操作将仅显示在自述文件大纲视图的弹出菜单中。