org.eclipse.ui.newWizards

org.eclipse.ui.newWizards 拡張ポイントを 使用すると、ウィザードをワークベンチの 「ファイル (File)」->「新規作成 (New)」メニュー・オプションに追加することができます。 readme ツールの例では、この拡張ポイント定義を使用して、次のように Readme File ウィザードを追加します。

<extension
    point = "org.eclipse.ui.newWizards">
    <category
        id = "org.eclipse.ui.examples.readmetool.new"
        name="Example Creation Wizards">
    </category>
    <wizard
        id = "org.eclipse.ui.examples.readmetool.wizards.new.file"
        name = "Readme File"
        class="org.eclipse.ui.examples.readmetool.ReadmeCreationWizard"
        category="org.eclipse.ui.examples.readmetool.new"
        icon="icons/basic/obj16/newreadme_wiz.gif">
        <description>An example of a wizard that creates sample Readme file
        </description>
        <selection class="org.eclipse.core.resources.IResource"/>
    </wizard>
</extension>

category は、ウィザード選択ダイアログを使用してウィザードを探し出し、 それを起動したときに、ウィザードをグループ化する場所を記述します。 category の name ("Example Creation Wizards") は、このウィザードで使用されるラベルを定義します。  このウィザード自体は、その category に割り当てられています。   nameicon、および description はすべて、以下に示す新規作成ウィザードの選択ダイアログに表示されます。

これはすべて、plugin.xml ファイルのマークアップに基づいて表示されます。  ユーザーが「次へ (Next)」ボタンを押すまでは、プラグイン・コードのどの部分も実行されません。  このボタンが押されると、ワークベンチは、マークアップで指定されている wizard の class のインスタンスを生成し、 それを期待される selection の class に渡します。

この拡張で識別されるクラス (ReadmeCreationWizard) は、 INewWizard インターフェースを インプリメントしなければなりません。  ほとんどのウィザードは、プラットフォームの Wizard クラスを拡張することによって これをインプリメントしています。ただし、これはインプリメンテーションのメカニズムであって、 拡張ポイントがこれを要求しているわけではありません。

ウィザード自体は、内部にページを作成すること以外ほとんど何も行いません。 最初に、ページのインプリメンテーションについて説明します。次に、このウィザードに戻ります。

ページ

ワークベンチは、ウィザードの拡張ポイントごとに実行される処理のタイプをサポートする、 基本ウィザード・ページ・クラスを提供しています。 これらのページを使用するか、拡張して、処理を追加することができます。

ReadmeCreationWizard の目標は、新規のファイルを作成し、必要な内容をファイルに追加し、 オプションとして、そのファイルに対してエディターを開くことです。 このページでは、ファイルに追加する内容と、 エディターを起動する必要があるのかどうかをユーザーに指定させるコントロールを定義する必要があります。

ここでは、WizardNewFileCreationPage を 拡張することにより、ウィザード・ページ CreateReadmePage1 を作成します。 ウィザード・ページのコントロールは、ビューまたはエディターのコントロールの定義に似た方法で定義されます。 このページは 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("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("Generate sample section titles");
    sectionCheckbox.setSelection(true);
    sectionCheckbox.addListener(SWT.Selection,this);

    subsectionCheckbox = new Button(group,SWT.CHECK);
    subsectionCheckbox.setText("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("Open file for editing when done");
    openFileCheckbox.setSelection(true);
    ...
}

標準ウィジェット・ツールキット」の概念を理解していると、 このコードをたどることができます。

ページのインプリメントのための基本パターンには、以下のものがあります。

ReadmeCreationPage クラスは、この振る舞いの多くを WizardNewFileCreationPage から 継承しています。  これらのクラスのインプリメンテーションをブラウズし、さらに情報がないか調べてください。

ページの実行内容を理解したところで、もう一度ウィザードを見てみましょう。

ウィザード

ウィザードは、ページを作成し、「終了 (Finish)」のロジックを提供します。

ウィザードのインプリメントのための基本パターンには、以下のものがあります。

public void init(IWorkbench workbench,IStructuredSelection selection) {
    this.workbench = workbench;
    this.selection = selection;
    setWindowTitle("New Readme File");
    setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}

public void addPages() {
    mainPage = new ReadmeCreationPage(workbench, selection);
    addPage(mainPage);
}

public boolean performFinish() {
    return mainPage.finish();
}

完成したウィザードは、次のようになります。