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。

 

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

 

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

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

你可能感兴趣的:(eclipse,UI,OS,IBM,OpenSource)