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

时间:2011-01-20 13:43:58

标签: eclipse eclipse-plugin eclipse-rcp

我正在使用RCP应用程序,我有一个视图,哪个数据模型是IResources的实例。当弹出菜单可见时,我会找到我想删除的其他插件所贡献的命令。

代码示例:

1 MenuManager menuManager = new MenuManager();
2 mm.setRemoveAllWhenShown(true);
3 Menu menu = menuManager.createContextMenu(this.treeViewer.getControl());  
4 this.treeViewer.getControl().setMenu(menu); 

5 getSite().registerContextMenu(menuManager, this.treeViewer);

如果我评论第5行上下文菜单没有出现。

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

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

提前致谢

3 个答案:

答案 0 :(得分:3)

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

您可以通过一些示例来查看捆绑包(有关更多信息,请参阅wiki页面),我使用XSLT转换器做了很好的经验,在他们向平台提供扩展之前操作某些plugin.xml文件(唯一的挑战是找出哪个bundle正在贡献烦人的上下文菜单条目,但是你可以使用PluginSpy来确定“恶人”:-P。

HTH汤姆

答案 1 :(得分:1)

您还可以将活动用于通过plugin.xml提供的任何内容。对于objectContributions,您将使用“contributions.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,但您必须进行一些搜索。

答案 2 :(得分:0)

弹出菜单objectcontibution提供了一个可扩展元素visibilty和enablement。如果要隐藏特定类的对象连接,可以按如下方式设置visiblity对象状态。

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