在我的插件中,我有一个菜单项“X”的弹出式菜单,我想在此菜单项中添加子菜单
子菜单中菜单项的编号和标签及其操作将会改变。
我想我不能从plugin.xml执行此操作,那么如何以编程方式执行此操作?
答案 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);
}
}