Top / Eclipse / プラグイン開発のTIPS集 / ポップアップメニューの機能を追加する(Eclipse3.3版)

Eclipse 3.3からのポップアップメニューへの機能追加

メニューバーを構築する(Eclipse3.3版)のページで、メインメニューやビュー内の△メニューへ機能を追加する方法が、Eclipse3.3から変更になったこと、その機能を使うための拡張ポイントがやインタフェースが、org.eclipse.ui.menus 拡張ポイントに統一化されたことを書きました。

さて、こんどはそのorg.eclipse.ui.menus 拡張ポイントを用いて、ポップアップメニューにコマンドを追加する方法をまとめたいと思います。

いままでは org.eclipse.ui.popupMenus 拡張ポイントとIViewActionDelegate,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>
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に指定します*1かつて

<viewerContribution
    id="nu.mine.kino.plugin.samples.rcp.viewerContribution1"
    targetID="org.eclipse.ui.views.ProblemView">

などとして、IViewActionDelegate? を実装してなどとあまりキレイでなかったのですが、すっきり実装できるようになりました。

メニューの表示でやったときと同じく、locationURIは?でパラメタをつけてSeparator名を指定することで表示場所の制御を行うことも可能です。

ちなみにgetSite().registerContextMenuを理解するにあるとおり、ポップアップにコマンドを追加するにはポップアップ側でメニューとSelectionProvider?を公開しておく必要があります。SelectionProvider?についてはこちら

選択しているオブジェクトの種類で、表示・非表示を制御する

ポップアップへコマンドを追加するとき、特定のオブジェクトが選択されている状態のときのみ、コマンドを表示してあげるのがとても親切ですね。この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?じゃないモノを選択してるから、メニューに表示されない
    popup02.png


  • IJavaElement?なモノを選択したらメニューに表示された
    popup03.png

うまくいきました。。

ちなみに

<with variable="activeMenuSelection">

この変数に設定できる項目は org.eclipse.ui.ISources に定義されているようです。

関連リンク


この記事は

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

Top / Eclipse / プラグイン開発のTIPS集 / ポップアップメニューの機能を追加する(Eclipse3.3版)

現在のアクセス:15708


*1 ちなみにこのIDは厳密にはビューのIDではないみたいなのでご注意。みたいっつうのは前自分で書いたけど、忘れてるからです(´д`;)

添付ファイル: filepopup03.png 870件 [詳細] filepopup02.png 943件 [詳細] filepopup01.png 981件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-05-23 (金) 08:08:56 (3618d)