Java-Forum.org  

Zurück   Java-Forum.org > Java - Programmierung > Plattformprogrammierung

Plattformprogrammierung: ContextMenu nach selectedTreeItem anpassen?

OSGi, Eclipse RCP und Co.

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 01.03.2012, 11:19   #1
sicLotus
 
ContextMenu nach selectedTreeItem anpassen? - Standard ContextMenu nach selectedTreeItem anpassen?

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.
 

 
Anzeige
 

AW: ContextMenu nach selectedTreeItem anpassen?



 
Alt 01.03.2012, 11:41   #2
Huecheln
 
ContextMenu nach selectedTreeItem anpassen? - Standard AW: ContextMenu nach selectedTreeItem anpassen?

Hi,

wenn du dein Contextmenu über Extension Points erstellt hast, empfehle ich dir folgende Tutorials:

Eclipse Commands Tutorial
Eclipse Commands Advanced - Tutorial

Eclipse RCP


Mit den Beispielen sollte es funktionieren...
 
Alt 01.03.2012, 14:22   #3
sicLotus
Themenstarter
 
ContextMenu nach selectedTreeItem anpassen? - Standard AW: ContextMenu nach selectedTreeItem anpassen?

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:
Java Code: Quelltext in neuem Fenster öffnen
  1. public Boolean isDeletable() {
  2. return Boolean.TRUE;
  3. }

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?
 
Alt 01.03.2012, 14:40   #4
Huecheln
 
ContextMenu nach selectedTreeItem anpassen? - Standard AW: ContextMenu nach selectedTreeItem anpassen?

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...
 
Alt 01.03.2012, 14:49   #5
sicLotus
Themenstarter
 
ContextMenu nach selectedTreeItem anpassen? - Standard AW: ContextMenu nach selectedTreeItem anpassen?

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.
 
Alt 01.03.2012, 15:11   #6
Huecheln
 
ContextMenu nach selectedTreeItem anpassen? - Standard AW: ContextMenu nach selectedTreeItem anpassen?

Das Ganze funktioniert auch nur wenn du in deiner View Klasse das Kontextmenü bei der Workbench registrierst. Im letzten Tutorial ist dieses Beispiel:

Code:
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.
 
Antwort    

Zurück   Java-Forum.org > Java - Programmierung > Plattformprogrammierung

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen: ContextMenu nach selectedTreeItem anpassen?

Jscrollpane nach zoomen anpassen
Jscrollpane nach zoomen anpassen: Hallo liebe Leute, heute habe ich wieder eine Frage was das Jscrollpane betrifft: Und zwar habe ich ein bufferedImage, das ich auf jpanel zeichne, und anschließend mit mousewheel zoome. Alles...
JTable nach erzeugung anpassen.
JTable nach erzeugung anpassen.: Nach JTable tab = new JTable(); wie kann ich die meine Daten und Columns nachträglich einpflegen. Komme mit der API nicht weiter . Gruß
ContextMenu
ContextMenu: Hallo erstmal. was kann ich machen damit ich mein "Main" um die Klasse ContextMenue erweitern kann, da ich schon dieser Befehl dort steht: extends javax.swing.JApplet und java nur 1 erweiterung...
JTable mit ContextMenü
JTable mit ContextMenü: Hallo zusammen, ich baue mir grad ne JTable und möchte ihr ein ContextMenü (PopUpMenü) hinzu fügen. Klappt auch alles ganz prima. Jedoch möchte ich auch die Daten der Zeile haben, auf der Ich das...
ListView / TreeView - ContextMenu?
ListView / TreeView - ContextMenu?: Hi Leute, also ich befasse mich im Moment mit dem Plugin development für Eclipse und habe einen MultipageEditor eingebaut, welcher aus einer ListView bzw TreeView besteht. Meine Frage ist nun, wie...




Sie betrachten gerade ContextMenu nach selectedTreeItem anpassen?