Eclipse RCP替换Customize PerspectiveSwitcher及移除相关菜单项方法咨询
Eclipse RCP 替换PerspectiveSwitcher及移除右键菜单实现方案
以下三种方案可根据需求灵活选择:
方案1:仅隐藏指定右键菜单项
通过Eclipse Activity机制禁用对应命令即可,无需修改控件源码:
- 确认目标菜单项对应的命令ID:
- 「Customize...」对应ID:
org.eclipse.ui.window.customizePerspective - 「Save as...」对应ID:
org.eclipse.ui.window.savePerspectiveAs
- 「Customize...」对应ID:
- 在
plugin.xml中添加org.eclipse.ui.activities扩展点,绑定禁用规则:
<extension point="org.eclipse.ui.activities"> <!-- 定义禁用菜单项的活动 --> <activity id="your.app.bundle.id.hideInvalidMenu" name="Hide Unneeded Perspective Menu Items"> <enabledWhen> <with variable="activeContexts"> <iterate operator="or"> <equals value="org.eclipse.ui.contexts.window"/> </iterate> </with> </enabledWhen> </activity> <!-- 绑定要禁用的两个菜单项命令 --> <activityPatternBinding activityId="your.app.bundle.id.hideInvalidMenu" pattern="org.eclipse.ui/org.eclipse.ui.window.customizePerspective"> </activityPatternBinding> <activityPatternBinding activityId="your.app.bundle.id.hideInvalidMenu" pattern="org.eclipse.ui/org.eclipse.ui.window.savePerspectiveAs"> </activityPatternBinding> </extension>
注意将
your.app.bundle.id替换为你自己项目的插件ID。如果是纯e4 RCP,可直接在Application.e4xmi中找到对应命令的贡献项,将其删除即可。
方案2:直接移除整个上下文菜单
如果不需要PerspectiveSwitcher的任何右键功能,可通过重写菜单创建方法实现:
- 新建自定义类继承系统默认的PerspectiveSwitcher:
- 3.x兼容模式RCP继承路径:
org.eclipse.ui.internal.perspectives.PerspectiveSwitcher - 纯e4 RCP继承路径:
org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveSwitcher
- 3.x兼容模式RCP继承路径:
- 重写
createContextMenu方法,留空即可禁用所有右键菜单:
@Override protected void createContextMenu() { // 无实现逻辑,不会生成任何上下文菜单 }
- 在
ApplicationWorkbenchWindowAdvisor的preWindowOpen方法中注册自定义控件:
@Override public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setShowPerspectiveBar(true); // 替换为自定义的PerspectiveSwitcher configurer.setPerspectiveSwitcherFactory(window -> new YourCustomPerspectiveSwitcher(window)); }
方案3:全量替换默认PerspectiveSwitcher
如果你需要完全自定义PerspectiveSwitcher的样式、交互逻辑,可直接实现自定义控件:
- 新建类继承
Composite或对应父类,自主实现视角切换、样式渲染等逻辑 - 按照方案2的注册方式,通过
IPerspectiveSwitcherFactory将自定义控件注册到窗口配置器中 - 自定义实现可完全自主控制是否添加上下文菜单、菜单包含哪些选项,灵活度最高。
内容的提问来源于stack exchange,提问作者AnnaIngolstadt
相关产品推荐
相关产品推荐

