可以使用 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> ...
此类别出现在文件 > 新建菜单中。
自述文件工具的名称类别定义用于父类别下面的下一层分组的标签。这些类别在新建示例向导中显示的树中显示为第二层。当您展开该类别时,向导的名称和图标显示在下面。当您选择向导时,所选向导的描述显示在向导的顶部。
只是由于 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 中继承了许多这种行为。浏览这些类的实现以获取进一步的信息。
既然已经了解了页面所执行的任务,让我们再了解一下向导。
向导负责创建页面和提供“完成”逻辑。
实现向导的基本模式包括:
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(); }
完成的向导应为如下所示: