分享

RCP View右键弹出菜单的使用

 LibraryPKU 2013-09-11

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

 

不管是哪种方式实现,都必须先在Viewer中添加右键菜单(MenuManager),一般在Viewer的createPartControl(Composite parent)中,加入如下代码:

Java代码  收藏代码
  1. public void createPartControl(Composite parent) {  
  2.     viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL  
  3.             | SWT.V_SCROLL);  
  4.     viewer.setContentProvider(new ViewContentProvider());  
  5.     viewer.setLabelProvider(new ViewLabelProvider());  
  6.     viewer.setInput(getViewSite());  
  7.     createContextMenu();  
  8.       }  
  9.   
  10. private void createContextMenu() {  
  11.     MenuManager menuManager = new MenuManager();  
  12.     menuManager.setRemoveAllWhenShown(true);  
  13.     menuManager.addMenuListener(new IMenuListener() {  
  14.         public void menuAboutToShow(IMenuManager manager) {  
  15.             fillContextMenu(manager);  
  16.         }  
  17.     });  
  18.     Menu menu = menuManager.createContextMenu(viewer.getControl());  
  19.     viewer.getControl().setMenu(menu);  
  20.     getSite().setSelectionProvider(viewer);  
  21.     getSite().registerContextMenu(menuManager, viewer);  
  22. }  

 使用编码的方式添加菜单项就要使用fillContextMenu()方法了。

Java代码  收藏代码
  1. protected void fillContextMenu(IMenuManager menu) {  
  2.     menu.add(ActionFactory.QUIT.create(getSite().getWorkbenchWindow()));  
  3.     menu.add(new Separator());  
  4.     menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));  
  5.     menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS  
  6.                     + "-end"));  
  7.     menu.add(ActionFactory.ABOUT.create(getSite().getWorkbenchWindow()));  
  8.   
  9. }  

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

 

 

通过org.eclipse.ui.popupMenus方式添加菜单项,相对比较灵活一些:

Xml代码  收藏代码
  1. <extension  
  2.          point="org.eclipse.ui.popupMenus">  
  3.       <viewerContribution  
  4.             id="org.salever.rcp.viewaction.demo.viewerContribution1"  
  5.             targetID="org.salever.rcp.viewaction.demo.view">  
  6.          <menu  
  7.                id="org.salever.rcp.viewaction.demo.menu1"  
  8.                label="New Submenu"  
  9.                path="additions">  
  10.             <separator  
  11.                   name="group1">  
  12.             </separator>  
  13.          </menu>  
  14.          <action  
  15.                class="org.salever.rcp.viewaction.demo.popup.actions.NewAction"  
  16.                id="org.salever.rcp.viewaction.demo.newAction"  
  17.                label="New Action"  
  18.                menubarPath="org.salever.rcp.viewaction.demo.menu1/group1">  
  19.          </action>  
  20.       </viewerContribution>  
  21.    </extension>  

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

 

记住,如果仅仅扩展org.eclipse.ui.popupMenus是看不见菜单的,必须在Viewer中添加并注册ContextMenu。

 

有一篇blog讲得比较详细,引用一下:(来自IBM DeveloperWorks)

http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-menuext/index.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多