2009-07-29 4 views
17

Ich möchte die Menüelemente beim Start meiner Eclipse-Plugin-Anwendung vollständig entfernen können. Was ich tun möchte, ist in der Lage, diese Menüpunkte später je nach Geschäftslogik basierend auf den Aktionen des Benutzers hinzuzufügen. Gibt es eine Möglichkeit, dies zu tun? Ich habe mich mit Beiträgen beschäftigt, aber ich habe das Gefühl, dass es nicht genau das ist, was ich will.Programmgesteuertes Ändern von Menüelementen Vom Eclipse-Plugin

Wenn es kann tun, was ich brauche es zu tun, wie gehe ich über die Verwendung von ihnen? Vielen Dank im Voraus für jegliche Hilfe.

Antwort

16

Sie können das Menü über den MenuManager abrufen und dann die Beiträge ändern. Dieser Codeausschnitt zeigt, wie Sie auf den Menü-Manager zugreifen und ein benanntes Element entfernen.

Sie müssen die entfernten Elemente und Objekt-Indizes im Auge behalten, um sie wiederherzustellen. Das einzige Problem ist, dass die Methode indexOf nicht sichtbar ist. Wenn Sie dieses Snippet zu einem Typ im selben Paket wie MenuManager hinzufügen und es zu einem Fragment hinzufügen, ist dies eine Möglichkeit.

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

Ich frage mich, ist das möglich für IDE-basierte Anwendungen auch? Zum Beispiel, um einige Menüs von Eclipse zu entfernen, wie zum Beispiel 'Project '. – nbz

2

Es gibt eine Reihe von Möglichkeiten, die Sichtbarkeit von Menü- oder Symbolleistenelementen in einer RCP-Anwendung zu steuern.

Wenn Sie die Kontrolle über das Plug-in haben, das die fraglichen Artikel beisteuert, verwenden Sie am einfachsten den Ausdruck visibleWhen, der dem Erweiterungspunkt menus zugeordnet ist. Wenn Sie einen internen Status haben, den Sie überprüfen möchten, können Sie das Element test des Ausdrucks zusammen mit einem propertyTester verwenden.

Eine Alternative ist die Verwendung von Aktivitäten. Diese können viele andere Dinge Ihrer Anwendung steuern. Sie müssen möglicherweise einige der integrierten Dialoge neu implementieren. Sehen Sie diesen Blogeintrag "Using activities for user management" für einige Details.