【问题标题】:Overwriting views in the ecplise ui view extension point覆盖eclipse ui视图扩展点中的视图
【发布时间】:2012-05-18 18:44:23
【问题描述】:

我正在开发一个包含多个插件的 Eclipse RCP 应用程序。其中一个插件(“common ui”插件)提供了一个由其他几个插件使用的视图。视图在通用 ui 插件的 plugin.xml 中定义,以及它的工具栏和上下文菜单贡献(在菜单扩展点中)。

有一个插件,我们称之为“特殊业务插件”,它需要对通用 ui 插件提供的视图进行一些补充。因此,我从常见的 ui viewpart 类中扩展了 viewpart 类(以添加额外的列和自己的标签和内容提供程序)。

扩展视图部分需要与公共视图部分相同的菜单贡献。当然,我不想写两次,我只想使用通用插件的plugin.xml中定义的菜单贡献。但是,它们绑定到公共视图部分的视图 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.xml

<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);

【问题讨论】:

    标签: java eclipse eclipse-plugin eclipse-rcp


    【解决方案1】:

    在这种情况下,您不能用另一个定义覆盖一个定义。有几个选项。

    1. 在某些情况下,您可以使用Product Customization 之类的内容来删除通用视图定义。这对你正在做的事情来说是相当沉重的。
    2. 在单独的小插件中提供通用视图定义。然后不要在包含您的专业视图的 RCP 产品中包含那个小插件。

    【讨论】:

    • 谢谢,这就是担心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多