1

いくつかのプラグインで構成される Eclipse RCP アプリケーションを開発しています。これらのプラグインの 1 つ (「共通 ui」プラグイン) は、他のいくつかのプラグインで使用されるビューを提供します。ビューは、共通 ui プラグインの plugin.xml で定義され、そのツールバーとコンテキスト メニューのコントリビューション (menus 拡張ポイント内) と同様に定義されます。

プラグインが 1 つありますが、それを「特別なビジネス プラグイン」と呼びましょう。これは、共通の ui プラグインによって提供されるビューにいくつか追加する必要があります。そのため、共通の UI ビューパーツ クラスからビューパーツ クラスを拡張しました (列を追加し、独自のラベルとコンテンツ プロバイダーを追加するため)。

拡張ビューパーツには、共通ビューパーツと同じメニュー コントリビューションが必要です。もちろん、それらを 2 回書きたくはありません。共通プラグインの plugin.xml で定義されているメニューの投稿を使用したいだけです。ただし、それらは共通ビューパーツのビュー ID にバインドされています。特別なビュー パーツに同じビュー ID を使用すると、特別なビュー パーツは開かれず、代わりに共通のビュー パーツが開かれます (もちろん、同じ ID を共有しているため)。別の ID を使用すると、メニューの投稿を 2 回書かなければならず、これは避けたいと思います。

では、上書きしたいビューと同じメニュー投稿を使用したい場合、別のプラグインによって定義されたビューを上書きするにはどうすればよいですか?

共通プラグインの 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);
4

1 に答える 1

1

この場合、ある定義を別の定義で上書きすることはできません。いくつかのオプションがあります。

  1. 場合によっては、製品のカスタマイズなどを使用して、共通のビュー定義を削除できます。あなたがしていることはかなり重いです。
  2. 個別の小さなプラグインで共通のビュー定義を提供します。次に、特殊なビューを含む RCP 製品にその小さなプラグインを含めないでください。
于 2012-05-10T12:14:14.323 に答える