Projektspezifischer Preference-Dialog

antimon

Mitglied
Hallo zusammen,

nachdem ich trotz Durchwühlen der Eclipse-API nicht schlauer geworden bin, hier mein Hilferuf an Euch:

Ich möchte projektspezifische Einstellungen in meinem Eclipse-RCP Projekt in einem eigenen Dialog haben, der genauso aufgebaut ist wie der PreferenceDialog. Im Prinzip genauso wie man in der Eclipse IDE auch einen globalen Einstellungsdialog hat und dann noch einen pro Projekt.

Mein Gedankengang war folgender: Um dem globalen Einstellungsdialog Seiten unterzujubeln erstellt man PreferencePage-Extensions. Das Gleiche kann ich auch machen, in dem ich einen ExtensionPoint für projektspezifische Einstellungsseiten erstelle.

Nur jetzt beginnt der schwierige Teil - wie bekomme ich die PreferencePages aus diesem ExtensionPoint in den eigenen PreferencesDialog? Ich habe versucht zu schauen, wie das bei dem Command "org.eclipse.ui.window.preferences" läuft, aber daraus bin ich nicht schlau geworden.

Wie muss ich vorgehen?
- Den PreferencesDialog erweitern und dort die Seiten einbinden?
- Oder brauche ich den PreferenceManager, der die Seiten sammelt und sortiert und dann dem Dialog übergeben wird?

Wäre ein Command zum Öffnen des Dialoges sinnvoll, der erst die Seiten "sammelt", sortiert und dann dem Dialog übergibt? Oder ist das nicht zielführend?

Leider ist mir nicht so ganz klar, wie die Zusammenhänge sind, denn die Seiten können ja gruppiert werden und müssen deshalb an der richtigen Stelle "eingehängt" werden - muss ich mich darum kümmern oder gibt es da schon vorgefertigte Klassen?
 
Ich habe jetzt mal die Version mit dem PreferenceManager ausprobiert und denke dass ich auf einem richtigen Weg bin... zuerst erstelle ich also alle PreferenceNodes und übergebe die an den PreferenceManager - so weit so gut.

Allerdings habe ich jetzt Schwierigkeiten beim Öffnen des Dialogs:

Wenn ich die Nodes mit new PreferenceNode("id", new XYZPage()); erstelle, funktioniert alles soweit - allerdings möchte ich gerne den Namen der einzelnen Seiten definieren, deswegen benötige ich den Konstruktor: PreferenceNode(String id, String label, ImageDescriptor image, String className)

Allerdings übergibt man hier ja className - also zum Beispiel XYZPage.class.getName()
Wenn ich dies aber tue, oder anstattdessen "org.a.b.c.XYZPage.class" angebe, bekomme ich eine NullPointerException und der Fensterinhalt bleibt frei:
Code:
java.lang.NullPointerException
	at org.eclipse.jface.preference.PreferenceNode.createPage(PreferenceNode.java:161)
	at org.eclipse.jface.preference.PreferenceDialog.createPage(PreferenceDialog.java:1339)
	at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.createPage(FilteredPreferenceDialog.java:382)
	at org.eclipse.jface.preference.PreferenceDialog.showPage(PreferenceDialog.java:1230)
	at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.showPage(FilteredPreferenceDialog.java:679)
	at org.eclipse.jface.preference.PreferenceDialog$10.run(PreferenceDialog.java:708)

Wenn ich XYZPage in das "normale" Eclipse-Preferences-Fenster (über den Extension Point, da wird ja auch nur der Klassenname übergeben) einbinde, funktioniert es einwandfrei.

Was könnte das sein? Bin ziemlich ratlos...
 
Zurück