Изменить пункты меню программно из плагина Eclipse - PullRequest
17 голосов
/ 29 июля 2009

Я хотел бы иметь возможность полностью удалять пункты меню при запуске моего приложения-плагина eclipse. Я хочу добавить эти пункты меню позже, в зависимости от бизнес-логики, основанной на действиях пользователя. Есть ли способ сделать это? Я смотрел на использование материалов, но чувствую, что это не совсем то, что я хочу.

Если он может делать то, что мне нужно, как мне их использовать? Заранее благодарим за любую помощь.

Ответы [ 2 ]

16 голосов
/ 29 июля 2009

Вы можете получить Меню из 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();
    }
}
2 голосов
/ 03 марта 2012

Существует несколько способов управления видимостью пунктов меню или панели инструментов в приложении RCP.

Если у вас есть контроль над плагином, который добавляет данный элемент (ы), то проще всего обычно использовать выражение visibleWhen, связанное с точкой расширения menus. Если у вас есть внутреннее состояние, которое вы хотите проверить, тогда вы можете использовать элемент выражения test вместе с propertyTester.

Альтернативой является использование видов деятельности. Они могут контролировать многие другие аспекты вашего приложения, хотя вам может понадобиться повторно реализовать некоторые из встроенных диалоговых окон. См. Эту запись в блоге "Использование действий для управления пользователями" для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...