Eclipseプラグインからプログラムでメニュー項目を変更する
-
05-07-2019 - |
質問
Eclipseプラグインアプリケーションの起動時にメニュー項目を完全に削除できるようにしたいと思います。私がやりたいのは、ユーザーのアクションに基づいたビジネスロジックに応じて、これらのメニュー項目を後で追加できるようにすることです。これを行う方法はありますか?コントリビューションを使用することを検討しましたが、それが私が望んでいるものと正確には一致しないと感じています。
必要なことをできることができる場合、どのように使用しますか?ご協力ありがとうございます。
解決
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();
}
}
他のヒント
RCPアプリケーションのメニューまたはツールバー項目の可視性を制御する方法はいくつかあります。
問題のアイテムを提供するプラグインを制御できる場合、最も簡単な方法は通常、 menus
に関連付けられた visibleWhen
式を使用することです>拡張ポイント。確認したい内部状態がある場合は、式の test
要素を propertyTester
とともに使用できます。
別の方法は、アクティビティを使用することです。これらは、組み込みダイアログのいくつかを再実装する必要があるかもしれないと考えて、アプリケーションの他の多くのことを制御できます。このブログエントリ"ユーザー管理のためのアクティビティの使用" を参照してください。