EclipseにはPreferenceという概念があります。
わかりやすく言えば、Eclipseの設定(オプション)とでも言いましょうか。
もう少し詳細に言うと、Preferenceは「ワークスペース単位」の設定と言えます。
Eclipseでは、ファイル/フォルダ/プロジェクト等様々な単位で設定を行えますが
その最も大きな単位がワークスペースということになります。
まぁほとんどの人はワークスペースを切り替えたりはしないでしょうから
Eclipse全体の設定と思ってもらえばいいと思います。
独自のPreferenceを追加するには、plugin.xmlにextensionを追加します。
<extension
point="org.eclipse.ui.preferencePages">
<page
name="SamplePreference"
class="sample.SamplePreferencePage"
id="sample.SamplePreferencePage">
</page>
</extension>
このように、org.eclipse.ui.preferencePages のextensionを使います。
複数のPreferenceを追加したい場合は、page要素を複数記述することになります。
実際にPreferenceツリーに表示される名称です。
Preferenceページを実装したJavaクラス名を指定します。
Preferenceページ固有のIDを指定します。classと同じ値にしておけば間違いは無いです。
実装クラスは、org.eclipse.jface.preference.PreferencePage の派生クラスにする必要があります。
ここでは、いくつかの実装を持った FieldEditorPreferencePage クラスから派生させることにします。
PreferencePage > FieldEditorPreferencePage > MyPreferencePage という派生構成になります。
コンストラクタ内で、レイアウトとストアの定義をします。
public MyPreferencePage() {
super(GRID);
setPreferenceStore(MyPlugin.getDefault().getPreferenceStore());
}
さて、ここで突然「ストア」という単語が出てきましたが
これは簡単に言えば「設定内容を格納する場所」ということです。
このように、MyPlugin から取得できます。
レイアウトの GRID は、FieldEditorPreferencePage で定義されています。
フラットレイアウトにしたい場合は FLAT を使用します。
Preferenceページのレイアウトは createContents() メソッドで行います。
ここでは、2つの設定項目を持つ簡単なレイアウトを作成してみます。
@Override
protected Control createContents(Composite parent) {
Composite comp = new Composite(parent, SWT.NULL);
comp.setLayout(new GridLayout());
StringFieldEditor stringField = new StringFieldEditor(
"keySampleText",
"Sample Text : ", comp);
addField(stringField);
BooleanFieldEditor booleanField = new BooleanFieldEditor(
"keySampleCheck",
"Sample Check", comp);
addField(booleanField);
initialize();
return comp;
}
フィールドを作成して addField() を呼び出し、最後に initialize() を呼び出します。
ここらへんは全て FieldEditorPreferencePage が実装しています。
StringFieldEditor は文字列用の設定項目、
BooleanFieldEditor はチェックボックス用の設定項目に使います。
他にも FieldEditor の派生クラスがいくつか用意されていますので
これらを使うことが出来ます。
FieldEditor のコンストラクタに渡す値は、先頭から
「Preference用キー」「画面表示用文言」「SWTの親コンポーネント」となります。
Preference用キーはストア内でユニークである必要があります。
定数化しておいた方が良いでしょう。
実際の表示内容はこんな感じになります。
設定にデフォルト値を持たせたい場合は、以下のようにします。
public MyPreferencePage() {
super(GRID);
setPreferenceStore(MyPlugin.getDefault().getPreferenceStore());
initializeDefaults();
}
private void initializeDefaults() {
IPreferenceStore store = getPreferenceStore();
store.setDefault("keySampleText", "default value");
store.setDefault("keySampleCheck", true);
}
このように、コンストラクタ内に処理を追加します。
setDefaultの第1引数には「Preference用キー」を、第2引数にはデフォルト値を指定します。