# Eclipse RCP: Context Menu für MultiPageEditor erzeugen...



## Mr_Johnson (2. Feb 2010)

Hallo! Ich sitze an einem RCP - Projekt und habe folgendes Problem: 

Ich habe einen MultiPageEditor mit mehreren Pages. Ich möchte die Funktionalität einbauen, über die rechte Maustaste das Context Menü zu öffnen und eine neue Page dem Editor hinzu zu fügen. Das Command für das Instanzieren der neuen Seite steht schon. 

Was ist jetzt der beste Weg um ein Contextmenü für die jeweilige EditorPage zu implementieren?

Ich habe im Netz nur Beispiele für Viewer mit Contextmenü gefunden, wie z.B. 


```
final MenuManager menuManager = new MenuManager();
final Menu menu = menuManager.createContextMenu(table);
table.setMenu(menu);
getSite().registerContextMenu(menuManager, tableViewer);
```

Die Methode registerContextMenu() verlangt als zweiten Parameter einen ISelectionProvider. Sollte jetzt meine Composite-Klasse (Inhalt / Maske des Editors) ISelectionListener implementieren und dann als zweiter Parameter übergeben werden? Oder gibts einen einfacheren Weg?

Danke schonmal! 
Gruß


----------



## Wildcard (2. Feb 2010)

Deine Composite Klasse? Composite wird eher selten extended, es sei denn du möchtest ein generisches Control bereitstellen.
Hast du zufällig einen JFace Viewer in deinem Composite? Den kannst du als Selection Provider verwenden.


----------



## Mr_Johnson (3. Feb 2010)

Nein, bislang keinen Viewer auf der Composite. Sie beinhaltet lediglich Label, Textfelder und Comboboxen. Ich bin ein ziemlicher Frischling, gibt es einen Viewer, der da passen würde?


----------



## Wildcard (3. Feb 2010)

Nein, Viewer sind eher List, Table, Tree,...
Ja, dann solltest du einen eigenen SelectionProvider implementieren.


----------



## Marcusk (10. Feb 2010)

Hallo zusammen,

vielen Dank für den Hinweis wie ich ein Kontextmenü erzeuge. Ich konnte mit der oben beschrieben Methode ein Kontextmenü mit einem jface TableViewer erzeugen. Allerdings habe ich jetzt das Problem, dass in dem Menü nicht nur meine Aktionen aufgeführt sind.

Ich gehe davon aus das über ExtensionPoints andere Plugins mein Kontextmenü füllen. Leider weiß ich nicht wie ich dies unterbinden kann.

Ich würde mich sehr über Vorschläge zum Lösen des Problems freuen.

UPDATE:
Ich konnte meine Frage selbst mit Hilfe des Forums beantworten:
Für nachfolgende User hier der Link zum Thema:
http://www.java-forum.org/allgemeine-java-themen/70860-listview-treeview-contextmenu.html

Die Lösung des Problems ist ganz einfach. 
Die Zeile 
	
	
	
	





```
getSite().registerContextMenu(menuManager, tableViewer)
```
 registriert das Kontextmenü und somit können andere Plugins ihre Menüeinträge einfügen. Nimmt man die Zeile weg hat man den gewünschten Effekt, ein leeres Kontextmenü .

Wer noch etwas mehr Information braucht für den empfiehlt sich das Buch:
Java-Entwicklung mit Eclipse 3.3 Kapitel 9.5 Aktionen und Menüs ISBN-10: 3898645045


----------



## Mr_Johnson (10. Feb 2010)

Ich habe eine Klasse namens "MultiPageSelectionProvider" entdeckt. Kann ich darüber ein Kontextmenü registrieren?


----------



## Mr_Johnson (18. Feb 2010)

Ok, ich hab einen Editor mit der ID: 

"myProject.ui.editors.MultiPageEditor"

Dann wäre doch die Urilocation für das Standart Popupmenu:

"popup:myProject.ui.editors.MultiPageEditor" Oder lieg ich da falsch?

*Edit:* Ich hab jetzt erstmal zwei Schritte zurück gemacht und schaue ob ich überhaupt ein Kontextmenü hinkriege. Es tut sich leider hier auch nix...

*Erstellen und registrieren des Kontextmenüs: *

```
Control control2 = this.getControl(0);
		ProjectEditorComposite proComp = (ProjectEditorComposite) control2;
		CheckboxTableViewer checkBoxTableViewer = proComp.getCheckBoxTableViewer();
		Table table = checkBoxTableViewer.getTable();
		MenuManager menuManager = new MenuManager();
		menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
		table.setMenu(menuManager.createContextMenu(table));
		getSite().registerContextMenu("popup:com.iq.projectmgr.ui.editors.MultiPageEditor", menuManager, checkBoxTableViewer);
		getSite().setSelectionProvider(checkBoxTableViewer);
```
*Menü in der Plugin.xml*
[XML]
  <menuContribution
             locationURI="popup:com.iq.projectmgr.ui.editors.MultiPageEditor">
          <command
                commandId="com.iq.projectmgr.ui.commands.newProject"
                label="test"
                style="push">
          </command>
       </menuContribution>
[/XML]

Ich bin mir ziemlich sicher irgendwas elementares noch nicht verstanden zu haben. Die Frage ist nur was... :rtfm:

Gruß
Patrick


----------

