java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Plattformprogrammierung

Plattformprogrammierung OSGi, Eclipse RCP und Co.

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 01.03.2012, 11:19   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 09.11.2009
Fachbeiträge: 191
Abgegebene Danke: 25
Erhielt 0 Danke für 0 Beiträge
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.
sicLotus ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 01.03.2012, 11:41   #2 (permalink)
Neuer Benutzer
short
 
Registriert seit: 07.05.2010
Fachbeiträge: 23
Abgegebene Danke: 0
Erhielt 4 Danke für 4 Beiträge
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...
Huecheln ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 01.03.2012, 14:22   #3 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 09.11.2009
Fachbeiträge: 191
Abgegebene Danke: 25
Erhielt 0 Danke für 0 Beiträge
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
2
3
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?
sicLotus ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 01.03.2012, 14:40   #4 (permalink)
Neuer Benutzer
short
 
Registriert seit: 07.05.2010
Fachbeiträge: 23
Abgegebene Danke: 0
Erhielt 4 Danke für 4 Beiträge
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...
Huecheln ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 01.03.2012, 14:49   #5 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 09.11.2009
Fachbeiträge: 191
Abgegebene Danke: 25
Erhielt 0 Danke für 0 Beiträge
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.
sicLotus ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 01.03.2012, 15:11   #6 (permalink)
Neuer Benutzer
short
 
Registriert seit: 07.05.2010
Fachbeiträge: 23
Abgegebene Danke: 0
Erhielt 4 Danke für 4 Beiträge
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.
Huecheln ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
(Swing) JSpinner Stepsize anpassen wyldstyle AWT, Swing, JavaFX & SWT 1 19.04.2010 10:57
JTable mit ContextMenü Foermchen82 AWT, Swing, JavaFX & SWT 1 11.02.2010 09:01
BackingBean HtmlDataTable ContextMenu knoppers Allgemeines EE 2 22.01.2010 12:04
Perspektiven Anpassen Dialog/und Toolbars SegFault Plattformprogrammierung 1 07.01.2010 08:30
[SWT] Contextmenu: Wie werde ich Button 'Input Methods' los? pocketom AWT, Swing, JavaFX & SWT 1 25.07.2007 16:02


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de