RCP View右键弹出菜单的使用

在RCP里,Viewer可以拥有自己的右键弹出菜单,Eclipse提供了2种方式控制弹出菜单,一种是编码实现,另一种是通过扩展点org.eclipse.ui.popupMenus实现。

 

不管是哪种方式实现,都必须先在Viewer中添加右键菜单(MenuManager),一般在Viewer的createPartControl(Composite 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()));  
  
}  

 

这里添加了2个Eclipse自带的Exit和About菜单项。

 

通过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>  

 

这里org.salever.rcp.viewaction.demo.popup.actions.NewAction必须实现IViewActionDelegate。

你可能感兴趣的:(view)