Top / Eclipse / プラグイン開発のTIPS集 / org.eclipse.ui.IObjectActionDelegate(ポップアップメニュー)

org.eclipse.ui.IObjectActionDelegate?はパッケージエクスプローラなどを右クリックしたときに現れるポップアップメニューに項目を追加するためのインターフェースです。

拡張ポイント

org.eclipse.ui.popupMenus

plugin.xmlのサンプル

<extension point="org.eclipse.ui.popupMenus">
   <objectContribution
       objectClass="org.eclipse.core.resources.IFile"
       ↑ 選択されているのがIFileのときだけ
       id="kino.objectContribution">
      <action
        label="実行!!" <- メニューに表示される文字列
        icon="icons/sample.gif" <- アイコン
        class="kino.actions.HogeAction" <- 実装クラス
        menubarPath="additions"  <- 追加する場所
        enablesFor="1"  <- 選択したファイルが1つだけの時有効
        id="kino.actions.HogeAction">
      </action>
   </objectContribution>
</extension>

objectClassの場所は、他に

objectClass="org.eclipse.core.resources.IResource" <- ファイルとか、フォルダだったら表示
objectClass="org.eclipse.jdt.core.ICompilationUnit" <- いわゆるソースファイルだったら
objectClass="org.eclipse.core.resources.IFile" <- ファイルだったら表示
objectClass="org.eclipse.core.resources.IFolder" <- フォルダだったら表示

などがあります。

ポイント

実装クラスはIObjectActionDelegate?を実装します。実際に使用するメソッドは

selectionChanged(IAction action, ISelection selection)
run(IAction action) 

でしょう。

selectionChanged(IAction action, ISelection selection)

なにかが選択されたときに呼ばれるメソッドです。selectionを用いて、メニュー内でクリックされたリソースが何であるかを判定するロジックを記述します。

run(IAction action)

実際にメニューから選択されたときに呼ばれるメソッドです。selectionChangedで選択されたリソースをフィールドに保持して、runメソッド内でロジックを記述する、なんてのが基本パターンでしょうか。

TIPS

objectContribution
objectContributionを指定した場合は、任意のViewerにポップアップが追加されるようです。
viewerContribution
viewerContributionを指定した場合は、targetID属性で指定したビューにのみ、ポップアップが追加されるようです。ところで、targetIDだけだと、どのウィジェットにポップアップをつけるのかわかんないじゃん、とおもったのですが、ちゃんと追加される側のビューでコンテキストメニューを公開する必要があるみたいです。ようするに、このIDのビューのコンテキストはココですよ、という。でそのコンテキストの公開方法が
MenuManager menuManager = new MenuManager();
getSite().registerContextMenu(menuManager,getSite().getSelectionProvider());
なんですね。

関連リンク


この記事は

選択肢 投票
おもしろかった 4  
そうでもない 0  

Top / Eclipse / プラグイン開発のTIPS集 / org.eclipse.ui.IObjectActionDelegate(ポップアップメニュー)

現在のアクセス:11924


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-03-21 (火) 19:07:40 (972d)