Le plug-in JFace fournit une trame pour l'assistant d'implémentation, les pages de préférences, et les boîtes de dialogue. L'implémentation de ces boîtes de dialogue suit un modèle commun. Le contenu d'une page ou d'une boîte de dialogue est défini en implémentant une méthode createContents qui crée les contrôles SWT représentant le contenu de la page. Cette méthode doit également ajouter des programmes d'écoute pour tout événement intéressant. La page est responsable de la création et du retour du composite qui sera le parent de tous les contrôles de la page. Le fragment suivant montre les éléments mis 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 un mécanisme pratique pour stocker et accéder aux valeurs des préférences dans une classe de plug-ins. ils permettent un accès au niveau des plug-ins aux préférences stockées, à l'aide du service de préférences d'exécution. AbstractUIPlugin définit un large magasin de préférences de plug-in qui est conservé pendant toute la durée de vie du plug-in. 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.
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 : Si aucune préférence n'est enregistrée dans un quelconque emplacement pour un plug-in, ce dernier 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)); ... }