您可以使用 org.eclipse.ui.newWizards 延伸點,新增一個精靈到工作台中的檔案->新建功能表選項。 Readme 工具範例使用這個延伸點定義來新增「README 檔」精靈:
<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>
種類說明使用精靈選項對話框尋找和啟動精靈時將精靈分類的地方。 種類 name("範例建立精靈")定義在精靈中使用的標籤。 精靈才身會指定給此種類。 它的名稱、圖示 和說明都顯示在下面的新精靈選項對話框。
所有這一切依據 plugin.xml 檔案中的標示而顯示。 要等到使用者選 取下一步按鈕之後才會執行外掛程式。 執行外掛程式之後,工作台會建立 在標示中指定的精靈類別的實例,並傳遞一個預期的選項類別給它。
在這個延伸 (ReadmeCreationWizard) 中識別的類別必須實作 INewWizard 介面。 大部份精靈透過延伸平台 Wizard 類別來實作該介面,不過這是實作機制,延伸點並不需要它。
精靈本身不做什麼,但會在內部建立頁面。 首先我們來了解一下頁面的實作,然後再回到精靈。
工作台提供基本精靈頁面類別,這些類別支援為每一個精靈延伸點執行的處理類型。 您可以使用這些頁面或延伸它們以新增其他處理。
ReadmeCreationWizard 的目標是建立新檔案,新增必要的內容到檔案,還有 對檔案開啟編輯器(這是一個選項)。 頁面需要定義控制項,好讓使用者指定檔案的內容以及是否要啟動編輯 器。
我們延伸WizardNewFileCreationPage 來建立精靈頁面 CreateReadmePage1。 以類似檢視畫面或編輯器的控制項定義的方法定義精靈頁面的控制項。 頁面實作 createControl 方法,建立必要的 SWT 小組件作為已提供的 Composite 的子項。 因為超類別已新增那些支援新檔案處理的小組件,所以只需要在精靈頁面延伸 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);
...
}
如果您瞭解 Standard Widget Toolkit 中的 概念,您應該看得懂這個程式碼。
實作頁面的基本型樣包括:
新增接聽器到影響頁面的動態操作方式的控制項。 例如,如果從清單選取項目或勾選某勾選框會影響頁面其他控制項的狀態,請新 增一個接聽器,使您可以變更頁面的狀態。
啟動精靈之後依據現行選項將資料移入控制項。部份資料可能依據其他控制項中的值 而定。 部份控制項可使用對話框設定來起始設定它們的值。
使用者提供足夠資訊時請使用 setPageComplete(true) 結束頁面(而且移 到下一頁或完成精靈。)
ReadmeCreationPage 類別從 WizardNewFileCreationPage 繼承許多這種操作方式。 瀏覽這些類別的實作以取得進一步資訊。
現在我們瞭解頁面的用途之後,再看一次精靈。
精靈負責建立頁面並提供"完成"邏輯。
實作精靈的基本型樣包括:
實作 init 方法來設定環境資訊的區域變數,例如工作台和現行選項。
public void init(IWorkbench workbench,IStructuredSelection selection) {
this.workbench = workbench;
this.selection = selection;
setWindowTitle("New Readme File");
setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}
建立頁面的實例來實作 addPages。
public void addPages() {
mainPage = new ReadmeCreationPage(workbench, selection);
addPage(mainPage);
}
實作 performFinish 完成作業。
多頁精靈通常處理精靈本身內的完成邏輯,因為每一個頁面提供的資訊會決定 作業的實作方式。 單一頁面精靈可以實作精靈中的邏輯或要求頁面完成工作。 您採取的方法大多依據保持重要狀態的地方而定。 以 Readme 精靈而言, 我們會要求頁面負責完成處理。
public boolean performFinish() {
return mainPage.finish();
}
完成的精靈外觀如下: