org.eclipse.ui.popupMenus

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"	
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       enablesFor="1">
	   </action>
	 </objectContribution>
 	 ...

オブジェクト組み込み

"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 ファイルを選択すると、ポップアップ・メニューの組み込みがわかります。

ビューアー組み込み

ビューアー組み込みは、その 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"
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       class="org.eclipse.ui.examples.readmetool.ViewActionDelegate">	
	   </action>
       </viewerContribution>
 </extension>
注:  JFace ビューアーとは関連がないため、viewerContribution という名前は、誤解されやすいものです。 popupMenuContribution という名前のほうが適切です。

拡張が viewerContribution の場合、アクションをエディターまたはビューのポップアップ・メニューへ組み込むかどうかによって、提供されるクラスは、IEditorActionDelegate または IViewActionDelegate インターフェースを実装する必要があります。  

targetID では、変更対象のポップアップ・メニューを持つビューを指定します。   この場合、README ツール・ビューの 1 つであるアウトライナーにアクションを追加します。  アクション自体は、今まで見てきた他のものに似ています。   アクションの iddefinitionIdlabel、および icon を指定し、コントリビューションに対するポップアップ内の path を指定します。   アクションは、README アウトライン・ビューのポップアップ・メニューにのみ表示されます。

注: definitionId を使用すると、キー・バインディングに使用できる org.eclipse.ui.commands 拡張によって作成されたコマンドに、アクションをリンクすることができます。 コマンドを参照してください。

viewerContributionpopupMenus 拡張ポイントに組み込むために必要なインターフェースは、viewActions および editorActions 拡張ポイントで必要なものと同じです。ビューまたはエディターのポップアップ・メニューおよびローカル・メニューへ同じアクションを組み込む場合は、両方の拡張に対して同じクラスを使用することができます。