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

时间:2015-04-01 12:51:51

标签: eclipse eclipse-rcp rcp

我有一个独立的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,每次打开时都可以容纳不同的项目。可以使用MenuManager为此ID添加IMenuListener

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

非常感谢。

PS:现在还是e3。

1 个答案:

答案 0 :(得分:2)

我花了几天时间研究这个问题。以下是我自己问题的答案:

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

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/