我正在开发一个由几个插件组成的Eclipse RCP应用程序。其中一个插件(“common ui”插件)提供了其他几个插件使用的视图。该视图在公共ui插件的plugin.xml中定义,以及其工具栏和上下文菜单贡献(在菜单扩展点中)。
有一个插件,但是,我们称之为“特殊业务插件”,需要对常见的ui插件提供的视图进行一些补充。因此,我已经从常见的ui viewpart类扩展了viewpart类(以添加其他列和自己的标签和内容提供者)。
扩展的viewpart需要与公共viewpart相同的菜单贡献。当然,我不想写两次,我只想使用common plugin的plugin.xml中定义的菜单贡献。但是,它们绑定到公共viewpart的视图id。如果我对特殊视图部分使用相同的视图ID,则不会打开特殊视图部分,而是公共视图部分(当然,因为它们共享相同的ID)。如果我使用不同的id,我必须写两次菜单贡献,我想避免。
那么,当我想使用与我要覆盖的视图相同的菜单贡献时,如何覆盖另一个插件定义的视图?
常见插件的plugin.xml
<plugin>
<extension point="org.eclipse.ui.views">
<view
allowMultiple="true"
category="org.eclipse.ui"
class="com.mycompany.client.common.ui.view.CommonViewPart"
icon="icons/CommonView.gif"
id="com.mycompany.client.common.ui.view.CommonView"
name="%CommonView"
restorable="false">
</view>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution
locationURI="toolbar:com.mycompany.client.common.ui.view.CommonView">
<command
commandId="com.mycompany.client.common.ui.handler.RefreshCommand"
label="%refresh"
style="push">
</command>
</menuContribution>
</extenstion>
</plugin>
特殊插件的插件文件
<plugin>
<extension point="org.eclipse.ui.views">
<view
allowMultiple="true"
category="org.eclipse.ui"
class="com.mycompany.client.special.view.SpecialViewPart"
icon="icons/CommonView.gif"
id="com.mycompany.client.common.ui.view.CommonView"
name="%CommonView"
restorable="false">
</view>
</extension>
</plugin>
视图由处理程序打开,代码行如下:
普通的:
AbstractViewPart view = (AbstractViewPart).
getActiveWorkbenchPage(event).showView(CommonViewPart.ID, null,
IWorkbenchPage.VIEW_VISIBLE);
特别:
AbstractViewPart view = (AbstractViewPart).
getActiveWorkbenchPage(event).showView(SpecialViewPart.ID, null,
IWorkbenchPage.VIEW_VISIBLE);
答案 0 :(得分:1)
在这种情况下,您无法用另一个定义覆盖一个定义。有几种选择。