您可以使用 org.eclipse.ui.newWizards 延伸點,新增一個精靈到工作台中的檔案 > 新建 >功能表選項。 Readme 工具範例使用這個延伸點定義來新增「README 檔」精靈:
<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> ...
這個種類將出現在檔案 > 新建功能表中。
readme 工具的種類 name 定義用於在母項種類之下進行下一層分組的標籤。 這些種類在新建範例精靈中的樹狀結構顯示為第二層。當您展開種類時,精靈的名稱和圖示會出現在下方。 當您選取精靈時,所選精靈的說明會顯示在精靈的頂端。
因為 plugin.xml 檔中的標記,所以僅出現精靈的相關資訊。直到使用者選擇了下一步按鈕之後,才會執行外掛程式碼。 一旦發生這種情況, 工作台會建立在標記中指定的精靈類別的實例,並傳遞一個預期的選項類別給它。
在這個延伸 (ReadmeCreationWizard) 中識別的類別必須實作 INewWizard 介面。大部分精靈透過延伸平台 Wizard 類別來實作該介面,不過這是實作機制,延伸點並不需要它。
精靈本身不做什麼,但會在內部建立頁面。 首先我們來瞭解一下頁面的實作,然後再回到精靈。
工作台提供基礎精靈頁面類別,這些類別支援為每一個精靈延伸點執行的處理類型。 您可以使用這些頁面或延伸它們以新增其他處理。
ReadmeCreationWizard 的目標是建立新檔案,新增必要的內容到檔案,還有 對檔案開啟編輯器(這是一個選項)。 頁面需要定義控制項,好讓使用者指定檔案的內容以及是否要啟動編輯 器。
我們延伸 WizardNewFileCreationPage 來建立精靈頁面 ReadmeCreationPage。 以類似視圖或編輯器的控制項定義的方法定義精靈頁面的控制項。 頁面實作 createControl 方法,建立必要的 SWT 小組件作為已提供的 Composite 的子項。 因為 Super 類別已新增那些支援新檔案處理的小組件,所以只需要在精靈頁面延伸 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(MessageUtil.getString("Automatic_sample_section_generation")); group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); ... // 範例區段產生之勾選框 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); ... // 開啟檔案來編輯之勾選框 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(); }
完成的精靈外觀如下: