org.eclipse.ui.popupMenus

org.eclipse.ui.popupMenus 延伸點可讓外掛程式提供到其它檢視畫面和編輯器的蹦現功能表。

您可以利用 ID (viewerContribution) 將動作提供到特定蹦現功能表中,也可以提供某物件類型 (objectContribution) 的動作。

Readme 工具會定義一個 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="顯示 Readme 動作"
            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 物件類別的「顯示 Readme 動作」這個動作。 這表示如果選取 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");
}

當我們從資源導覽器中選取 Readme 檔時,我們就能見到蹦現功能表構成要素。

蹦現功能表的其它類型稱為 viewerContribution

附註: viewerContribution 這個名稱有點誤導,因為它沒有關聯於 JFace 檢視器。 popupMenuContribution 是比較好的名稱。

檢視器構成要素用來提供到使用其 ID 的特定檢視畫面或編輯器的蹦現功能表。 下列標記顯示外掛程式如何在工作台作業清單蹦現功能表中登錄特定動作。

<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 介面。

在這個範例中,我們指定構成要素的蹦現功能表 id 及蹦現功能表內的 path

附註:popupMenus 延伸點的 viewerContribution 所需要的介面與 viewActionseditorActions 延伸點所需要的相同。 如果您要將相同動作提供給蹦現功能表和檢視畫面或編輯器的本端功能表,兩個延伸項目都可以使用相同的類別。