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 est utilisée pour restaurer les préférences à leur état par défaut lorsque l'utilisateur cliquez 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. Une stratégie similaire est employée pour les préférences utilisateur. Les magasins de préférences sont tout simplement un mécanisme pratique : ils permettent un accès au niveau des plug-ins qui sont stockés réellement à l'aide du service de préférences d'exécution. 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. Dans la mesure où les magasins de préférences utilisent le service de préférences de plate-forme, ils se chargent d'enregistrer ces valeurs dans la portée et à l'emplacement appropriés, et d'initialiser le magasin de préférences à l'aide des mécanismes approprié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érence est initialisé à l'aide du service de préférences de plate-forme. ReadmePlugin a juste besoin d'implémenter une méthode qui initialise les contrôles de préférence à 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 : S'il n'y a pas de préférences enregistrées à aucun endroit pour un plug-in, le plug-in obtient un magasin de préférences vide.
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 plate-forme 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)); ... }