在我的插件中,我有一个带有菜单项“X”的弹出菜单,我想向该菜单项添加子菜单
并且子菜单中菜单项的数量和标签及其操作将发生变化。
我想我不能从 plugin.xml 中执行此操作,那么如何以编程方式执行此操作?
在我的插件中,我有一个带有菜单项“X”的弹出菜单,我想向该菜单项添加子菜单
并且子菜单中菜单项的数量和标签及其操作将发生变化。
我想我不能从 plugin.xml 中执行此操作,那么如何以编程方式执行此操作?
在您的plugin.xml中的org.eclipse.ui.menus下,添加一个menuContribution,它引用您的“根”菜单的 id,即您希望附加子菜单的菜单(在本例中为menu:myDynamicMenuRoot ):
<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);
}
}