2009-07-29 15 views
17

Eclipseプラグイン・アプリケーションの起動時にメニュー項目を完全に削除したいと考えています。私がやりたいことは、後でこれらのメニュー項目を、ユーザーの行動に基づいてビジネスロジックに応じて追加できるようにすることです。これを行う方法はありますか?私は寄付を使って調べましたが、私が望むものと正確に一致しないような気がします。Eclipseプラグインからプログラム的にメニュー項目を変更

の場合は、どうすれば使用するのですか?ご協力いただきましてありがとうございます。

答えて

16

MenuManagerからメニューを取得し、寄稿を変更することができます。このスニペットでは、メニューマネージャにアクセスして名前付きアイテムを削除する方法を示します。

削除したアイテムとアイテムのインデックスを復元する必要があります。唯一の問題は、indexOfメソッドが表示されないことです。このスニペットをMenuManagerと同じパッケージ内の型に追加し、それをフラグメントに追加することは一方的な方法です。

IWorkbenchWindow window = Workbench.getInstance().getActiveWorkbenchWindow() 

if(window instanceof WorkbenchWindow) { 
    MenuManager menuManager = ((WorkbenchWindow)window).getMenuManager(); 

    //TODO you may need to remove items from the coolbar as well 
    ICoolBarManager coolBarManager = null; 

    if(((WorkbenchWindow) window).getCoolBarVisible()) { 
     coolBarManager = ((WorkbenchWindow)window).getCoolBarManager2(); 
    } 

    Menu menu = menuManager.getMenu(); 

    //you'll need to find the id for the item 
    String itemId = "menuId"; 
    IContributionItem item = menuManager.find(itemId); 

    // remember position, TODO this is protected 
    int controlIdx = menu.indexOf(mySaveAction.getId()); 

    if (item != null) { 
     // clean old one 
     menuManager.remove(item); 

     // refresh menu gui 
     menuManager.update(); 
    } 
} 
+0

これはIDEベースのアプリケーションでも可能ですか?たとえば、 'Project 'のようなEclipseのメニューのいくつかを削除する。 – nbz

2

RCPアプリケーションでメニュー項目またはツールバー項目の表示を制御するには、いくつかの方法があります。

問題のアイテムに寄与するプラグインを制御できれば、最も簡単な方法は通常menus拡張ポイントに関連付けられたvisibleWhen式を使用することです。チェックしたい内部状態がある場合は、式のtest要素をpropertyTesterと一緒に使用することができます。

別の方法として、アクティビティを使用する方法があります。これらはアプリケーションの他の多くのものを制御することができます。組み込みのダイアログのいくつかを再実装する必要があるかもしれないと考えました。詳細については、このブログのエントリー"Using activities for user management"を参照してください。

関連する問題