- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**Eclipse 3.3からのポップアップメニューへの機能追加 [#f991f74a]
[[メニューバーを構築する(Eclipse3.3版)>Eclipse/プラグイン開発のTIPS集/メニューバーを構築する(Eclipse3.3版)]]のページで、メインメニューやビュー内の△メニューへ機能を追加する方法が、Eclipse3.3から変更になったこと、その機能を使うための拡張ポイントがやインタフェースが、org.eclipse.ui.menus 拡張ポイントに統一化されたことを書きました。
さて、こんどはそのorg.eclipse.ui.menus 拡張ポイントを用いて、ポップアップメニューにコマンドを追加する方法をまとめたいと思います。
いままでは org.eclipse.ui.popupMenus 拡張ポイントと[[IViewActionDelegate>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.IViewActionDelegate(ポップアップ・メニューバー)]],[[IObjectActionDelegate>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.IObjectActionDelegate(ポップアップメニュー)]]これらのインタフェースで実装されていましたが、これらポップアップメニュー機能もorg.eclipse.ui.menus拡張ポイントに統合されています。
-plugin.xmlの記述。
<extension point="org.eclipse.ui.menus">
<menuContribution locationURI="popup:org.eclipse.ui.popup.any">
<menu id="nu.mine.kino.plugin.newaction.menus.sampleMenu"
label="トップのメニュー">
<command
commandId="nu.mine.kino.plugin.samples.rcp.command" style="push">
</command>
<command
commandId="nu.mine.kino.plugin.newaction.commands.sampleCommand" style="push">
</command>
</menu>
</menuContribution>
</extension>
#ref(popup01.png)
このように、org.eclipse.ui.menus を使用して、URLの指定を
locationURI="popup:org.eclipse.ui.popup.any"
とするということで、ポップアップにコマンドを追加することができました。org.eclipse.ui.popup.any というIDは、全部のポップアップメニューという特殊なIDです。
特定のビューのみに表示したい場合は
locationURI="popup:org.eclipse.ui.views.ProblemView"
などとビューのIDをURIに指定します((ちなみにこのIDは厳密には[[ビューのIDではないみたい>Eclipse/プラグイン開発のTIPS集/getSite().registerContextMenuを理解する]]なのでご注意。みたいっつうのは前自分で書いたけど、忘れてるからです(´д`;) ))。[[かつて>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.IViewActionDelegate(ポップアップ・メニューバー)]]は
<viewerContribution
id="nu.mine.kino.plugin.samples.rcp.viewerContribution1"
targetID="org.eclipse.ui.views.ProblemView">
などとして、IViewActionDelegate を実装してなどとあまりキレイでなかったのですが、すっきり実装できるようになりました。
メニューの表示でやったときと同じく、locationURIは?でパラメタをつけてSeparator名を指定することで表示場所の制御を行うことも可能です。
ちなみに[[getSite().registerContextMenuを理解する>Eclipse/プラグイン開発のTIPS集/getSite().registerContextMenuを理解する]]にあるとおり、ポップアップにコマンドを追加するにはポップアップ側でメニューとSelectionProviderを公開しておく必要があります。SelectionProviderについては[[こちら>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.ISelectionListener]]。
**選択しているオブジェクトの種類で、表示・非表示を制御する [#g05720c8]
ポップアップへコマンドを追加するとき、特定のオブジェクトが選択されている状態のときのみ、コマンドを表示してあげるのがとても親切ですね。このorg.eclipse.ui.menus 拡張ポイントはある条件が成立する状況下でのみ、コマンドを表示するという機能があります。
<extension point="org.eclipse.ui.menus">
<menuContribution locationURI="popup:org.eclipse.ui.popup.any">
<menu id="nu.mine.kino.plugin.newaction.menus.sampleMenu"
label="トップのメニュー">
<command commandId="nu.mine.kino.plugin.samples.rcp.command"
style="push">
</command>
<command
commandId="nu.mine.kino.plugin.newaction.commands.sampleCommand"
style="push">
</command>
<visibleWhen>
<with variable="activeMenuSelection">
<iterate ifEmpty="false"> <-ifEmptyは、Selectionがなかった時の判定。
<adapt type="org.eclipse.jdt.core.IJavaElement">
</adapt>
</iterate>
</with>
</visibleWhen>
</menu>
</menuContribution>
</extension>
このようにvisibleWhen要素で条件を指定することで、ある状況のみコマンドを表示するなんて事ができます。上記の指定は、選択されているオブジェクトがIJavaElementの場合のみって事ですね。
-IJavaElementじゃないモノを選択してるから、メニューに表示されない
#ref(popup02.png)
~~
-IJavaElementなモノを選択したらメニューに表示された
#ref(popup03.png)
うまくいきました。。
ちなみに
<with variable="activeMenuSelection">
この変数に設定できる項目は [[org.eclipse.ui.ISources>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.menusにvisibleWhenで条件指定する]] に定義されているようです。
**関連リンク [#r2c3af78]
-[[ポップアップやメニューバーにアクションを追加するための拡張ポイント、インターフェースのまとめ>Eclipse/プラグイン開発のTIPS集/メニューバーとか、ポップアップとかのまとめ]]
-[[Eclipse/プラグイン開発のTIPS集/メニューバーを構築する(Eclipse3.3版)]]
-[[ビュー内に配置されているウィジェットのポップアップメニューにアクションを追加したり、ビュー自体のメニューバーにアクションを追加したい(ビューを指定)>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.IViewActionDelegate(ポップアップ・メニューバー)]]
-[[ビュー内に配置されているウィジェットのポップアップメニューにアクションを追加したり、ビュー自体のメニューバーにアクションを追加したい(選択されているオブジェクトを指定)>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.IObjectActionDelegate(ポップアップメニュー)]]
-[[エディタを右クリックしたときに現れるポップアップメニューにアクションを追加したい>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.IEditorActionDelegate(ポップアップメニュー)]]
-[[よく出てくるgetSite().registerContextMenuでメニューを公開する仕組み>Eclipse/プラグイン開発のTIPS集/getSite().registerContextMenuを理解する]]
-[[Menu Contributions - Eclipsepedia>http://wiki.eclipse.org/index.php/Menu_Contributions]]
----
この記事は
#vote(おもしろかった[1],そうでもない[1])
#vote(おもしろかった[2],そうでもない[1])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}