2012-05-10 15 views
1

私はいくつかのプラグインからなるEclipse RCPアプリケーションを開発しています。これらのプラグインの1つ( "common ui"プラグイン)は、他のいくつかのプラグインで使用されているビューを提供します。ビューは、共通uiプラグインのplugin.xml、ツールバーとコンテキストメニューの投稿(メニュー拡張ポイント内)で定義されています。ecplise uiビュー拡張ポイントのビューを上書きする

しかし、1つのプラグインがありますが、一般的なUIプラグインが提供するビューにいくつかの追加が必要な「特別なビジネスプラグイン」と呼ばせてください。したがって、私は共通のUI Viewpartクラス(追加の列と独自のラベルとコンテンツプロバイダを追加する)からviewpartクラスを拡張しました。

拡張されたviewpartには、共通のviewpartと同じメニューが必要です。もちろん、私はそれらを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> 
    <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> 

特別なプラグインのplugin.xmlの:

コモン:

特別:

AbstractViewPart view = (AbstractViewPart). 
    getActiveWorkbenchPage(event).showView(SpecialViewPart.ID, null, 
    IWorkbenchPage.VIEW_VISIBLE); 

答えて

1

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

  1. Product Customizationのようなものを使用して、共通ビュー定義を削除することができます。それはあなたがやっていることに対してかなり重量です。
  2. 共通のビュー定義を個別の小さなプラグインに提供します。次に、あなたの専門的な見解を含む小さなプラグインをRCP製品に含めないでください。
+0

ありがとうございます、それは恐れています。 –

関連する問題