2009-07-29 2 views
17

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

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

ответ

16

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

Мне было интересно, возможно ли это для приложений на базе IDE? Например, чтобы удалить некоторые меню Eclipse, такие как «Project». – nbz

2

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

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

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

Смежные вопросы