代码之家  ›  专栏  ›  技术社区  ›  AlbertoPL

从Eclipse插件以编程方式更改菜单项

  •  17
  • AlbertoPL  · 技术社区  · 17 年前

    我希望能够在Eclipse插件应用程序启动时完全删除菜单项。我想做的是稍后根据基于用户操作的业务逻辑添加这些菜单项。有办法吗?我曾经考虑过使用贡献,但我觉得这并不是我想要的。

    如果它 可以 做我需要它做的,我该如何使用它们?提前感谢您的帮助。

    2 回复  |  直到 11 年前
        1
  •  16
  •   Rüdiger Herrmann    11 年前

    您可以从菜单管理器获取菜单,然后修改贡献。此代码段显示如何访问菜单管理器并删除命名项。

    您需要跟踪删除的项目和项目索引以恢复它们。唯一的问题是indexof方法不可见。将此代码段添加到与menumanager位于同一个包中的类型中,并将其添加到片段中,这是实现此目的的一种方法。

    IWorkbenchWindow window = Workbench.getInstance().getActiveWorkbenchWindow()
    
    if(window instanceof WorkbenchWindow) {
        MenuManager menuManager = ((WorkbenchWindow)window).getMenuManager();
    
        //TODO you may need to remove items from the coolbar as well
        ICoolBarManager coolBarManager = null;
    
        if(((WorkbenchWindow) window).getCoolBarVisible()) {
            coolBarManager = ((WorkbenchWindow)window).getCoolBarManager2();
        }
    
        Menu menu = menuManager.getMenu();
    
        //you'll need to find the id for the item
        String itemId = "menuId";
        IContributionItem item = menuManager.find(itemId);
    
        // remember position, TODO this is protected
        int controlIdx = menu.indexOf(mySaveAction.getId());
    
        if (item != null) {
            // clean old one
            menuManager.remove(item);
    
            // refresh menu gui
            menuManager.update();
        }
    }
    
        2
  •  2
  •   Tonny Madsen    14 年前

    有许多方法可以控制RCP应用程序中菜单或工具栏项的可见性。

    如果您可以控制提供相关项的插件,那么最简单的方法通常是使用 visibleWhen 与关联的表达式 menus 延伸点。如果要检查某些内部状态,则可以使用 test 表达式的元素和 propertyTester .

    另一种选择是使用活动。这些可以控制应用程序的许多其他内容,因为您可能需要重新实现一些内置对话框。查看此日志 "Using activities for user management" 了解一些细节。