0

プラグインに、メニュー項目「X」のポップアップメニューがあり、このメニュー項目にサブメニューを追加したい

サブメニューのメニュー項目の数とラベル、およびそれらのアクションが変更されます。

plugin.xmlからこれを行うことはできないと思うので、これをプログラムで行うにはどうすればよいですか?

4

1 に答える 1

2

plugin.xmlのorg.eclipse.ui.menusの下に、「ルート」メニューのID、つまりサブメニューをアタッチするメニュー(この場合はmenu:myDynamicMenuRoot )を参照するmenuContributionを追加します。 )::

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

allPopups = "true"は、アプリケーションの任意の場所に追加する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);
    }
}
于 2012-07-10T14:20:56.650 に答える