Изменить пункты меню программно из плагина Eclipse
-
05-07-2019 - |
Вопрос
Я хотел бы иметь возможность полностью удалять пункты меню при запуске приложения-плагина eclipse. Я хочу добавить эти пункты меню позже, в зависимости от бизнес-логики, основанной на действиях пользователя. Есть ли способ сделать это? Я смотрел на использование материалов, но чувствую, что это не совсем то, что я хочу.
Если он может делать то, что мне нужно, как мне их использовать? Заранее благодарим за любую помощь.
Решение
Вы можете получить Меню из 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();
}
}
Другие советы
Существует несколько способов управления видимостью пунктов меню или панели инструментов в приложении RCP.
Если у вас есть контроль над плагином, который добавляет рассматриваемый элемент (ы), то обычно проще всего использовать выражение visibleWhen
, связанное с меню menus
точка расширения. Если у вас есть внутреннее состояние, которое вы хотите проверить, тогда вы можете использовать элемент test
выражения вместе с propertyTester
.
Альтернативой является использование действий. Они могут контролировать многие другие аспекты вашего приложения, хотя вам может понадобиться повторно реализовать некоторые из встроенных диалоговых окон. Смотрите эту запись в блоге " Использование действий для управления пользователями " для некоторых деталей.