Подтвердить что ты не робот

Изменение пунктов меню программно из плагина Eclipse

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

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

4b9b3361

Ответ 1

Вы можете получить меню из 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

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

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

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