プラグインに、メニュー項目「X」のポップアップメニューがあり、このメニュー項目にサブメニューを追加したい
サブメニューのメニュー項目の数とラベル、およびそれらのアクションが変更されます。
plugin.xmlからこれを行うことはできないと思うので、これをプログラムで行うにはどうすればよいですか?
プラグインに、メニュー項目「X」のポップアップメニューがあり、このメニュー項目にサブメニューを追加したい
サブメニューのメニュー項目の数とラベル、およびそれらのアクションが変更されます。
plugin.xmlからこれを行うことはできないと思うので、これをプログラムで行うにはどうすればよいですか?
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);
}
}