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.gif"> <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 は、親カテゴリーの下にあるグループの次の層に使用されるラベルを定義します。 これらのカテゴリーは、「新規サンプル」ウィザードの左側に表示されています。 ウィザードの 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); ... }
「標準ウィジェット・ツールキット」の概念を理解していると、 このコードをたどることができます。
ページのインプリメントのための基本パターンには、以下のものがあります。
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(); }
完成したウィザードは、次のようになります。