L'implémentation d'une page de préférences est similaire à la création d'une page pour un assistant. La page des préférences fournit une méthode createContents qui crée les contrôles SWT représentant le contenu de la page et ajoute des écouteurs pour tous les événements d'intérêt. La page est responsable de la création et du renvoi du composite qui sera le parent de tous les boutons de commande de la page. Le fragment suivant montre les mises en évidence :
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 majorité du code dans cette méthode concerne la création et la présentation des boutons de commande, aussi n'allons nous pas la voir en détails. Voici ce à quoi ressemble la page correspondante :
L'autre principale responsabilité d'une page de préférences est de réagir au message performOk. En règle générale, cette méthode met à jour et stocke les préférences utilisateur et si nécessaire, met à jour d'autres objets plug-in pour refléter le changement de préférences. La méthode performDefaults sert à restaurer l'état initial des préférences lorsque l'utilisateur clique sur le bouton Restaurer les valeurs par défaut.
Vous pouvez remplacer performApply dans le cas d'un traitement supplémentaire si l'utilisateur clique sur Appliquer. L'implémentation par défaut consiste à appeler performOk.
Les pages de préférences doivent substituer la méthode doGetPreferenceStore() pour renvoyer un magasin de préférences pour le stockage de leurs valeurs.
Les magasins de préférences sont de nature identique aux paramètres de boîte de dialogue. A la section Paramètres des boîtes de dialogue, nous avons vu comment la classe AbstractUIPlugin gère les paramètres de boîte de dialogue tout au long de la durée de vie d'un plug-in. La même stratégie est employée pour les préférences utilisateur. Votre plug-in peut ajouter des entrées à un magasin de préférences et mettre à jour les valeurs à mesure que l'utilisateur modifie les paramètres dans la page des préférences. La plateforme se charge de sauvegarder ces valeurs dans le répertoire de travail de votre plug-in et d'initialiser le magasin de préférences à partir des paramètres enregistrés.
Le code ci-dessous dans ReadmePreferencePage obtient le magasin de préférences pour ReadmePlugin.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Comme ReadmePlugin étend la classe AbstractUIPlugin, il hérite automatiquement d'un magasin de préférences. Ce magasin de préférences est initialisé à partir du fichier de préférences stockés dans le répertoire du plug-in. ReadmePlugin n'a qu'à implémenter une méthode initialisant les contrôles de préférences à leurs valeurs par défaut. Ces valeurs sont utilisées la première fois que la page des préférences s'affiche ou lorsque l'utilisateur sélectionne le bouton Valeurs par défaut dans la page des préférences.
protected void initializeDefaultPreferences(IPreferenceStore store) { // Ces paramètres s'afficheront lorsque la boîte de dialogue Préférences // s'ouvre pour la première fois. 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$ }
Remarque : Si aucune préférence n'est sauvegardée pour un plug-in, un magasin de préférences vide lui est octroyé.
Une fois le magasin de préférences de votre plug-in associé à votre page de préférences, vous pouvez implémenter la logique de récupération et d'enregistrement des préférences.
Les pages de préférences sont responsables de l'initialisation des valeurs de leurs commandes à l'aide des paramètres de préférences issus du magasin de préférences. Ce processus revient à initialiser les valeurs des boutons de commande de la boîte de dialogue dans les paramètres de boîte de dialogue. ReadmePreferencePage initialise la totalité de ses commandes dans une seule méthode, initializeValues, appelée à partir de sa méthode 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)); ... }
Lorsque le bouton OK (ou Validation) est sélectionné, les valeurs courantes des commandes de la page des préférences doivent être de nouveau enregistrées dans le magasin de préférences. ReadmePreferencePage implémente cette logique dans une méthode distincte 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()); ... }
Lorsque l'utilisateur sélectionne le bouton de commande Valeurs par défaut, la plateforme restaure toutes les valeurs du magasin de préférences aux valeurs spécifiées dans la classe du plug-in. Cependant, votre page de préférences doit faire refléter ces valeurs par défaut dans les commandes de la page de préférences. ReadmePreferencePage implémente ceci dans 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)); ... }