如何删除 Eclipse RCP 中的弹出菜单贡献

Posted

技术标签:

【中文标题】如何删除 Eclipse RCP 中的弹出菜单贡献【英文标题】:How remove pop-up menu contributions in eclipse RCP 【发布时间】:2011-06-12 11:33:07 【问题描述】:

我在一个 RCP 应用程序中工作,并且我知道哪个数据模型是 IResources 的实例。当弹出菜单可见时,我发现我想删除的其他插件贡献的命令。

代码示例:

1 菜单管理器菜单管理器 = 新菜单管理器(); 2 mm.setRemoveAllWhenShown(true); 3 菜单菜单 = menuManager.createContextMenu(this.treeViewer.getControl()); 4 this.treeViewer.getControl().setMenu(menu); 5 getSite().registerContextMenu(menuManager, this.treeViewer);

如果我注释第 5 行上下文菜单不出现。

是否可以使用 plugin.xml 中的 menu-contribution 并删除其他插件的贡献?

注意:我的弹出菜单是声明性的,它位于 plugin.xml 中。

提前致谢

【问题讨论】:

【参考方案1】:

一种可能的方法是执行所谓的“Equinox 变压器挂钩”,请参阅http://wiki.eclipse.org/Equinox_Transforms

您可以通过一些示例检查捆绑包(有关更多信息,请参见 wiki 页面),我在 XSLT 转换器方面取得了很好的经验,可以在某些 plugin.xml 文件向平台贡献扩展之前对其进行操作(唯一的挑战是找出哪个包造成了烦人的上下文菜单条目,但您可以使用 PluginSpy 来确定“邪恶者”:-P。

HTH 汤姆

【讨论】:

看起来有两种方法可以禁用其他插件贡献。Activities api 和这个。我要测试一下。谢谢汤姆斯【参考方案2】:

您还可以将活动用于通过 plugin.xml 贡献的任何内容。对于 objectContributions,您将使用“contributing.plugin.id/action.id”形式。下面是一个适用于向导的示例,但同样的模式也可以应用于特定的操作:

<extension point="org.eclipse.ui.activities">
   <category id="z.ex.commands.category"
         name="ReadMe Cat"/>
   <activity id="z.ex.commands.activity"
         name="ReadMe Act"/>
   <activityPatternBinding activityId="z.ex.commands.activity"
         isEqualityPattern="true"
         pattern="org.eclipse.ui.examples.readmetool/org.eclipse.ui.examples.readmetool.wizards.new.file"/>
   <categoryActivityBinding activityId="z.ex.commands.activity"
         categoryId="z.ex.commands.category">
</extension>

Plug-in Registry 视图可用于查找操作的 ID,但您必须进行一些搜索。

【讨论】:

【参考方案3】:

弹出菜单对象提供了扩展元素的可见性和启用。如果您想隐藏特定类的对象贡献,您可以按如下方式设置可见性对象状态。

<visibility>
    <not>
      <objectClass
          name="classname">
      </objectClass>
    </not>
</visibility>

【讨论】:

以上是关于如何删除 Eclipse RCP 中的弹出菜单贡献的主要内容,如果未能解决你的问题,请参考以下文章

MFC 工具栏中的弹出菜单

如何删除 Sublime Linter 中的弹出警告?

如何从自定义弹出菜单扩展中的选择事件中获取所选对象值?

自定义 ListView 中的弹出菜单

如何在 Java 中创建带有子菜单的弹出菜单

如何更改没有 ID 的菜单的弹出文本