org.eclipse.ui.newWizards 拡張ポイントを使用すると、ウィザードをワークベンチの 「ファイル」>「新規」 メニュー・オプションに追加することができます。 readme ツールの例では、この拡張ポイント定義を使用して、次のように Readme File ウィザードを追加します。
<extension
point = "org.eclipse.ui.newWizards">
<category
id = "org.eclipse.ui.examples.readmetool.new"
parentCategory="org.eclipse.ui.Examples"
name="%NewWizard.category">
</category>
<wizard
id = "org.eclipse.ui.examples.readmetool.wizards.new.file"
name = "%NewWizard.name"
class="org.eclipse.ui.examples.readmetool.ReadmeCreationWizard"
category="org.eclipse.ui.Examples/org.eclipse.ui.examples.readmetool.new"
icon="icons/obj16/newreadme_wiz.png">
<description>%NewWizard.desc</description>
<selection class="org.eclipse.core.resources.IResource"/>
</wizard>
</extension>
category は、ウィザードのグループを記述します。 オプションの parentCategory は、既存のカテゴリーの子として新しいカテゴリーを確立します。
トップレベルのカテゴリーは、「ファイル」>「新規」メニューに表示されます。 この例では、parentCategory が "Examples" カテゴリーに設定されています。 親カテゴリーはどこから生成されるのでしょうか? org.eclipse.ui プラグインが、そのマークアップで標準サンプル・カテゴリーを定義しています。
<extension
point="org.eclipse.ui.newWizards">
<category
name="%NewWizards.Category.Examples"
id="org.eclipse.ui.Examples">
</category>
...
このカテゴリーは「ファイル」>「新規」メニューに表示されます。

readme ツールのカテゴリー name は、親カテゴリーの下にあるグループの次の層に使用されるラベルを定義します。 これらのカテゴリーは、「新規サンプル」ウィザードのツリーの第 2 レベルに表示されます。 ウィザードの name および icon は、カテゴリーを展開したときに下に表示されます。 選択したウィザードの description は、選択したときにウィザードの上部に表示されます。

このウィザードに関する情報は、plugin.xml ファイルのマークアップのために、単独で表示されます。 ユーザーが「次へ」ボタンをクリックするまで、実行されるプラグイン・コードはありません。 このボタンが押されると、ワークベンチは、マークアップで指定されている wizard の class のインスタンスを生成し、 それを期待される selection の class に渡します。
この拡張で識別されるクラス (ReadmeCreationWizard) は、 INewWizard インターフェースを インプリメントしなければなりません。 ほとんどのウィザードは、プラットフォームの Wizard クラスを拡張することによって これをインプリメントしています。ただし、これは実装のメカニズムであって、 拡張ポイントがこれを要求しているわけではありません。
ウィザード自体は、内部にページを作成すること以外ほとんど何も行いません。 最初に、ページの実装について説明します。次に、このウィザードに戻ります。
ワークベンチは、ウィザード拡張ポイントごとに実行される処理のタイプをサポートする、 基本ウィザード・ページ・クラスを提供しています。 これらのページを使用するか、拡張して、処理を追加することができます。
ReadmeCreationWizard の目標は、新規のファイルを作成し、必要な内容をファイルに追加し、 オプションとして、そのファイルに対してエディターを開くことです。 このページでは、ファイルに追加する内容と、 エディターを起動する必要があるのかどうかをユーザーに指定させるコントロールを定義する必要があります。
ここでは、WizardNewFileCreationPage を拡張することにより、ウィザード・ページ ReadmeCreationPage を作成します。 ウィザード・ページのコントロールは、ビューまたはエディターのコントロールの定義に似た方法で定義されます。 このページは createControl メソッドを実装し、 提供されている Composite の子として、 必要な SWT ウィジェットを作成します。 スーパークラスは、新規ファイルの処理をサポートするウィジェットをすでに追加しているので、 必要なことは、このウィザード・ページの createControl メソッドを拡張し、 セクションの生成とエディターのオープンを制御するチェック・ボックスを追加することだけです。
public void createControl(Composite parent) {
// inherit default container and name specification widgets
super.createControl(parent);
Composite composite = (Composite)getControl();
...
// sample section generation group
Group group = new Group(composite,SWT.NONE);
group.setLayout(new GridLayout());
group.setText(MessageUtil.getString("Automatic_sample_section_generation"));
group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL |
GridData.HORIZONTAL_ALIGN_FILL));
...
// sample section generation checkboxes
sectionCheckbox = new Button(group,SWT.CHECK);
sectionCheckbox.setText(MessageUtil.getString("Generate_sample_section_titles"));
sectionCheckbox.setSelection(true);
sectionCheckbox.addListener(SWT.Selection,this);
subsectionCheckbox = new Button(group,SWT.CHECK);
subsectionCheckbox.setText(MessageUtil.getString("Generate_sample_subsection_titles"));
subsectionCheckbox.setSelection(true);
subsectionCheckbox.addListener(SWT.Selection,this);
...
// open file for editing checkbox
openFileCheckbox = new Button(composite,SWT.CHECK);
openFileCheckbox.setText(MessageUtil.getString("Open_file_for_editing_when_done"));
openFileCheckbox.setSelection(true);
...
}
「Standard Widget Toolkit」の概念を理解していると、 このコードをたどることができます。
ページのインプリメントのための基本パターンには、以下のものがあります。
ReadmeCreationPage クラスは、この振る舞いの多くを WizardNewFileCreationPage から 継承しています。 これらのクラスのインプリメンテーションをブラウズし、さらに情報がないか調べてください。
ページの実行内容を理解したところで、もう一度ウィザードを見てみましょう。
ウィザードは、ページを作成し、「終了」のロジックを提供します。
ウィザードのインプリメントのための基本パターンには、以下のものがあります。
public void init(IWorkbench workbench,IStructuredSelection selection) {
this.workbench = workbench;
this.selection = selection;
setWindowTitle(MessageUtil.getString("New_Readme_File"));
setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}
public void addPages() {
mainPage = new ReadmeCreationPage(workbench, selection);
addPage(mainPage);
}
public boolean performFinish() {
return mainPage.finish();
}
完成したウィザードは、次のようになります。
