RCP ContextMenu nach selectedTreeItem anpassen?

Dieses Thema RCP - ContextMenu nach selectedTreeItem anpassen? im Forum "Plattformprogrammierung" wurde erstellt von sicLotus, 1. März 2012.

Thema: ContextMenu nach selectedTreeItem anpassen? Hi, folgende Frage: Ich hab 1 Kontextmenü mit einigen Befehlen, z.B. "Neu" und "Öffnen". Dieses Kontextmenü...

  1. Hi,

    folgende Frage:
    Ich hab 1 Kontextmenü mit einigen Befehlen, z.B. "Neu" und "Öffnen".
    Dieses Kontextmenü wird auf eine ExplorerView angewandt, das Kontextmenü ist also in der gesamten View aufrufbar.

    In der Explorerview sind mehrere TreeItems die man auswählen kann. Als Beispiel: "Auto", "Haus" und "Garten".

    Für jedes dieser TreeItems gibts jetzt also dieses Kontextmenü mit Neu und Öffnen. Allerdings soll z.B. bei Haus der Befehl "Öffnen" nicht auswählbar sein. Bei den anderen beiden aber schon.

    Meine Frage ist nun: geht das? Ich möchte quasi, dass jede Klasse der TreeItems selbst bestimmen kann, welchen Menübefehl sie anzeigt bzw. ausführen lässt. (ausgegraut reicht ja auch).

    Mein Problem ist quasi, dass das Menü bei jedem Aufruf neu initialisiert werden müsste und die Daten sich aus dem jeweiligen TreeItem geholt werden müssten, ob der Befehl aktiviert oder deaktiviert ist. Gibt es eine Möglichkeit zu sagen, wenn das Kontextmenü aufgerufen wird, soll es vorher aktualisiert werden oder so?

    Für jeden Rat wäre ich dankbar.
     
  2. Schau mal hier --> (hier klicken!)
    Dort wirst du fündig!
  3. Die Tutorials hab ich mir durchglesen. Der letzte Link hat allerdings nicht funktioniert.
    An sich ist mir ja klar wie das Prinzip funktioniert. Das Problem was ich habe, wo kann ich den refresh aufrufen? Ich hab eine Klasse für jeden Tree (z.B. Garten). In diesem hab ich eine Methode, die einen Boolean liefert, je nachdem ob ein Command ausgeführt werden darf, ungefähr so:
    Code (Java):

    public Boolean isDeletable() {
    return Boolean.TRUE;
    }
     
    Ich hab nen SourceProvider (abgeleitet vom AbstractSourceProvider), dieser müsste ja dann den Refresh implementieren. (Das heißt alle Commands durchgehen und entscheiden ob sie aktiviert oder deaktiviert sind.) In dem Tutorial wäre das wohl so öhnlich wie toogleEnabled();

    Mein Problem ist halt, ich weiß nicht wo oder wie ich den refresh bei jedem Rechtsklick aufrufen könnte.
    Beim toogleEnabled, da wird ja aktiv beim Drücken eines Buttons dafür gesorgt das die Methode aufgerufen wird. Gibts dafür überhaupt ne Möglichkeit?
     
  4. Für das letzte Tutorial muss du nach "rcp context menu visiblewhen" googlen und den zweiten Treffer nehmen.


    Ich weiß jetzt nicht, wie du dein Kontextmenü erstellst. Mit den Tutorials wollte ich dir nur zeigen, wie ich es mache und es auch funktioniert.

    Der Vorteil mit den Extension Points ist, dass du nur die Funktion in Form eines Commands implementieren musst. Der Rest (Erstellen des Context Menüs, Aufrufen, verfügbar oder nicht) wird automatisch gesteuert.
    Nur als Beispiel, wie deinem View ein Context Menu hinzugefügt wird (Auszug aus Plugin.xml):

    <extension point="org.eclipse.ui.menus">
    <menuContribution locationURI="popup:[ViewID]">
    <command
    commandId="com.example.somecommand"
    style="push">
    </command>
    </menuContribution>
    </extension>

    Ob das Ding dann zur Auswahl steht wird so gesteuert:

    <extension point="org.eclipse.ui.handlers">
    <handler commandId="com.example.somecommand">
    <activeWhen>
    <with variable="selection">
    <iterate ifEmpty="false" operator="or">
    <instanceof value="com.example.SomeObject"/>
    </iterate>
    </with>
    </activeWhen>
    </handler>
    </extension>

    In deiner View-Klasse musst du das Context Menü noch registrieren (Tutorial) und fertig...
     
  5. Ich hab mir das andere Tutorial auch noch angeschaut. Auch das hilft mir an meiner Stelle einfach nicht weiter, weil es bei enabledWhen nicht in die Tiefe geht.

    Ich versteh nicht, was es mir bringen soll, wenn ich mit instanceOf über ein Objekt iteriere...

    Also ich versteh quasi diese Zeilen nicht komplett:
    <activeWhen>
    <with variable="selection">
    <iterate ifEmpty="false" operator="or">
    <instanceof value="com.example.SomeObject"/>
    </iterate>
    </with>
    </activeWhen>

    activeWhen ist klar, der Menüpunkt wird aktiviert, wenn etwas eintritt..
    Jetzt weiß ich aber schon nicht weiter.. with variable = "selection".. wo wird diese Variable denn deklariert? Musste ich die selber anlegen? Ich erinnere mich vage in dem einen Tutorial da wurde sowas glaube gemacht..

    Falls jemand die paar Zeilen kurz erklären könnte, wäre das wirklich hilfreich.
     
  6. Das Ganze funktioniert auch nur wenn du in deiner View Klasse das Kontextmenü bei der Workbench registrierst. Im letzten Tutorial ist dieses Beispiel:

    Code (Text):
    MenuManager menuManager = new MenuManager();
    menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    table.setMenu(menuManager.createContextMenu(table));

    getSite().setSelectionProvider(tableViewer);
    Das funktioniert natürlich auch mit einem Tree.

    <activeWhen>

    <with variable="selection">
    --> ist eine Liste der selektierten Elemente. Hier musst du nichts deklarieren.

    <iterate ifEmpty="false" operator="or">
    --> mit iterate wird angegeben, dass über diese Selektion iteriert werden soll und mit "or" wird angegeben, das es reicht wenn ein Element auf die folgende Bedingung zutrifft.

    <instanceof value="com.example.SomeObject"/>
    --> gibt an, von welcher Klasse das selektierte Objekt sein darf, damit der Menüpunkt auftaucht

    </iterate>
    </with>
    </activeWhen>

    Ansonsten hilft es auch (bei mir damals), die Tutorials von Beginn an durchzuspielen. Das ist einfacher als mitten in einem Tutorial anzufangen.
     
  7. Kostenlose Java-Grundlagen DVD im Wert von 29,95 € heute kostenlos sichern (Klick)
Die Seite wird geladen...

ContextMenu nach selectedTreeItem anpassen? - Ähnliche Themen

Forum Datum
Javafx - Webview - contextMenuEnabled AWT, Swing, JavaFX & SWT 28. Jan. 2014
ContextMenu auf Sub-Items in ExpandableListView Mobile Geräte 29. Dez. 2013
Große dynamische ContextMenus erzeugen (Eclipse RCP) AWT, Swing, JavaFX & SWT 10. Juni 2011
ContextMenu AWT, Swing, JavaFX & SWT 21. Juni 2010
JTable mit ContextMenü AWT, Swing, JavaFX & SWT 11. Feb. 2010
Interessante Stellenangebote


Weitere Stellenanzeigen

Stellenanzeige Mediadaten