如何以编程方式为弹出菜单添加子菜单?

时间:2012-07-10 09:43:22

标签: eclipse eclipse-plugin eclipse-rcp

在我的插件中,我有一个菜单项“X”的弹出式菜单,我想在此菜单项中添加子菜单

子菜单中菜单项的编号和标签及其操作将会改变。

我想我不能从plugin.xml执行此操作,那么如何以编程方式执行此操作?

1 个答案:

答案 0 :(得分:2)

plugin.xml 中,在 org.eclipse.ui.menus 下,添加一个 menuContribution ,引用您的&的ID #34;根"菜单,即您想要附加子菜单的菜单(在这种情况下,菜单:myDynamicMenuRoot ):

<menuContribution
    allPopups="true"
    class="com.myCode.menus.MyDynamicMenuContributions"
    locationURI="menu:myDynamicMenuRoot">
</menuContribution>

请注意 allPopups =&#34; true&#34; 可确保您的子菜单将添加到您在应用中的任何位置添加的ID myDynamicMenuRoot 的任何菜单中。

最后,创建一个扩展ExtensionContributionFactory的类,其作用是创建动态子菜单项。在这里,我根据我在 plugin.xml 中定义的命令添加项目:

public class MyDynamicMenuContributions extends ExtensionContributionFactory {
    private static final ImageDescriptor GREEN_STAR = Plugin.getImageDescriptor("icons/green_star.png");

    @Override
    public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) {
        // build a couple of command-based contribution parameters
        CommandContributionItemParameter pAA = new CommandContributionItemParameter(
            serviceLocator,
            "Submenu_CommandAA",
            "my.package.command.myCommandAA",
            SWT.PUSH);
        pAA.icon = GREEN_STAR;
        pAA.label = "Command AA";

        CommandContributionItemParameter pBB = new CommandContributionItemParameter(
            serviceLocator,
            "Submenu_CommandBB",
            "my.package.command.myCommandBB",
            SWT.PUSH);
        pBB.icon = GREEN_STAR;
        pBB.label = "Command BB";

        // create actual contribution items and add them to the given additions reference
        CommandContributionItem itemAA = new CommandContributionItem(pAA);
        itemAA.setVisible(true);
        additions.addContributionItem(itemAA, null);

        CommandContributionItem itemBB = new CommandContributionItem(pBB);
        itemBB.setVisible(true);
        additions.addContributionItem(itemBB, null);
    }
}