【问题标题】:Eclipse: How to get the MenuManager for a specific menu id defined in plugin.xmlEclipse:如何为 plugin.xml 中定义的特定菜单 ID 获取 MenuManager
【发布时间】:2015-04-01 12:51:51
【问题描述】:

我有一个独立的 Eclipse RCP 应用程序。主要交互通过主工具栏发生。这是 plugin.xml 中的相关 sn-p:

<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。

【问题讨论】:

    标签: eclipse eclipse-rcp rcp


    【解决方案1】:

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

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

    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/

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 2023-03-22
      • 2019-10-27
      • 2018-09-26
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多