【问题标题】:Adding new menu item to a menu bar defined in plugin.xml programmatically in RCP application在 RCP 应用程序中以编程方式将新菜单项添加到 plugin.xml 中定义的菜单栏
【发布时间】:2014-02-08 10:39:11
【问题描述】:

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

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

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

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() 我明白了:

菜单{文件,编辑}

但在应用程序窗口中我只看到文件菜单。

【问题讨论】:

  • 您的 RCP 如何创建主菜单?您使用的是ActionBarAdvisor 吗?主菜单通常由MenuManager 管理,不允许您以这种方式添加内容。
  • 是的,我有 ApplicationActionBarAdvisor。那我有什么选择?
  • 您通常会使用org.eclipse.ui.menus 扩展点
  • 是的,这是我的问题,如何将另一个菜单添加到以编程方式添加为扩展点的菜单栏

标签: eclipse eclipse-rcp


【解决方案1】:

要以编程方式而不是通过扩展点执行此操作,您似乎必须使用 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多