Eclipse RCP RCP Anwendungsentwicklung | ||
Eclipse RCP Informationen About |
Die Preferences Page - eigene BenutzereinstellungenSeitenübersicht Info Der Artikel basiert auf Eclipse 3.5.1 Zum Speichern von Benutzereinstellungen einer Anwendung bietet Eclipse den Preferences Store an. Zum Verwalten der Benutzerwerte dient der Preferences Dialog. Jedes Plugin kann dort seine eigene Seite hinzufügen. Die Benutzereinstellungen werden beim Beenden der Anwendung gespeichert und stehen somit beim erneuten Start wieder zur Verfügung. Es sind nur wenige Schritte nötig um eine eigene Preferences Page zum Preferences Dialog von Eclipse hinzuzufügen. Preferences Store verwendenUm den Preferences Store zu nutzen muss der Activator des Plugins from AbstractUIPlugin ableiten: /** * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin { Damit ist steht der Preferences Store bereit. Die Implementierung der Methode initializeDefaultPluginPreferences ist nicht mehr nötig. Das » Setzen der Defaultwerte wurde durch den AbstractPreferenceInitializer abgelöst. Der Zugriff auf den Preference Store des Plugins kann von überall erfolgen: Activator.getDefault().getPreferenceStore() Preferences Action zum Menü hinzufügenUm den Preferences Dialog in einer eigenen Anwendung aufrufen zu können, muss die entsprechende Action im ApplicationActionBarAdvisor erzeugt und registiert werden: private IWorkbenchAction preferencesAction; protected void makeActions(final IWorkbenchWindow window) { preferencesAction = ActionFactory.PREFERENCES.create(window); register(preferencesAction); } Anschliessend kann sie zu einem Menü hinzugefügt werden: protected void fillMenuBar(IMenuManager menuBar) { MenuManager aMenu = new MenuManager("&Window", IWorkbenchActionConstants.M_WINDOW); menuBar.add(aMenu); aMenu.add(preferencesAction); Das Ergebnis, für den Fall dass in der Anwendung durch kein anderes Plugin eine Preferences Page konfiguriert wurde, sieht nun so aus: ![]() Anzeige:
Preferences Page erstellenUm die Benutzereinstellungen editieren zu können, wird über den ExtensionPoint org.eclipse.ui.preferencePages eine eigene PreferencesPage hinzugefügt. <extension point="org.eclipse.ui.preferencePages"> <page class="de.sinoz.rcp.preferences.preferences.PluginPreferencesPage" id="de.sinoz.rcp.preferences.preferencespage" name="Plugin Preferences"> </page> </extension> Es empfielt sich die FieldEditorPreferencePage mit einem GridLayout als Basis für die eigene PreferencesPage zunehmen. public class PluginPreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public PreferencesPage() { super(GRID); } Nun werden die Eingabeelemente in der createFieldEditors()-Methode erzeugt. Es gibt eine ganze Reihe bereits bestehender FieldEditor, die über die addField-Methode hinzugefügt werden. Über eine eindeutige ID wird der Eintrag im Preferences Store referenziert. /* (non-Javadoc) * @see org.eclipse.jface.preference.FieldEditorPreferencePage #createFieldEditors() */ @Override protected void createFieldEditors() { addField(new BooleanFieldEditor(FIELD_BOOLEAN_ID, "Boolean", getFieldEditorParent())); addField(new ColorFieldEditor(FIELD_COLOR_ID, "Color:", getFieldEditorParent())); addField(new StringFieldEditor(FIELD_STRING_ID, "String:", getFieldEditorParent())); addField(new IntegerFieldEditor(FIELD_INTEGER_ID, "Integer:", getFieldEditorParent())); addField(new DirectoryFieldEditor(FIELD_DIRECTORY_ID, "Directory:", getFieldEditorParent())); addField(new RadioGroupFieldEditor(FIELD_RADIO_GROUP_ID, "RadioGroup:", 1, new String[][] { { "Wahl 1", OPTION_RADIO_GROUP_1}, { "Wahl 2", OPTION_RADIO_GROUP_2} }, getFieldEditorParent())); addField(new FontFieldEditor(FIELD_FONT_ID, "Font:", getFieldEditorParent())); addField(new ScaleFieldEditor(FIELD_SCALE_ID, "Scale:", getFieldEditorParent(),0,100,1,1)); } Zum Schluss müssen wir noch dafür sorgen, dass der Preferences Store der PreferencesPage gesetzt wird. Dies geschieht in der init()-Methode. Unterbleibt dies, wird zwar die Seite mit Inhalt angezeigt, aber der "Apply"-Button bleibt deaktiviert. /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ @Override public void init(IWorkbench workbench) { setPreferenceStore(Activator.getDefault().getPreferenceStore()); } Damit ist die Preferences Page unseres Plugins fertig implementiert und im Preferences Dialog ist der Eintrag "Plugin Preferences" sichtbar: ![]() Defaultwerte setzenNun fehlt noch das Setzen der Defaultwerte. Dieses folgt in einem AbstractPreferenceInitializer, welcher über den ExtensionPoint org.eclipse.core.runtime.preferences konfiguriert wird: <extension point="org.eclipse.core.runtime.preferences"> <initializer class="de.sinoz.rcp.preferences.preferences.PluginPreferenceInitializer"> </initializer> </extension> Die implementierte Klasse benötigt nur eine Methode, in welcher die Defaultwerte gesetzt werden: public class PluginPreferenceInitializer extends AbstractPreferenceInitializer { /* (non-Javadoc) * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer #initializeDefaultPreferences() */ @Override public void initializeDefaultPreferences() { IEclipsePreferences node = new DefaultScope().getNode(Activator.PLUGIN_ID); node.putBoolean(PluginPreferencesPage.FIELD_BOOLEAN_ID, true); node.put(PluginPreferencesPage.FIELD_COLOR_ID, "190,190,190"); node.put(PluginPreferencesPage.FIELD_STRING_ID, "A Text"); node.putInt(PluginPreferencesPage.FIELD_INTEGER_ID, 3); node.put(PluginPreferencesPage.FIELD_DIRECTORY_ID, "C:\\"); node.put(PluginPreferencesPage.FIELD_RADIO_GROUP_ID, PluginPreferencesPage.OPTION_RADIO_GROUP_2); node.putInt(PluginPreferencesPage.FIELD_SCALE_ID, 25); } } Wird nun der Preference Dialog das erste Mal gestartet sind die Defaultwerte gesetzt: ![]() Anzeige:
Auf Preferenzen zugreifenAuf die Preferenzen zugreifen lässt sich über: IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); preferenceStore.getString(PluginPreferencesPage.FIELD_STRING_ID); Einträge aus dem Preferences Dialog entfernenNicht immer sind alle Einträge im Preferences Dialog erwünscht. In einer RCP Anwendung können dazu in der postStartup() Methode des ApplicationWorkbenchAdvisor die Einträge programmatisch entfernt werden. Zu diesem Zeitpunkt sind alle Extensions eingelesen. Die Suche nach den verwendeten IDs lässt sich abkürzen, indem sie ausgegeben werden. Im auskommentierten Teil wird zum Beispiel die Wurzeleinträge interiert: /* (non-Javadoc) * @see org.eclipse.ui.application.WorkbenchAdvisor#postStartup() */ @Override public void postStartup() { PreferenceManager pm = PlatformUI.getWorkbench().getPreferenceManager(); // See what we have // for (IPreferenceNode node : pm.getRootSubNodes()) { // System.out.println(node.getId()); // } pm.remove("de.sinoz.rcp.preferences.preferencespage"); } |
|
07.08.2011, Silke Schlüter, Impressum |