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

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

I would like to be able to completely remove menu items upon startup of my eclipse plugin application. What I want to do is be able to add these menu items later depending on business logic based off of the user's actions. Is there a way to do this? I've looked at using contributions, but I feel like it's not going to be exactly what I want.

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

If it can do what I need it to do, how do I go about using them? Thanks in advance for any assistance.

推荐答案

可以从MenuManager中获取Menu,然后修改contribution.此代码段显示如何访问菜单管理器并删除命名项.

You can obtain the Menu from the MenuManager and then modify the contributions. This snippet shows how to access the menu manager and remove a named item.

您需要跟踪已删除的项目和项目索引以恢复它们.唯一的麻烦是 indexOf 方法不可见.将此片段添加到与 MenuManager 相同的包中的类型并将其添加到片段是一种解决方法.

You'll need to keep track of the removed items and item indices to restore them. The only trouble is that the indexOf method is not visible. Adding this snippet to a type in the same package as MenuManager and adding it to a fragment is one way round that.

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();
    }
}

相关文章