De JFace-plugin levert een framework voor het implementeren van wizards, voorkeurenpagina's en dialoogvensters. De implementatie van deze dialoogvensters voldoet aan een algemeen model. De inhoud van een pagina of dialoogvenster wordt gedefinieerd door de implementatie van een createContents- methode waardoor de SWT-besturingsfuncties worden gemaakt die de inhoud van de pagina weergeven. Ook worden listeners toegevoegd door deze methode voor eventuele belangrijke events. De pagina is verantwoordelijk voor het maken en terugzenden van de samenstelling die voor alle besturingsfuncties op de pagina als bovenliggend element fungeert. In het volgende fragment ziet u de hoogtepunten:
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); }
De meeste codes van deze methode hebben betrekking op het maken en indelen van de besturingsfuncties en daarom wordt dit onderdeel hier niet grondig geanalyseerd. De bijbehorende pagina ziet er als volgt uit:
De andere primaire verantwoordelijkheid van een voorkeurenpagina is het reageren op het performOk-bericht. Deze methode werkt de gebruikersvoorkeuren bij, slaat deze op en werkt indien nodig de eventuele andere pluginobjecten bij zodat de wijzigingen in de voorkeuren worden weerspiegeld. De performDefaults-methode wordt gebruikt om de standaardstatus van de voorkeuren terug te zetten wanneer de gebruiker de knop Standaardwaarden herstellen gebruikt.
U kunt performApply overschrijven als u extra verwerking moet uitvoeren wanneer de gebruiker Toepassen selecteert. De standaardimplementatie is het aanroepen van performOk.
De voorkeurenpagina's moeten de methode doGetPreferenceStore() overschrijven voor het terugzenden van een voorkeurenarchief om de waarden op te slaan.
Voorkeurenarchieven zijn een handig mechanisme voor het toegang krijgen tot en het opslaan van voorkeurswaarden in een pluginklasse. Deze leveren op plugin-niveau toegang tot de voorkeuren die in feite zijn opgeslagen met behulp van de runtimevoorkeurenservice. AbstractUIPlugin definieert een voorkeurenarchief voor de hele plugin dat gedurende de levensduur van de plugin wordt bijgehouden. Uw plugin kan vermeldingen toevoegen aan dit voorkeurenarchief en de waarden bijwerken terwijl de gebruiker de instellingen wijzigt op de voorkeurenpagina. Omdat door de voorkeurenarchieven de platformvoorkeurenservice wordt gebruikt, worden de voorkeurswaarden opgeslagen binnen het juiste bereik en op de juiste locatie en wordt het voorkeurenarchief geïnitialiseerd met de geschikte technieken.
Met behulp van de volgende code op de ReadmePreferencePage wordt het voorkeurenarchief voor de ReadmePlugin verkregen.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Omdat de ReadmePlugin de klasse AbstractUIPlugin uitbreidt, neemt deze automatisch het archief met de voorkeuren over. Dit voorkeurenarchief wordt met behulp van de platformvoorkeurenservice geïnitialiseerd. Het enige dat door de ReadmePlugin moet worden uitgevoerd, is het implementeren van een methode die de voorkeurenbesturingsfuncties naar de standaardwaarden initialiseert. Deze waarden worden de eerste keer dat de voorkeurenpagina wordt afgebeeld of wanneer de gebruiker op de knop Standaardwaarden in de voorkeurenpagina drukt, gebruikt.
protected void initializeDefaultPreferences(IPreferenceStore store) { // Deze instellingen worden afgebeeld als het dialoogvenster Voorkeuren // de eerste keer wordt geopend. 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$ }
Opmerking: als voor een plugin geen voorkeuren zijn opgeslagen, krijgt de plugin een leeg voorkeurenarchief.
Wanneer u het plugin-voorkeurenarchief hebt gekoppeld aan de voorkeurenpagina, kunt u de logica implementeren voor het ophalen en opslaan van de voorkeuren.
De voorkeurenpagina's zijn verantwoordelijk voor het initialiseren van de besturingsfunctiewaarden waarbij de voorkeureninstellingen van het voorkeurenarchief worden gebruikt. Dit proces lijkt op het initialiseren van de besturingsfunctiewaarden voor het dialoogvenster van de dialoogvensterinstellingen. De ReadmePreferencePage initialiseert alle besturingsfuncties in een enkele methode, initializeValues, die wordt aangeroepen vanuit de createContents-methode.
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)); ... }
Wanneer u op OK (of op Toepassen) drukt, worden de huidige waarden van de besturingsfuncties van de voorkeurenpagina weer opgeslagen in het voorkeurenarchief. De ReadmePreferencePage implementeert deze logica in een aparte methode: 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()); ... }
Wanneer u op Standaardwaarden klikt, worden door het platform alle waarden van het voorkeurenarchief teruggezet naar de standaardwaarden die zijn opgegeven in de pluginklasse. Uw voorkeurenpagina is verantwoordelijk voor het weerspiegelen van deze standaardwaarden op de besturingsfuncties van de voorkeurenpagina. Door de ReadmePreferencePage wordt dit geïmplementeerd 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)); ... }