2011-07-30 15 views
1

するのではなく、ビューの表示]メニューを取得する方法を私がに追加した私の観点のorg.eclipse.ui.menusのEclipse RCPは:ダイアログ

<command 
     commandId="org.eclipse.ui.views.showView" 
     style="pulldown"> 
</command> 

のように(これは、メインメニューにShow View項目が追加されますが、この項目はメニューではありませんEclipseウィンドウメニュー)。代わりに、私はビューを選択できるダイアログを表示します。代わりにメニューを取得するにはどうすればいいですか?

答えて

1

あなたは以下のようなContributionItemクラスを作成する必要があります。

public class MyShowViewContributionItem extends org.eclipse.ui.internal.ShowViewMenu { 
    public MyShowViewContributionItem() { 
     this("om.myplugin.myShowViewId"); 
    } 
    public MyShowViewContributionItem(String id) { 
     super(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow(), id); 
    } 
} 

を、あなたのplugin.xmlのorg.eclipse.ui.menus延長で:

<menu 
      label="My Show View"> 
     <dynamic 
      class="com.myplugin.MyShowViewContributionItem" 
      id="com.myplugin.myShowViewId"> 
     </dynamic> 
    </menu> 

乾杯、 マックス

+0

これを実行した後で、パースペクティブ拡張で ''を追加してワークスペースデータをクリアしたにもかかわらず、メニューに '<該当するビューがありません>'と表示されます。どのようにこれを修正するための任意のアイデア? –

1

はちょうど私の最近の上で共有します同じことをしようとする試みでの実験、Maxが彼のanswerで示唆したことはうまくいくだろうが、内部コード'Discouraged Access'という警告が表示されます)。

もう1つの方法は、アプリケーションのアクションバーアドバイザーによってメニューを作成することです。ただし、この方法ではコードを書く必要があります(プラグインのXML定義にメニューの提供を提供することに反対する)。次の例を考えてみましょう:

public class ApplicationActionBarAdvisor extends ActionBarAdvisor 
{ 
    private IContributionItem contributionOpenPerspective; 
    private IContributionItem contributionShowView; 

    ... 

    protected void makeActions(IWorkbenchWindow window) 
    { 
     ... 
     contributionOpenPerspective = ContributionItemFactory. 
      PERSPECTIVES_SHORTLIST.create(window); 
     contributionShowView = ContributionItemFactory. 
      VIEWS_SHORTLIST.create(window); 
     ... 
    } 

    protected void fillMenuBar(IMenuManager menuBar) 
    { 
     ... 
     MenuManager windowMenu = new MenuManager("&Window", 
      IWorkbenchActionConstants.M_WINDOW); 
     menuBar.add(windowMenu); 

     MenuManager openPerspectiveMenu = new MenuManager("&Open Perspective"); 
     openPerspectiveMenu.add(perspectivesContribution); 
     windowMenu.add(openPerspectiveMenu); 

     MenuManager showViewMenu = new MenuManager("Show &View"); 
     showViewMenu.add(viewsContribution); 
     windowMenu.add(showViewMenu); 
     ... 
    } 
} 

このアプローチの可能性の欠点は、メニューの貢献によって作成された顧問で作成したメニューとメニューの間の相互作用です。 advisor menu items are created before menu contributions以降、メニューの投稿にさらに多くの並べ替えロジックを追加する必要があります。これはほとんどの人にとってはうまくいくかもしれませんが、org.eclipse.ui.menusからの集中メニュー構造の「感じ」を失うことになります(他のプラグインが自分自身のメニューの寄稿で遊んでいるような錯覚でも)。

また、パースペクティブメニューのビルドも含めました。完全なオプションですが、誰かが同じメニュービルディングを視点で実行しようとしている場合は追加しました。

関連する問題