Modul plug-in JFace poskytuje infrastrukturu k implementaci průvodců, stránek předvoleb a dialogových oken. Implementace těchto dialogových oken se provádí běžným způsobem. Obsah stránky nebo dialogového okna se definuje implementací metody createContents, která vytvoří obslužné prvky SWT představující obsah stránky. Tato metoda by rovněž měla přidávat listenery pro veškeré sledované události. Stránka je zodpovědná za vytvoření a vrácení kompozitního prvku, který bude nadřazen všem obslužným prvkům stránky. Následující úsek kódu vše zobrazuje:
protected Control createContents(Composite parent) { ... //composite_textField << parent Composite composite_textField = createComposite(parent, 2); Label label_textField = createLabel(composite_textField, MessageUtil.getString("Text_Field")); textField = createTextField(composite_textField); pushButton_textField = createPushButton(composite_textField, MessageUtil.getString("Change")); //composite_tab << parent Composite composite_tab = createComposite(parent, 2); Label label1 = createLabel(composite_tab, MessageUtil.getString("Radio_Button_Options")); // tabForward(composite_tab); //radio button composite << tab composite Composite composite_radioButton = createComposite(composite_tab, 1); radioButton1 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_1")); radioButton2 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_2")); radioButton3 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_3")); //composite_tab2 << parent Composite composite_tab2 = createComposite(parent, 2); Label label2 = createLabel(composite_tab2, MessageUtil.getString("Check_Box_Options")); //$NON-NLS-1$ // tabForward(composite_tab2); //composite_checkBox << composite_tab2 Composite composite_checkBox = createComposite(composite_tab2, 1); checkBox1 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_1")); checkBox2 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_2")); checkBox3 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_3")); initializeValues(); return new Composite(parent, SWT.NULL); }
Většina kódu této metody se zabývá vytvářením a rozvržením obslužných prvků, takže toto zde nebudeme rozebírat. Zde je vidět, jak odpovídající stránka vypadá:
Další primární odpovědností stránky předvoleb je reakce na zprávu performOk. Tato metoda zpravidla aktualizuje a ukládá preference uživatele a v případě potřeby aktualizuje všechny ostatní objekty modulu plug-in tak, aby odrážely změnu v předvolbách. Metoda performDefaultsse používá k obnovení předvoleb do jejich výchozího stavu, jakmile uživatel stiskne tlačítko Obnovit výchozí nastavení.
Můžete potlačit performApply, jestliže máte další zpracování v okamžiku, kdy uživatel vybere Použít. Výchozí implementací je volání performOk.
Stránky předvoleb by měly potlačit metodu doGetPreferenceStore(), aby se vrátila paměť předvolby pro ukládání jejich hodnot.
Paměti předvoleb jsou usnadňujícím mechanizmem přístupu k hodnotám předvoleb ve třídě modulů plug-in a jejich ukládání. Poskytují na úrovni modulu plug-in přístup k předvolbám, které jsou uloženy službou předvoleb v době běhu programu. AbstractUIPlugin definuje paměť předvoleb pro celý modul plug-in, která je udržována po celou dobu života modulu plug-in. Váš modul plug-in může do paměti předvoleb přidávat položky a aktualizovat hodnoty při změnách nastavení prováděných uživatelem na stránce předvoleb. Protože paměti předvoleb používají službu předvoleb platformy, postarají se o uložení hodnot předvoleb do odpovídajícího rozsahu a umístění a o inicializaci paměti předvoleb pomocí příslušných mechanizmů.
Následující kód v ReadmePreferencePage získává paměť předvolby pro ReadmePlugin.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Protože ReadmePlugin rozšiřuje třídu AbstractUIPlugin, automaticky zdědí paměť předvolby. Tato paměť předvolby je inicializována pomocí služby předvoleb platformy. Jediným, co ReadmePlugin musí udělat, je implementovat metodu, která inicializuje obslužné prvky předvoleb na jejich výchozí hodnoty. Tyto hodnoty se použijí při prvním zobrazení stránky předvoleb nebo když uživatel stiskne na stránce předvoleb tlačítko Výchozí nastavení.
protected void initializeDefaultPreferences(IPreferenceStore store) { // Tato nastavení se zobrazí, když se poprvé otevře // dialogové okno předvoleb. store.setDefault(IReadmeConstants.PRE_CHECK1, true); store.setDefault(IReadmeConstants.PRE_CHECK2, true); store.setDefault(IReadmeConstants.PRE_CHECK3, false); store.setDefault(IReadmeConstants.PRE_RADIO_CHOICE, 2); store.setDefault(IReadmeConstants.PRE_TEXT, MessageUtil.getString("Default_text")); //$NON-NLS-1$ }
Poznámka: Pokud nikde nejsou uloženy předvolby pro modul plug-in, tento modul plug-in obdrží prázdnou paměť předvolby.
Jakmile jste asociovali paměť předvolby svého modulu plug-in se stránkou předvoleb, můžete implementovat logiku pro načítání a ukládání předvoleb.
Stránky předvoleb jsou zodpovědné za inicializaci hodnot svých obslužných prvků pomocí nastavení předvoleb z paměti předvoleb. Tento proces je obdobou inicializace hodnot obslužného prvku dialogového okna z nastavení dialogového okna. ReadmePreferencePage inicializuje všechny své obslužné prvky v jediné metodě, initializeValues, která je volána z metody createContents.
private void initializeValues() { IPreferenceStore store = getPreferenceStore(); checkBox1.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK1)); checkBox2.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK2)); checkBox3.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK3)); ... }
Když je stisknuto tlačítko OK (nebo Aplikovat), aktuální hodnoty obslužných prvků na stránce předvoleb by měly být uloženy do paměti předvoleb. ReadmePreferencePage implementuje tuto logiku v oddělené metodě storeValues.
private void storeValues() { IPreferenceStore store = getPreferenceStore(); store.setValue(IReadmeConstants.PRE_CHECK1, checkBox1.getSelection()); store.setValue(IReadmeConstants.PRE_CHECK2, checkBox2.getSelection()); store.setValue(IReadmeConstants.PRE_CHECK3, checkBox3.getSelection()); ... }
Když uživatel stiskne tlačítko Výchozí nastavení, platforma obnoví všechny hodnoty v paměti předvoleb na výchozí hodnoty ve třídě modulu plug-in. Nicméně vaše stránka předvoleb je zodpovědná za to, že se tyto výchozí hodnoty odrazí v obslužných prvcích na stránce předvoleb. ReadmePreferencePage toto implementuje v initializeDefaults.
private void initializeDefaults() { IPreferenceStore store = getPreferenceStore(); checkBox1.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK1)); checkBox2.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK2)); checkBox3.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK3)); ... }