Eclipse:如何获取 plugin.xml 中定义的特定菜单 ID 的 MenuManager

Eclipse: How to get the MenuManager for a specific menu id defined in plugin.xml

我有一个独立的 eclipse RCP 应用程序。主要交互通过主工具栏进行。这是来自 plugin.xml 的相关片段:

<extension
     point="org.eclipse.ui.menus">
  <menuContribution
        allPopups="false"
        locationURI="toolbar:org.eclipse.ui.main.toolbar">
     <toolbar
           id="my.toolbar.id">
        ...
        <command
              commandId="my.command.id"
              id="my.connect.id"
              label="Connect"
              style="pulldown">
        </command>
        ...
     </toolbar>
  </menuContribution>
  <menuContribution
        allPopups="false"
        locationURI="menu:my.connect.id">
  </menuContribution>

我想在即将显示时填充下拉菜单my.connect.id,每次打开时可以容纳不同的项目。可以使用此 ID 的 MenuManager 并添加 IMenuListener.

来完成

如何从plugin.xml获取给定id的MenuManager实例?

非常感谢。

PS: 还是e3.

我花了几天时间研究才弄明白这个问题。这是我自己的问题的答案:

使用 class 处理所有贡献,为菜单提供动态贡献。

plugin.xml:

  <menuContribution
        allPopups="false"
        locationURI="menu:my.connect.id">
     <dynamic
           class="my.ConnectMenu"
           id="my.connect.menu">
     </dynamic>
  </menuContribution>

ConnectMenu.java:

public class ConnectMenu extends ContributionItem {

    private IMenuListener menuListener = new IMenuListener() {
        public void menuAboutToShow(IMenuManager manager) {
            fillMenu(manager);
        }
    };

    public ConnectMenu() {
        this("my.connect.menu");
    }

    public ConnectMenu(String id) {
        super(id);
    }

    @Override
    public void fill(Menu menu, int index) {
        super.fill(menu, index);

        if (getParent() instanceof MenuManager) {
            ((MenuManager) getParent()).setRemoveAllWhenShown(true);
            ((MenuManager) getParent()).addMenuListener(menuListener);
        }
    }

    private void fillMenu(IMenuManager mgr) {
        mgr.add(createContributionItem());      

        mgr.update();
    }

    private IContributionItem createContributionItem() {
        // ...
    }
}

希望这对您有所帮助。

对我很有帮助:https://phisymmetry.wordpress.com/2010/01/03/eclipse-tips-how-to-create-menu-items-dynamically/