我有一个带有菜单扩展名的eclipse rcp应用程序。 有一个菜单项“文件”
现在我想从其中一个视图中添加一个新的菜单项(我知道这是一个错误的设计,只是想测试它)
在我的类的createPartControl方法中扩展了ViewPar,我有:
Menu menuBar = parent.getShell().getMenuBar(); //I get the Menu that contains File
MenuItem editMenuItem = new MenuItem(menuBar, SWT.CASCADE);
editMenuItem.setText("Edit");
Menu editMenu = new Menu(parent.getShell(), SWT.DROP_DOWN);
editMenuItem.setMenu(editMenu);
在调试中我看parent.getShell().getMenuBar()
我明白了:
菜单{文件,编辑}
但是在应用程序窗口中我只看到了File菜单。
答案 0 :(得分:2)
要以编程方式而不是通过扩展点执行此操作,您似乎必须使用IMenuService
并添加贡献工厂:
IMenuService menuService = (IMenuService)PlatformUI.getWorkbench().getService(IMenuService.class);
menuService.addContributionFactory(factory);
factory
是一个派生自AbstractContributionFactory
的类,提供菜单项。
此示例来自http://wiki.eclipse.org/Menu_Contributions/Search_Menu
AbstractContributionFactory searchContribution = new AbstractContributionFactory(
"menu:org.eclipse.ui.main.menu?after=navigate") {
public void createContributionItems(IMenuService menuService,
List additions) {
MenuManager search = new MenuManager("Se&arch",
"org.eclipse.search.menu");
search.add(new GroupMarker("internalDialogGroup"));
search.add(new GroupMarker("dialogGroup"));
search.add(new Separator("fileSearchContextMenuActionsGroup"));
search.add(new Separator("contextMenuActionsGroup"));
search.add(new Separator("occurencesActionsGroup"));
search.add(new Separator("extraSearchGroup"));
additions.add(search);
}
public void releaseContributionItems(IMenuService menuService,
List items) {
// nothing to do here
}
};
menuService.addContributionFactory(searchContribution);