- 追加された行はこの色です。
- 削除された行はこの色です。
#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(おもしろかった,そうでもない)
#vote(おもしろかった[5],そうでもない[0])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}