在RCP应用程序中以编程方式将新菜单项添加到plugin.xml中定义的菜单栏

时间:2014-02-08 10:39:11

标签: eclipse eclipse-rcp

我有一个带有菜单扩展名的eclipse rcp应用程序。 有一个菜单项“文件”

现在我想从其中一个视图中添加一个新的菜单项(我知道这是一个错误的设计,只是想测试它)

在我的类的createPartControl方法中扩展了ViewPar,我有:

Menu menuBar =  parent.getShell().getMenuBar(); //I get the Menu that contains File
MenuItem editMenuItem = new MenuItem(menuBar, SWT.CASCADE);

editMenuItem.setText("Edit");
Menu editMenu = new Menu(parent.getShell(), SWT.DROP_DOWN);
editMenuItem.setMenu(editMenu);

在调试中我看parent.getShell().getMenuBar() 我明白了:

  

菜单{文件,编辑}

但是在应用程序窗口中我只看到了File菜单。

1 个答案:

答案 0 :(得分:2)

要以编程方式而不是通过扩展点执行此操作,您似乎必须使用IMenuService并添加贡献工厂:

IMenuService menuService = (IMenuService)PlatformUI.getWorkbench().getService(IMenuService.class);

menuService.addContributionFactory(factory);

factory是一个派生自AbstractContributionFactory的类,提供菜单项。

此示例来自http://wiki.eclipse.org/Menu_Contributions/Search_Menu

AbstractContributionFactory searchContribution = new AbstractContributionFactory(
           "menu:org.eclipse.ui.main.menu?after=navigate") {
       public void createContributionItems(IMenuService menuService,
               List additions) {
           MenuManager search = new MenuManager("Se&arch",
                   "org.eclipse.search.menu");

           search.add(new GroupMarker("internalDialogGroup"));
           search.add(new GroupMarker("dialogGroup"));
           search.add(new Separator("fileSearchContextMenuActionsGroup"));
           search.add(new Separator("contextMenuActionsGroup"));
           search.add(new Separator("occurencesActionsGroup"));
           search.add(new Separator("extraSearchGroup"));

           additions.add(search);
       }

       public void releaseContributionItems(IMenuService menuService,
               List items) {
           // nothing to do here
       }
   };

menuService.addContributionFactory(searchContribution);