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="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>
"Show Readme Action" アクションは、 オブジェクト・クラス 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");
}
リソース・ナビゲーターから README ファイルを選択すると、ポップアップ・メニューの組み込みがわかります。
他の型のポップアップ・メニューの組み込みは、viewerContribution と呼ばれます。
注: JFace ビューアーとは関連がないため、viewerContribution という名前は、誤解されやすいものです。 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="&Show Example"
menubarPath="additions"
icon="icons/showExample.gif"
helpContextId="com.example.show_action_context"
class="com.example.actions.ExampleShowActionDelegate">
</action>
</viewerContribution>
</extension>
拡張が viewerContribution の場合、 アクションをエディターまたはビューのポップアップ・メニューへ組み込むかどうかによって、提供されるクラスは、 IEditorActionDelegate または IViewActionDelegate インターフェースを インプリメントする必要があります。
この例では、組み込みのためのポップアップ内で、ポップアップの ID およびパスを指定します。
注: popupMenus 拡張ポイントへの viewerContribution に必要なインターフェースは、 viewActions および editorActions 拡張ポイントで必要なものと同じです。 ビューまたはエディターのポップアップ・メニューおよびローカル・メニューへ同じアクションを組み込む場合は、 両方の拡張に対して同じクラスを使用することができます。