#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;}