org.eclipse.ui.newWizards

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

<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>
    ...

此类别出现在文件 > 新建菜单中。

具有 Examples 类别的“新建”菜单

 

自述文件工具的名称类别定义用于父类别下面的下一层分组的标签。这些类别在新建示例向导中显示的树中显示为第二层。当您展开该类别时,向导的名称图标显示在下面。当您选择向导时,所选向导的描述显示在向导的顶部。

具有自述文件条目的新建示例向导

只是由于 plugin.xml 文件中的标记才会出现有关向导的此信息。在用户选择下一步按钮之前,任何插件代码都不会运行。一旦按了此按钮,工作台就将实例化在标记中指定的向导,并将它作为期望的选择来传送。

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

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

页面

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

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

通过扩展 WizardNewFileCreationPage 来创建向导页 ReadmeCreationPage。用于向导页面的控件的定义类似于用于视图或编辑器的控件的定义。该页面实现 createControl 方法,创建必需的 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 中继承了许多这种行为。浏览这些类的实现以获取进一步的信息。

既然已经了解了页面所执行的任务,让我们再了解一下向导。

向导

向导负责创建页面和提供“完成”逻辑。

实现向导的基本模式包括:

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

创建自述文件向导页面