org.eclipse.ui.newWizards

可以使用 org.eclipse.ui.newWizards 扩展点来将向导添加到工作台中的文件 -> 新建菜单选项中。自述文件工具示例使用此扩展点定义来添加“自述文件”向导:

<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)描述当使用向导选择对话框来查找和启动向导时,要将向导分组到何处。类别名称(name)(“示例创建向导”)定义在向导中所使用的标号。向导本身也被分配给类别。 它的名称(name)、图标(icon)和描述(description)全部都显示在下面的新建向导选择对话框中。

所有这些都是根据 plugin.xml 文件中的标记显示的。在用户选择下一步按钮之前,任何插件代码都不会运行。一旦按了此按钮,工作台就将实例化在标记中指定的向导, 并将它作为期望的选择来传送。

在此扩展中标识的类(ReadmeCreationWizard)必须实现 INewWizard 接口。尽管这是一种实现机制,并且并不是扩展点所必需的,但是, 大多数向导还是通过扩展平台向导类来执行该操作。

向导本身很少执行操作,只是在其中创建页面。让我们首先考察页面的实现,然后再返回到该向导。

页面

工作台提供了基本向导页面类,它们支持对每个向导扩展点执行的处理类型。可以使用这些页面,或者扩展它们以添加附加处理。

ReadmeCreationWizard 的目的是创建新文件、 向文件中添加必需的内容以及在文件上打开编辑器(可选)。页面需要定义一些控件来让用户指定文件中应包含哪些内容,以及是否应该启动编辑器。

通过扩展 WizardNewFileCreationPage 来创建向导页面 CreateReadmePage1。向导页面的控件的定义类似于视图或编辑器的控件的定义。该页面实现 createControl 方法, 创建必需的 SWT 小窗口来作为提供的组合体的子代。由于超类已经添加了支持新文件处理的小窗口, 因此只需要扩展向导页面中的 createControl 方法, 就可以添加用来控制生成小节和打开编辑器的附加复选框。

public void createControl(Composite parent) {
    // 继承缺省容器和命名规范小窗口
    super.createControl(parent);
    Composite composite = (Composite)getControl();
    ...
    // 样本小节生成组
    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));
    ...
    // 样本小节生成复选框
    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);
    ...
    // 打开文件以进行编辑复选框
    openFileCheckbox = new Button(composite,SWT.CHECK);
    openFileCheckbox.setText("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("New Readme File");
    setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}

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

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

完成的向导应为如下所示: