2009-07-29 13 views
17

Chciałbym móc całkowicie usunąć elementy menu po uruchomieniu aplikacji wtyczki eclipse. Co chcę zrobić, to móc później dodać te pozycje menu w zależności od logiki biznesowej opartej na czynnościach użytkownika. Czy jest jakiś sposób na zrobienie tego? Przyjrzałem się używaniu wkładów, ale mam wrażenie, że nie będzie dokładnie to, czego chcę.Zmiana elementów menu programowo z wtyczki Eclipse

Jeśli to może zrobić to, czego potrzebuję, jak mam go użyć? Z góry dziękuję za wszelką pomoc.

Odpowiedz

16

Menu można uzyskać z MenuManager, a następnie zmodyfikować składki. Ten fragment pokazuje, jak uzyskać dostęp do menadżera menu i usunąć nazwany przedmiot.

Będziesz musiał śledzić usunięte pozycje i indeksy pozycji, aby je przywrócić. Jedynym problemem jest to, że metoda indexOf nie jest widoczna. Dodanie tego fragmentu do typu w tym samym pakiecie co MenuManager i dodanie go do fragmentu jest jednokierunkowe.

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

Zastanawiam się, czy jest to możliwe również w przypadku aplikacji opartych na IDE? Na przykład, aby usunąć niektóre z menu Eclipse, takich jak 'Projekt '. – nbz

2

Istnieje wiele sposobów kontrolowania widoczności pozycji menu lub paska narzędzi w aplikacji RCP.

Jeśli masz kontrolę nad wtyczką, która wnosi dany przedmiot lub przedmiot, najprościej jest użyć wyrażenia visibleWhen powiązanego z punktem rozszerzenia. Jeśli masz jakiś stan wewnętrzny, który chcesz sprawdzić, możesz użyć elementu wyrażenia test wraz z propertyTester.

Alternatywą jest wykorzystanie działań. Mogą one kontrolować wiele innych rzeczy aplikacji, myślę, że może być konieczne ponowne wdrożenie niektórych wbudowanych okien dialogowych. Zobacz ten wpis na blogu "Using activities for user management", aby uzyskać więcej informacji.