JFace-plugin-modulen inneholder et rammeverk for implementering av veivisere, preferansesider og dialogbokser. Implementeringen av disse dialogboksene har et felles mønster. Innholdet på en side eller i en dialogboks defineres ved å implementere en createContents-metode som oppretter SWT-kontrollene som representerer sideinnhold. Denne metoden skal også legge til lyttere for interessante hendelser. Siden oppretter og returnerer kompositten som er overordnet alle kontrollene på siden. Snutten nedenfor viser de viktigste:
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); }
Koden er hovedsakelig involvert i å opprette og plassere kontrollene, men vi ser ikke nærmere på dette nå. Slik ser den tilhørende siden ut:
Preferansesiden har dessuten en annen hovedoppgave med å svare på performOk-meldingen. Denne metoden oppdaterer og lagrer vanligvis brukerpreferansene, og oppdaterer om nødvendig andre plugin-objekter for å vise endringen i preferansene. performDefaults-metoden brukes for å gjenopprette preferansene til standardtilstanden når brukeren klikker på knappen Gjenopprett standardverdier.
Du kan overstyre performApply hvis det skal utføres mer behandling når brukeren velger Bruk. Standardimplementeringen er å kalle performOk.
Preferansesider må overstyre metoden doGetPreferenceStore() for å returnere et preferanselager for lagring av verdiene.
Preferanselagre er en bekvemmelighetsmekanisme for å få tilgang til og lagre preferanseverdier i en plugin-klasse. De gir plugin-tilgang til preferanser som er lagret ved hjelp av kjøretidspreferansetjenesten. AbstractUIPlugin definerer et preferanselager som går på tvers av plugin-moduler, og som ivaretas så lenge plugin-modulen er i bruk. Plugin-modulen kan legge til oppføringer til dette preferanselageret og oppdatere verdiene etter hvert som brukeren endrer innstillingene på preferansesiden. Siden preferanselagre bruker plattformpreferansetjenesten, lagrer de preferanseverdier med riktig omfang og plassering og initialiserer preferanselageret ved hjelp av de aktuelle mekanismene.
Følgende kode i ReadmePreferencePage henter preferanselageret for ReadmePlugin.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
ReadmePlugin utvider AbstractUIPlugin-klassen og arver automatisk et preferanselager. Preferanselageret initialiseres ved hjelp av plattformpreferansetjenesten. ReadmePlugin trenger bare å implementere en metode som initialiserer preferansekontrollene til standardverdiene. Disse verdiene brukes første gang preferansesiden vises eller når brukeren velger standardknappen på preferansesiden.
protected void initializeDefaultPreferences(IPreferenceStore store) { // These settings will show up when Preference dialog // opens up for the first time. 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$ }
Merk: Hvis det ikke lagres preferanser for en plugin-modul, vil preferanselageret for plugin-modulen være tomt.
Når du har tilknyttet plugin-modulens preferanselager til preferansesiden, kan du implementere logikken for henting og lagring av preferansene.
Preferansesider initialiserer verdiene for kontrollene ved hjelp av preferanseinnstillingene fra preferanselageret. Denne prosessen likner på initialisering av kontrollverdier i dialogboksen, fra dialogboksinnstillingene. ReadmePreferencePage initialiserer alle kontrollene i enkeltmetoden initializeValues, som kalles fra createContents-metoden.
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)); ... }
Når knappen OK (eller Bruk) er valgt, skal de gjeldende verdiene i kontrollene på preferansesiden lagres tilbake til preferanselageret. ReadmePreferencePage implementerer denne logikken i den separate metoden 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()); ... }
Når brukeren velger standardknappen, gjenoppretter plattformen alle verdier for preferanselager til standardverdiene som er angitt i plugin-klassen. Preferansesiden reflekterer imidlertid disse standardverdiene i kontrollene på preferansesiden. ReadmePreferencePage implementerer dette i 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)); ... }