Υλοποίηση σελίδας προτιμήσεων

Ορισμός της σελίδας

Η πρόσθετη λειτουργία JFace παρέχει ένα πλαίσιο για την υλοποίηση οδηγών, σελίδων προτιμήσεων και πλαισίων διαλόγων. Η υλοποίηση για αυτά τα πλαίσια διαλόγου ακολουθεί ένα κοινό μοτίβο. Τα περιεχόμενα μιας σελίδας ή ενός πλαισίου διαλόγου ορίζονται με την υλοποίηση της μεθόδου createContents που δημιουργεί τα στοιχεία ελέγχου SWT τα οποία αντιπροσωπεύουν το περιεχόμενο της σελίδας. Η μέθοδος αυτή θα πρέπει να προσθέσει επίσης λειτουργίες ακρόασης για οποιαδήποτε ενδιαφέροντα συμβάντα. Η σελίδα ευθύνεται για τη δημιουργία και την επιστροφή του σύνθετου στοιχείου που θα αποτελέσει το γονικό στοιχείο για όλα τα στοιχεία ελέγχου στη σελίδα. Το ακόλουθο τμήμα κώδικα παρουσιάζει τις επισημάνσεις:

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);
}

Το μεγαλύτερο μέρος του κώδικα σε αυτή τη μέθοδο αφορά τη δημιουργία και τη διάταξη των στοιχείων ελέγχου, γι' αυτό δεν θα το αναλύσουμε εδώ.  Ακολουθεί η εμφάνιση της αντίστοιχης σελίδας:

Σελίδα προτιμήσεων εργαλείου διαχείρισης αρχείων readme

Η άλλη κύρια ευθύνη μιας σελίδας προτιμήσεων είναι να αντιδρά στο μήνυμα performOk. Συνήθως, η μέθοδος αυτή ενημερώνει και αποθηκεύει τις προτιμήσεις χρήστη και, αν χρειάζεται, ενημερώνει όλα τα άλλα πρόσθετα αντικείμενα ώστε να αντικατοπτρίζουν την αλλαγή στις προτιμήσεις. Η μέθοδος performDefaults χρησιμοποιείται για την επαναφορά προτιμήσεων στην προεπιλεγμένη κατάσταση όταν ο χρήστης πατά το κουμπί Επαναφορά προεπιλογών.  

Μπορείτε να αντικαταστήσετε το μήνυμα performApply αν χρειάζεται πρόσθετη επεξεργασία όταν ο χρήστης επιλέγει Εφαρμογή.  Η προεπιλεγμένη υλοποίηση είναι να γίνει κλήση του performOk.  

Οι σελίδες προτιμήσεων θα πρέπει να αντικαταστήσουν τη μέθοδο doGetPreferenceStore() ώστε να επιστραφεί ένας χώρος αποθήκευσης προτιμήσεων για την αποθήκευση των τιμών τους.

Χώρος αποθήκευσης προτιμήσεων πρόσθετων λειτουργιών

Οι χώροι αποθήκευσης προτιμήσεων αποτελούν έναν εύχρηστο μηχανισμό για την πρόσβαση στις τιμές προτιμήσεων και την αποθήκευσή τους σε μια κλάση πρόσθετης λειτουργίας. Παρέχουν πρόσβαση επίπέδου πρόσθετων λειτουργιών σε προτιμήσεις που στην πραγματικότητα αποθηκεύονται χρησιμοποιώντας την υπηρεσία προτιμήσεων χρόνου εκτέλεσης. Η κλάση AbstractUIPlugin ορίζει έναν χώρο αποθήκευσης προτιμήσεων για όλες τις πρόσθετες λειτουργίες. Η πρόσθετη λειτουργία σας μπορεί να προσθέσει καταχωρήσεις σε αυτό το χώρο αποθήκευσης προτιμήσεων και να ενημερώσει τις τιμές καθώς ο χρήστης αλλάζει τις ρυθμίσεις στη σελίδα προτιμήσεων. Εφόσον οι χώροι αποθήκευσης προτιμήσεων χρησιμοποιούν την υπηρεσία προτιμήσεων πλατφόρμας, θα φροντίσουν να αποθηκεύσουν τις τιμές προτιμήσεων στην κατάλληλη εμβέλεια και θέση και να αποδόσουν αρχικές τιμές στο χώρο αποθήκευσης προτιμήσεων με χρήση των κατάλληλων μηχανισμών.

Ο ακόλουθος κώδικας της κλάσης ReadmePreferencePage λαμβάνει τον χώρο αποθήκευσης για την κλάση ReadmePlugin.

   protected IPreferenceStore doGetPreferenceStore() {
      return ReadmePlugin.getDefault().getPreferenceStore();
   }

Επειδή η κλάση ReadmePlugin επεκτείνει την κλάση AbstractUIPlugin, μεταβιβάζεται σε αυτή αυτόματα ένας χώρος αποθήκευσης προτιμήσεων. Αυτός ο χώρος αποθήκευσης παίρνει αρχικές τιμές μέσω της υπηρεσίας προτιμήσεων πλατφόρμας. Το μόνο που χρειάζεται να κάνει η κλάση ReadmePlugin είναι να υλοποιήσει μια μέθοδο που θα αποδίδει ως αρχικές τιμές για τα στοιχεία ελέγχου προτιμήσεων τις προεπιλεγμένες τιμές. Αυτές οι τιμές χρησιμοποιούνται την πρώτη φορά που εμφανίζεται η σελίδα προτιμήσεων ή όταν ο χρήστης πατήσει το κουμπί Προεπιλογές στη σελίδα προτιμήσεων.

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$
}
Σημείωση:  Αν δεν έχουν αποθηκευθεί κάπου προτιμήσεις για πρόσθετη λειτουργία, τότε η πρόσθετη λειτουργία θα λάβει έναν κενο χώρο αποθήκευσης προτιμήσεων.

Ανάκτηση και αποθήκευση προτιμήσεων

Αφού συσχετίσετε τον χώρο αποθήκευσης προτιμήσεων της προσθετης λειτουργίας με τη σελίδα προτιμήσεων, μπορείτε να υλοποιήσετε τη λογική για την ανάκτηση και αποθήκευση των προτιμήσεων.

Οι σελίδες προτιμήσεων ευθύνονται για την απόδοση αρχικών τιμών των στοιχείων ελέγχου με χρήση των ρυθμίσεων προτιμήσεων από τον χώρο αποθήκευσης προτιμήσεων. Η διεργασία αυτή μοιάζει με την απόδοση αρχικών τιμών για στοιχεία ελέγχου πλαισίων διαλόγων από ρυθμίσεις των πλαισίων διαλόγων. Η κλάση ReadmePreferencePage αποδίδει αρχικές τιμές σε όλα τα στοιχεία ελέγχου της με την απλή μέθοδο initializeValues, η οποία καλείται από την μέθοδο 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));
	...
}

Όταν είναι πατημένα τα κουμπιά OKΕφαρμογή) , οι τρέχουσες τιμές των στοιχείων ελέγχου στη σελίδα προτιμήσεων θα πρέπει να αποθηκευτούν ξανά στο χώρο αποθήκευσης προτιμήσεων. Η κλάση ReadmePreferencePage υλοποιεί αυτή τη λογική με μια ξεχωριστή μέθοδο, 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());
	...
}

Όταν ο χρήστης πατά το κουμπί Προεπιλογές, η πλατφόρμα επαναφέρει όλες τις τιμές του χώρου αποθήκευσης προτιμήσεων στις προεπιλεγμένες τιμές που ορίζονται στην κλάση πρόσθετων λειτουργιών. Ωστόσο, η σελίδα προτιμήσεων ευθύνεται για την έκφραση αυτών των προεπιλεγμένων τιμών στα στοιχεία ελέγχου της σελίδας. Η κλάση ReadmePreferencePage υλοποιεί αυτή την εφαρμογή με τη μέθοδο 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));
      ...
   }