org.eclipse.ui.popupMenus

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"	
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       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"
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       class="org.eclipse.ui.examples.readmetool.ViewActionDelegate">	
	    </action>
       </viewerContribution>
</extension>
注意:名称 viewerContribution 有点让人容易误解,原因是它与 JFace 查看器不相关。更好的名称是 popupMenuContribution

当扩展是 viewerContribution 时,则提供的类必须实现 IEditorActionDelegateIViewActionDelegate 接口,这取决于是将操作添加至编辑器的弹出菜单还是添加至视图的弹出菜单。

targetID 指定将要改变的弹出菜单的所属视图。在本例中,我们将操作添加至其中一个自述文件工具视图,即大纲图。操作本身与我们已经看到过的其他操作类似。 我们指定了操作的 iddefinitionIdlabelicon, 并且指定了添加项中的弹出菜单的 path。此操作将仅显示在自述文件大纲视图的弹出菜单中。

注意:definitionId 允许将操作链接到由 org.eclipse.ui.commands 扩展创建的命令(该扩展可用于进行键绑定)。请参阅命令

viewerContribution 添加至 popupMenus 扩展点所需的接口与 viewActions editorActions 扩展点所需的接口相同。如果想要为弹出菜单以及视图或编辑器的本地菜单添加相同的操作,则可以对这两个扩展使用相同的类。