18

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

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

4

2 回答 2

17

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

您需要跟踪已删除的项目和项目索引以恢复它们。唯一的麻烦是 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();
    }
}
于 2009-07-29T19:03:43.230 回答
2

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

如果您可以控制提供相关项目的插件,那么最简单的方法通常是使用与扩展点visibleWhen关联的表达式。menus如果你有一些你想要检查的内部状态,那么你可以test将表达式的元素与 a 一起使用propertyTester

另一种方法是使用活动。这些可以控制您的应用程序的许多其他事情,认为您可能需要重新实现一些内置对话框。有关详细信息,请参阅此博客条目“使用活动进行用户管理”

于 2012-03-03T10:35:44.950 回答