Implementazione di una pagina di preferenza

Definizione della pagina

L'implementazione di una pagina delle preferenze è simile alla creazione di una pagina per una procedura guidata. La pagina delle preferenze fornisce un metodo createContents che crea i controlli SWT che rappresentano il contenuto della pagina e aggiunge listener per tutti gli eventi di interesse. La pagina è responsabile della creazione e della restituzione del composto da cui derivano tutti i controlli presenti nella pagina.  Il seguente frammento di codice mostra questi punti fondamentali:

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);
}

La maggior parte del codice in questo metodo riguarda la creazione e la disposizione dei controlli, quindi non verrà trattato in dettaglio.  Ecco come appare la pagina corrispondente:

Pagina
delle preferenze dello strumento readme

L'altra responsabilità principale di una pagina delle preferenze è di "reagire" al messaggio di performOk. Generalmente, questo metodo aggiorna e memorizza le preferenze dell'utente e, se necessario, aggiorna qualsiasi altro oggetto del plug-in per riflettere la modifica nelle preferenze.

Le pagine delle preferenze dovrebbero ricoprire il metodo doGetPreferenceStore() per restituire una memorizzazione di preferenze in cui memorizzare i rispettivi valori.

Memorizzazione di preferenze dei plug-in

Le memorizzazioni di preferenze sono simili alle impostazioni delle finestre di dialogo. In Impostazioni delle finestre di dialogo, è stato descritto come la classe AbstractUIPlugin conserva le impostazioni della finestra di dialogo durante tutto il ciclo di vita di un plug-in. La stessa strategia viene impiegata per le preferenze dell'utente. Il plug-in dell'utente può aggiungere voci ad una memorizzazione di preferenze ed aggiornare i valori man mano che l'utente modifica le impostazioni nella pagina delle preferenze. La piattaforma si occuperà del salvataggio di tali valori nella directory di lavoro del plug-in e dell'inizializzazione della memorizzazione di preferenze in base alle impostazioni salvate.

Il seguente codice in ReadmePreferencePage ottiene la memorizzazione di preferenze per ReadmePlugin.

   protected IPreferenceStore doGetPreferenceStore() {
      return ReadmePlugin.getDefault().getPreferenceStore();
   }

Poiché ReadmePlugin estende la classe AbstractUIPlugin, eredita automaticamente una memorizzazione di preferenze. Tale memorizzazione di preferenze viene inizializzata da un file delle preferenze memorizzato nella directory del plug-in.  ReadmePlugin deve solo implementare un metoso che inizializzi i controlli delle preferenze sui valori predefiniti. Questi valori vengono utilizzati alla prima apertura della pagina delle preferenze oppure quando l'utente preme il pulsante Impostazioni predefinite della pagina delle preferenze.

protected void initializeDefaultPreferences(IPreferenceStore store) {
// Queste impostazioni verranno visualizzate quando la finestra Preferenze
// viene aperta per la prima volta.
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$
}
Nota:  se non esistono preferenze salvate per un plug-in, quest'ultimo riceverà una memorizzazione di preferenze vuota.

Richiamo e salvataggio delle preferenze

Una volta associata la memorizzazione di preferenze del plug-in alla pagina delle preferenze, è possibile implementare la logica per il richiamo e il salvataggio delle preferenze.

Le pagine delle preferenze sono responsabili dell'inizializzazione dei valori dei rispettivi controlli mediante le impostazioni presenti nella memorizzazione di preferenze. Questo processo è simile all'inizializzazione dei valori di controllo delle finestre di dialogo presenti nelle impostazioni delle finestre di dialogo. ReadmePreferencePage inizializza tutti i propri controlli in un singolo metodo, initializeValues, richiamato dal rispettivo metodo 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));
	...
}

Quando viene premuto il pulsante OK (o Applica), i valori correnti dei controlli, presenti sulla pagina delle preferenze, dovrebbero essere inseriti nella memorizzazione di preferenze. ReadmePreferencePage implementa questa logica in un metodo separato, 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());
	...
}

Quando l'utente preme il pulsante Impostazioni predefinite, la piattaforma ripristinerà i valori della memorizzazione di preferenze sui valori predefiniti specificati nella classe di plug-in. Tuttavia, la pagina delle preferenze dell'utente ha la responsabilità di riportare questi valori predefiniti nei controlli sulla pagina delle preferenze. ReadmePreferencePage effettua questa implementazione in 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));
      ...
   }
Copyright
IBM Corp. e altri 2000,2002.