18

Eclipseプラグインアプリケーションの起動時にメニュー項目を完全に削除できるようにしたいと思います。私がやりたいのは、ユーザーのアクションに基づいたビジネスロジックに応じて、後でこれらのメニュー項目を追加できるようにすることです。これを行う方法はありますか?コントリビューションを使用することを検討しましたが、それが私が望むものと正確に一致しないように感じます。

それが私がそれをするのに必要なことをすることができるならば、私はそれらをどのように使うのですか?よろしくお願いします。

4

2 に答える 2

17

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

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

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();
    }
}
于 2009-07-29T19:03:43.230 に答える
2

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

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

An alternative is to use activities. These can control many other things of your application, thought you might need to re-implement some of the built-in dialogs. See this blog entry "Using activities for user management" for some details.

于 2012-03-03T10:35:44.950 に答える