Top / Eclipse / プラグイン開発のTIPS集 / org.eclipse.ui.IViewActionDelegate(ポップアップ・メニューバー)

すでに他のプラグイン開発者から提供されているビュー(IViewPart?の実装クラスね)内に配置されているウィジェットのポップアップメニューにアクションを追加したり、そのビュー自体のメニューバーにアクションを追加したいときには、このクラスを使用します。


ビュー自体のメニューバーにアクションを追加する。

拡張ポイント

org.eclipse.ui.viewActions

plugin.xmlのサンプル

<extension point="org.eclipse.ui.viewActions">
 <viewContribution
   id="nu.mine.kino.plugin.samples.rcp.viewContribution2"
   targetID="nu.mine.kino.plugin.samples.rcp.view3">
  <action
      class="nu.mine.kino.plugin.samples.rcp.ViewActionDelegate2"
      id="nu.mine.kino.plugin.samples.rcp.action2"
      label="アクション3" menubarPath="addition"
      style="push"/>
 </viewContribution>
</extension>


引き続き、ビュー内のViewerクラスのポップアップメニューにアクションを追加する方法です。

ビュー内のViewerクラスのポップアップメニューにアクションを追加する。

拡張ポイント

org.eclipse.ui.popupMenus

その前に

他のビュー内のViewerのポップアップメニューにアクションを追加するにはビュー側で「そのViewerが使っているポップアップメニューを公開してくれている」ことが前提となっています。具体的には

 getSite().registerContextMenu(menuMgr, getSite().getSelectionProvider());

を使ってビューがメニューを公開してくれているか、ということです。

通常ビューを作るときは以下のようなサンプルになると思います。

public void createPartControl(Composite parent) {
  viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
      | SWT.V_SCROLL);
  ...
  makeActions(); <- フィールドのアクションをnewする
  hookContextMenu();
  hookDoubleClickAction();
  contributeToActionBars();
}
private void hookContextMenu() {
  MenuManager menuMgr = new MenuManager("#PopupMenu");
  menuMgr.setRemoveAllWhenShown(true);
  menuMgr.addMenuListener(new IMenuListener() {
    public void menuAboutToShow(IMenuManager manager) {
      fillContextMenu(manager);
    }
  });
  Menu menu = menuMgr.createContextMenu(viewer.getControl());
  viewer.getControl().setMenu(menu);
  
  getSite().registerContextMenu(menuMgr, viewer); <-これ。
}
private void fillContextMenu(IMenuManager manager) {
  manager.add(action1);
  manager.add(action2);
  // Other plug-ins can contribute there actions here
  manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); <-これ。
}

こうやっておけば外部からアクションを追加することができます。

ポイント

ポイントは

ですね。

plugin.xml のサンプル

getSite().registerContextMenu(menuMgr, viewer);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));

としたことで、

という事になります。ここまでできてると別のプラグインからこのビューのポップアップにアクションを追加することができます。追加するにはplugin.xmlで以下のように宣言すればOKです。

<extension point="org.eclipse.ui.popupMenus">
  <viewerContribution
     id="nu.mine.kino.plugin.samples.rcp.viewerContribution1"
     targetID="nu.mine.kino.plugin.samples.rcp.view3">
    <action
      class="nu.mine.kino.plugin.samples.rcp.Action1"
      ↑ IViewActionDelegateの実装クラス
      id="nu.mine.kino.plugin.samples.rcp.action1"
      label="アクション4"
      menubarPath="additions"/>
      ↑ additionsは IWorkbenchActionConstants.MB_ADDITIONSの文字列
  </viewerContribution>
</extension>

この記事は

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

Top / Eclipse / プラグイン開発のTIPS集 / org.eclipse.ui.IViewActionDelegate(ポップアップ・メニューバー)

現在のアクセス:12988


*1 第二引数のビューワはメニューの公開だけだったら、適当でいいっぽい??このビューのselectionProviderを引数に渡すみたいなんだけど。。
*2 また、ビューのメニューバーに登録するだけだったら、このメソッドはいらない
*3 もしくはgetSite().registerContextMenu?("hogeID",menuMgr, viewer);とやってある場合は、hogeIDがキー値。
*4 "additions"という文字列

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS