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.gif" 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.gif" 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 指定将改变其弹出菜单的视图。 在此情况下,我们正在将操作添加至作为自述文件工具视图之一的大纲图。 该操作自身与我们看到的其它操作相似。我们指定操作的标识、标号和图标, 以及添加项在弹出菜单中的路径。该操作将仅显示在自述文件大纲视图的弹出菜单中。