org.eclipse.ui.popupMenus

org.eclipse.ui.popupMenus 扩展点允许插件添加到其他视图和编辑器的弹出菜单。

可以利用操作的标识(viewerContribution)来将操作添加到特定的弹出菜单, 也可以为对象类型(objectContribution)添加操作。

自述文件工具定义 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="Show Readme Action"
            icon="icons/basic/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>
</extension>

为对象类 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

注意:名称 viewerContribution 有点让人容易误解,原因是它与 JFace 查看器不相关。更好的名称是 popupMenuContribution

查看器添加项使用其标识向特定视图或者编辑器弹出菜单作添加。以下标记说明插件可以如何在工作台任务列表弹出菜单中注册特定操作。

<extension point="org.eclipse.ui.popupMenus">
    <viewerContribution
        id="com.example.C2"
        targetID="org.eclipse.ui.views.TaskList">
        <action id="com.example.showExample"
            label="&amp;Show Example"
            menubarPath="additions"
            icon="icons/showExample.gif"
            helpContextId="com.example.show_action_context"
            class="com.example.actions.ExampleShowActionDelegate">
        </action>
    </viewerContribution>
</extension>

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

在此示例中,我们指定弹出菜单的标识以及添加项的弹出菜单中的路径

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