org.eclipse.ui.popupMenus 延伸點可讓外掛程式提供到其他視圖和編輯器的蹦現功能表。
您可以利用 ID(viewerContribution)或建立與特定物件類型(objectContribution) 的關聯,將動作提供到特定蹦現功能表中。
Readme 工具定義了兩者。首先,讓我們看一下物件構成要素。
<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 物件類別的「顯示 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 檔時,我們就能見到蹦現功能表構成要素。
檢視器構成要素用來藉由其 ID 提供到特定視圖或編輯器的蹦現功能表。 以下為 Readme 工具的檢視器構成要素:
... <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 指定即將改變蹦現功能表的視圖。在這個案例中,我們新增動作至其中一個 Readme 工具視圖、概要視圖。動作本身相似於我們所見到的其他動作。我們指定動作的 id、標籤、和圖示,蹦現功能表中的路徑作為我們的構成要素。動作只顯示在 Readme 概要視圖的蹦現功能表中。