設定ページの実装

ページの定義

JFace プラグインは、ウィザード、設定ページ、およびダイアログを実装するフレームワークを提供します。 これらのダイアログの実装は、共通パターンに従います。 ページまたはダイアログの内容は、ページ内容を表す 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);
}

このメソッドの大部分のコードは、コントロールの作成およびレイアウトに関連しています。 このためここではこれらを解説しません。  下の図は対応するページがどのように表示されるかを示しています。

README ツールの設定ページ

この他の設定ページの基本的な機能は、performOk メッセージに対応することです。このメソッドは通常、 ユーザー設定の更新および保管を行い、必要であれば、他のプラグイン・オブジェクトを更新して設定の変更を反映します。 performDefaults メソッドは、ユーザーが「デフォルトの復元」ボタンを押したときに、設定をデフォルト状態に戻すために使用されます。   

ユーザーが「適用」を押したときに処理をいくつか行いたい場合、performApply をオーバーライドすることができます。 デフォルトの実装は、performOk を呼び出すことです。    

設定ページは、設定ストアを戻してその値を保管するために、doGetPreferenceStore() メソッドをオーバーライドする必要があります。

プラグイン設定ストア

設定ストアは、プラグイン・クラス内の設定値をアクセスし、保管する上で役立つメカニズムです。 設定ストアは、ランタイム設定サービスを使用して実際に保管されている設定に、プラグイン・レベルでアクセスできるようにします。 AbstractUIPlugin により、プラグインの存続期間を通じて保守される、プラグインの広範囲の設定ストアが定義されます。 ユーザー・プラグインは、この設定ストアにエントリーを追加して、ユーザーがユーザー設定ページの設定を変更すると、値を更新できます。 設定ストアは、プラットフォーム設定サービスを使用するため、適切なスコープおよびロケーションで設定値を保管し、適切なメカニズムを使用して設定ストアを初期化します。

ReadmePreferencePage の以下のコードは、ReadmePlugin の設定ストアを取得します。

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

ReadmePluginAbstractUIPlugin クラスを拡張するため、設定ストアを自動的に継承します。 この設定ストアは、プラットフォーム設定サービスを使用して初期化されます。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));
      ...
   }