从 Eclipse 插件以编程方式更改菜单项
Posted
技术标签:
【中文标题】从 Eclipse 插件以编程方式更改菜单项【英文标题】:Change Menu Items Programmatically From Eclipse Plugin 【发布时间】:2010-11-15 04:33:33 【问题描述】:我希望能够在我的 eclipse 插件应用程序启动时完全删除菜单项。我想要做的是能够稍后根据基于用户操作的业务逻辑添加这些菜单项。有没有办法做到这一点?我已经考虑过使用贡献,但我觉得这不会是我想要的。
如果它可以做我需要它做的事情,我该如何使用它们?提前感谢您的任何帮助。
【问题讨论】:
【参考方案1】:您可以从 MenuManager 获取菜单,然后修改贡献。这个 sn-p 显示了如何访问菜单管理器并删除命名项。
您需要跟踪已删除的项目和项目索引以恢复它们。唯一的麻烦是 indexOf 方法不可见。将此 sn-p 添加到与 MenuManager 相同的包中的类型并将其添加到片段是一种解决方法。
IWorkbenchWindow window = Workbench.getInstance().getActiveWorkbenchWindow()
if(window instanceof WorkbenchWindow)
MenuManager menuManager = ((WorkbenchWindow)window).getMenuManager();
//TODO you may need to remove items from the coolbar as well
ICoolBarManager coolBarManager = null;
if(((WorkbenchWindow) window).getCoolBarVisible())
coolBarManager = ((WorkbenchWindow)window).getCoolBarManager2();
Menu menu = menuManager.getMenu();
//you'll need to find the id for the item
String itemId = "menuId";
IContributionItem item = menuManager.find(itemId);
// remember position, TODO this is protected
int controlIdx = menu.indexOf(mySaveAction.getId());
if (item != null)
// clean old one
menuManager.remove(item);
// refresh menu gui
menuManager.update();
【讨论】:
我想知道,这对于基于 IDE 的应用程序也可能吗?例如,删除一些 Eclipse 的菜单,如“Project”。 要解析...Workbench...
类型,我必须将org.eclipse.ui.workbench_....jar
添加到我的插件项目的构建路径中。但是Workbench
和WorkbenchWindow
驻留在org.eclipse.ui.internal
那里,因此我收到如下警告:“不鼓励访问:'Workbench' 类型不是 API(对所需库 'C:\Program Files\eclipse 的限制) -rcp\plugins\org.eclipse.ui.workbench_3.119.0.v20200521-1247.jar')"。这应该被忽略还是在较新版本的 Eclipse(我使用 2020-06)中有其他方法?
Workbench.getInstance().getActiveWorkbenchWindow()
可以替换为PlatformUI.getWorkbench().getActiveWorkbenchWindow()
。但是WorkbenchWindow
还在。【参考方案2】:
有多种方法可以控制 RCP 应用程序中菜单或工具栏项的可见性。
如果您可以控制提供相关项目的插件,那么最简单的方法通常是使用与menus
扩展点关联的visibleWhen
表达式。如果您有一些内部状态要检查,那么您可以使用表达式的test
元素和propertyTester
。
另一种方法是使用活动。这些可以控制您的应用程序的许多其他事情,认为您可能需要重新实现一些内置对话框。有关详细信息,请参阅此博客条目 "Using activities for user management"。
【讨论】:
以上是关于从 Eclipse 插件以编程方式更改菜单项的主要内容,如果未能解决你的问题,请参考以下文章