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

6
我正在使用一个RCP应用程序,我的视图数据模型是IResources的实例。当弹出菜单可见时,我发现其他插件贡献的命令,我想删除它们。
代码示例:
MenuManager menuManager = new MenuManager(); mm.setRemoveAllWhenShown(true); Menu menu = menuManager.createContextMenu(this.treeViewer.getControl()); this.treeViewer.getControl().setMenu(menu); getSite().registerContextMenu(menuManager, this.treeViewer);
如果我注释掉第5行,上下文菜单就不会出现。
是否可以使用plugin.xml中的菜单贡献并删除其他插件的贡献?
注意:我的弹出菜单是声明性的,并且在plugin.xml中。
谢谢您的帮助。
3个回答

3
一种可能的方法是执行所谓的“Equinox转换器挂钩”,请参见http://wiki.eclipse.org/Equinox_Transforms。您可以检出某些示例的捆绑包(有关更多信息,请参见wiki页面),我使用XSLT转换器取得了良好的经验,以在它们将其扩展功能贡献给平台之前操纵某些plugin.xml文件(唯一的挑战是找出哪个bundle是贡献讨厌的上下文菜单项,但您可以使用PluginSpy来确定“罪犯”:-P。希望对您有所帮助Tom

看起来有两种方法可以禁用其他插件的贡献。活动API和这个。我将进行测试。谢谢Toms。 - yeraycaballero

1

您还可以使用活动来处理通过 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>

插件注册表视图可用于查找操作的ID,尽管您需要进行一些搜索。


0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接