RCP View右クリックポップアップメニューの使用

3186 ワード

RCPでは、Viewerは独自の右クリックポップアップメニューを持つことができ、Eclipseは2つの方式でポップアップメニューを制御することができ、1つは符号化実現であり、もう1つは拡張点orgを通じてである.eclipse.ui.popupMenus実装.
 
いずれにしても、まずViewerに右クリックメニュー(MenuManager)を追加する必要があります.一般的にViewerのcreatePartControl(Component parent)には、次のコードが追加されます.
 
public void createPartControl(Composite parent) {  
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL  
            | SWT.V_SCROLL);  
    viewer.setContentProvider(new ViewContentProvider());  
    viewer.setLabelProvider(new ViewLabelProvider());  
    viewer.setInput(getViewSite());  
    createContextMenu();  
      }  
  
private void createContextMenu() {  
    MenuManager menuManager = new MenuManager();  
    menuManager.setRemoveAllWhenShown(true);  
    menuManager.addMenuListener(new IMenuListener() {  
        public void menuAboutToShow(IMenuManager manager) {  
            fillContextMenu(manager);  
        }  
    });  
    Menu menu = menuManager.createContextMenu(viewer.getControl());  
    viewer.getControl().setMenu(menu);  
    getSite().setSelectionProvider(viewer);  
    getSite().registerContextMenu(menuManager, viewer);  
}  

 
エンコーディングでメニュー項目を追加するにはfillContextMenu()メソッドを使用します.
 
protected void fillContextMenu(IMenuManager menu) {  
    menu.add(ActionFactory.QUIT.create(getSite().getWorkbenchWindow()));  
    menu.add(new Separator());  
    menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));  
    menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS  
                    + "-end"));  
    menu.add(ActionFactory.ABOUT.create(getSite().getWorkbenchWindow()));  
  
}  

 
ここにはEclipseに付属するExitとAboutメニュー項目が2つ追加されています.
 
orgを通過する.eclipse.ui.PopupMenus方式でメニュー項目を追加し、比較的柔軟である:
 
<extension  
         point="org.eclipse.ui.popupMenus">  
      <viewerContribution  
            id="org.salever.rcp.viewaction.demo.viewerContribution1"  
            targetID="org.salever.rcp.viewaction.demo.view">  
         <menu  
               id="org.salever.rcp.viewaction.demo.menu1"  
               label="New Submenu"  
               path="additions">  
            <separator  
                  name="group1">  
            </separator>  
         </menu>  
         <action  
               class="org.salever.rcp.viewaction.demo.popup.actions.NewAction"  
               id="org.salever.rcp.viewaction.demo.newAction"  
               label="New Action"  
               menubarPath="org.salever.rcp.viewaction.demo.menu1/group1">  
         </action>  
      </viewerContribution>  
   </extension>  

 
ここでsalever.rcp.viewaction.demo.popup.actions.NewActionはIViewActionDelegateを実現しなければならない.