2010年8月6日金曜日

GEF を使った RCP アプリケーション:(9)ポップアップメニュー

図形やツリー項目を選択して、マウスを右クリックしたときにポップアップメニューが表示されるようにしたいと思います。ContextMenuProvider を拡張して、メニューを生成するクラスを作成します。
/**
* グラフィカルエディターのポップアップメニューを提供するクラス.
*
*/
public class AppContextMenuProvider extends ContextMenuProvider {
   private ActionRegistry actionRegistry;

   public AppContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {
       super(viewer);
       setActionRegistry(registry);
   }
  
   @Override
   public void buildContextMenu(IMenuManager menu) {
       IAction action;
       GEFActionConstants.addStandardActionGroups(menu);
       //GEFプラットフォームが処理するアクションの生成
       action = getActionRegistry().getAction(ActionFactory.UNDO.getId());
       action.setText("元に戻す(&U)");
       menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
       action = getActionRegistry().getAction(ActionFactory.REDO.getId());
       action.setText("やり直し(&R)");
       menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);

       action = getActionRegistry().getAction(ActionFactory.DELETE.getId());
       action.setText("削除(&D)");
       menu.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
   }

   private ActionRegistry getActionRegistry() {
       return actionRegistry;
   }

   private void setActionRegistry(ActionRegistry registry) {
       actionRegistry = registry;
   }
}

エディタを編集して、エディタとアウトラインページにこのメニュープロバイダクラスを設定します。OutlinePage の init() メソッド、SampleGraphicalEditor の configureGraphicalViewer() メソッドを次のように修正します。
public class SampleGraphicalEditor extends GraphicalEditor {
   ...
   protected class OutlinePage extends ContentOutlinePage {
       ...
       public void init(IPageSite pageSite) {
           ...
           // ポップアップメニューの設定
           ContextMenuProvider provider = new AppContextMenuProvider(
                   getViewer(), getActionRegistry());
           getViewer().setContextMenu(provider);
       }
       ...
   }
   ...
   @Override
   protected void configureGraphicalViewer() {
       ...
       // ポップアップメニューの設定
       ContextMenuProvider provider = new AppContextMenuProvider(viewer,
               getActionRegistry());
       viewer.setContextMenu(provider);
   }
   ...
}


アプリケーションを実行して、アウトラインビューの項目を選択して、マウスを右クリックします。

0 件のコメント: