設定ページのインプリメントはウィザードのページ作成に似ています。設定ページはページ内容を表す SWT コントロールを作成し、 すべての関連するイベントに対するリスナーを追加する createContents メソッドを提供します。 このページは、ページ内のすべてのコントロールの親となるコンポジットの作成および戻しを実行します。 以下の断片的な例は関連する部分を示しています。
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); }
このメソッドの大部分のコードは、コントロールの作成およびレイアウトに関連しています。 このためここではこれらを解説しません。 下の図は対応するページがどのように表示されるかを示しています。
この他の設定ページの基本的な機能は、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」(または「適用 (Apply)」) ボタンが押されると、 設定ページのコントロールの現行値は、設定ストアに保管し戻される必要があります。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)); ... }