在Eclipse中以编程方式向下拉按钮添加选项

4
在Eclipse中,我已经为主按钮工具栏中的按钮定义了命令。我有一个命令/按钮被设置为下拉按钮,我想通过编程方式向其添加选项。就像在Eclipse中点击播放按钮上的小下拉按钮,可以看到不同的运行场景一样。我想能够向我的下拉菜单添加这样的选项。我无法通过插件编辑器来完成它,因为我需要动态生成菜单选项。
假设我在plugin.xml文件中定义了以下下拉按钮。如何通过编程方式向下拉列表添加选项?
 <menuContribution
        allPopups="false"
        locationURI="toolbar:org.eclipse.ui.main.toolbar">
     <toolbar
           id="com.company.gui.base.toolBarMain">
        <command
              commandId="com.company.gui.base.command1"
              icon="icons/magnifier.png"
              id="com.company.gui.base.toolBarMain.monitor"
              label="Im a pulldown menu"
              style="pulldown">
        </command>
     </toolbar>
  </menuContribution>
1个回答

7
请查看以下代码。
private void addContextMenu(SampleContributionFactory fac) {
     final IMenuService menuService = (IMenuService) PlatformUI.getWorkbench().getService (IMenuService.class);
     menuService.addContributionFactory(fac);
}

class SampleContributionFactory extends AbstractContributionFactory{

    SampleContributionFactory(final String menuID) {
        super("menu:" + menuID, null);
    }

    @Override
    public void createContributionItems(IServiceLocator serviceLocator,
            IContributionRoot additions) {      
        // add Command Contribution item
        additions.addContributionItem(<YOUR CONTRIBUTION ITEM>, null);
    // add one more Command Contribution item
    ....
    } 
}

现在按照以下方法创建一个SampleContributionFactory的对象。
  SampleContributionFactory fac = new SampleContributionFactory ("com.company.gui.base.toolBarMain.monitor");

并调用该方法
addContextMenu(fac);

TODO:根据您的要求在SampleContributionFactory中添加命令贡献项。


在Eclipse文档中有没有关于这方面的教程?他们似乎对可以通过声明完成的所有内容都进行了很好的文档记录,但是当需要动态/编程方法来处理框架时,我总是找不到正确的信息。您的解决方案非常有效,但是在API文档中挖掘并尝试了许多不同的方法后,我仍然无法解决问题,直到您出现为止。 - MechaMarinara
1
可能会对您有所帮助的一些链接是:http://wiki.eclipse.org/Menu_Contributions/IFile_objectContribution 和 http://www.medihack.org/2009/10/05/dynamic-menus-and-toolbar-contributions/。但是您是正确的,有些东西很难找到文档。我们唯一的方法就是挖掘Eclipse源代码本身。 :-) - Syam
https://wiki.eclipse.org/Menu_Contributions/Problems_View_Example 可能也会很有帮助。 - Artsiom Chapialiou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接