ListView / TreeView - ContextMenu?

Status
Nicht offen für weitere Antworten.

Buckethead

Mitglied
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 ich ein Kontextmenü (also bei Rechtsklick auf ein Element) in die beiden Views bekomme. Muss ich das Menu den Views oder dem Tree bzw dem Table zuordnen und überhaupt.. Irgenwie sind bisher alle Bemühungen gescheitert..

Danke schonmal im Vorraus!
 

Wildcard

Top Contributor
Auf Rechtsklick reagieren. Für das Eclipse Context Menu, schau dir mal den MenuManager an, ein genaues Codebeispiel habe ich gerade nicht im Kopf, ist aber nicht weiter schwierig.
 

the_alien

Aktives Mitglied
Ich poste mal kurz meine Methode zum Aufbau eines simplen Contextmenüs
Code:
private void createContextMenu() {
		//create menu manager
		MenuManager manager = new MenuManager();
		manager.setRemoveAllWhenShown(true);
		//register listener to fill the menu when about to be shown
		manager.addMenuListener(new IMenuListener() {
			public void menuAboutToShow(IMenuManager mgr) {
				mgr.add(new MyAction1());
                                mgr.add(new Seperator());
                               //etc
			}
		});
		
		//create menu
		Menu menu = manager.createContextMenu(viewer.getControl());
		viewer.getControl().setMenu(menu);
		
		//register menu for extension
		getSite().registerContextMenu(manager, viewer);
	}

Wenn du es lieber per xml aufbaust (z.b. damit dein Plugin noch nicht geladen wird) dann guck mal hier rein:
http://help.eclipse.org/help33/inde...tension-points/org_eclipse_ui_popupMenus.html

Gruß
 

Buckethead

Mitglied
Hey danke, also es öffnet sich auf jeden Fall ein Kontextmenü.
Nur: Dort sind vordefinierte Punkte wie "Run As" etc eingetragen. wie bekomme ich diese weg?
Danke nochmal
 

Buckethead

Mitglied
Also ich hab einfach deinen Code kopiert, aber keine weiteren Menüpunkte hinzugefügt.
Ich hatte mir ein leeres Kontextmenü gewünscht, nur sind leider schon einige Menüpunkte wie "run as" oder "debug as" vorhanden. Und was meinst du damit worauf der Editor basiert? Es ist ein einfacher MultipageEditor mit zwei views..

Danke nochmal
 

Wildcard

Top Contributor
Beim MenuManager werden auch die Contributions anderer Plugins auf deine Selection angewendet (das meinte ich auch weiter oben mit dem Eclipse Context Menu). Versuch mal setRemoveAllWhenShown(true)
 

the_alien

Aktives Mitglied
Dann nimm mal die letzte Zeile aus dem Quellcode raus, genau da werden nämlich die anderen Contributions anderer Plugins eingefügt.

Die hier:
getSite().registerContextMenu(manager, viewer);
 

Buckethead

Mitglied
Ich war mir sicher jede Zeile schonmal einzeln auskommentiert zu haben.. Scheinbar nicht, oh man.
Also das geht jetzt schonmal, Danke!

Noch ne kurze Frage:
Wenn ich Einträge hinzufügen will, muss ich das folgerndermaßen machen?
Code:
mgr.add(new IAction() {

			@Override
			public void addPropertyChangeListener(
					IPropertyChangeListener listener) {
				// TODO Auto-generated method stub
				etc...

			}
Scheint mir nicht so sinnvoll, da man ja alle MEthoden von diesem Interface implementieren müsste, was ja schon einige sind..
Gibts da vielleicht eine bessere Lösung?
 

the_alien

Aktives Mitglied
Der einfachste weg ist die Aciton Klasse zu nutzen statt des Interfaces.

Code:
mgr.add(new Action() { 
public void run() {
//DO SOMETHING
}});
 

Buckethead

Mitglied
Hm ok, hätte mir einfach mal die Kontruktoren angucken sollen..

Vielen Dank für die echt gute Hilfe, wenn ich später noch Fragen habe meld ich mich nochmal (keine Angst, werde jetzt mir erstmal die ganzen Sachen genau angucken und ausprobieren ) :wink:
 

Buckethead

Mitglied
Also eine Sache ist mir nicht ganz klar:
Ich will beim Rechtsklick auf ein Element in dem Viewer genau das angeklickte Element auswählen. Dazu Muss ich meiner Meinung nach die MausPosition ermitteln.
Mit
Code:
((TableViewer) viewer).getTable().getItem(...);
Komme ich wohl auch ran, aber: In der API steht, das "getItem()" sowohl einen Integer als auch einen Point als Parameter akzeptiert werden.
Wenn ich jetzt die MausPosition mit
Code:
MouseInfo.getPointerInfo().getLocation()
abfrage und übergeben will sagt er mir, dass nur Integer akzeptiert werden..

Weiß jemand vielleicht eine Lösung?

Edit: OK, es handelt sich um eine andere Klasse Point.. Kann mit trotzdem jmd helfen mein Problem zu lösen?
 

Buckethead

Mitglied
Was meinst du mit ganz automatisch? Also wenn ich dem Viewer ein Kontextmenü hinzufüge kann ich ja überall klicken und das Menü erscheint. Wie komme ich jetzt an das angeklickte Item bzw null wenn keines angeklickt wurde?
 

the_alien

Aktives Mitglied
Achso, wenn du nur wissen willst welches Element selektiert ist, dann kannst du das mit getSelection() machen.
Es hörte sich so an, als ob bei einem Rechtsklick das Element im Viewer nicht markiert (ausgewählt) würde.
 

Buckethead

Mitglied
Ahh..
Mir ist gar nicht aufgefallen, dass er die Elemente schon selektiert und man ja somit schon ein Element ausgewählt hat.

Jetzt klappt alles, Danke nochmal :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben