#author("2021-09-17T11:04:47+00:00","","")
#topicpath
----
//ここにコンテンツを記述します。
org.eclipse.ui.IObjectActionDelegateはパッケージエクスプローラなどを右クリックしたときに現れるポップアップメニューに項目を追加するためのインターフェースです。




#contents

***拡張ポイント [#o72e1a47]
 org.eclipse.ui.popupMenus

***plugin.xmlのサンプル [#q188df92]
 <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" <- フォルダだったら表示
などがあります。

**ポイント [#hc0920c7]
実装クラスはIObjectActionDelegateを実装します。実際に使用するメソッドは
 selectionChanged(IAction action, ISelection selection)
 run(IAction action) 
でしょう。

***selectionChanged(IAction action, ISelection selection) [#w9fa180e]
なにかが選択されたときに呼ばれるメソッドです。selectionを用いて、メニュー内でクリックされたリソースが何であるかを判定するロジックを記述します。


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




**TIPS [#h2f76e5b]
:objectContribution|objectContributionを指定した場合は、任意のViewerにポップアップが追加されるようです。


:viewerContribution|viewerContributionを指定した場合は、targetID属性で指定したビューにのみ、ポップアップが追加されるようです。ところで、targetIDだけだと、どのウィジェットにポップアップをつけるのかわかんないじゃん、とおもったのですが、ちゃんと追加される側のビューでコンテキストメニューを公開する必要があるみたいです。ようするに、このIDのビューのコンテキストはココですよ、という。でそのコンテキストの公開方法が
 MenuManager menuManager = new MenuManager();
 getSite().registerContextMenu(menuManager,getSite().getSelectionProvider());
なんですね。
 
***関連リンク [#r38ed927]
-[[Eclipse/プラグイン開発のTIPS集/getSite().registerContextMenuを理解する]]

----
この記事は
#vote(おもしろかった[4],そうでもない[0])
#vote(おもしろかった[5],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS