Do voleb nabídky Soubor > Nový > v pracovní ploše můžete přidat průvodce pomocí bodu rozšíření org.eclipse.ui.newWizards. Příklad nástroje README používá definici tohoto bodu rozšíření k přidání Průvodce souborem 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>
Značka category popisuje seskupení pro průvodce. Volitelný atribut parentCategory vytvoří novou kategorii jako podřízený prvek stávající kategorie.
Kategorie nejvyšší úrovně se zobrazí v nabídce Soubor > Nový. V tomto příkladu je kategorie parentCategory nastavena na kategorii "Examples". Kde se tato nadřazená kategorie vzala? Modul plug-in org.eclipse.ui definuje standardní kategorii příkladů ve svém markupu:
<extension point="org.eclipse.ui.newWizards"> <category name="%NewWizards.Category.Examples" id="org.eclipse.ui.Examples"> </category> ...
Tato kategorie se zobrazí v nabídce Soubor > Nový.
Název kategorie nástroje README (name) definuje štítek, který se použije pro další vrstvu seskupení pod nadřazenou kategorií. Tyto kategorie se zobrazují jako druhá úroveň stromu zobrazeného v průvodci Nový příklad. Název (name) a ikona (icon) se zobrazí pod kategorií, když ji rozbalíte. Popis (description) zvoleného průvodce se zobrazí v horní části průvodce, když jej vyberete.
Tyto informace o průvodci se zobrazují výhradně díky markupu v souboru plugin.xml. Dokud uživatel nezvolí tlačítko Další, nespustí se žádná část kódu modulu plug-in. Jakmile se tak stane, pracovní plocha vytvoří instanci třídy průvodce (class) uvedené v markupu a předá jí očekávanou třídu výběru (class).
Třída označená v tomto rozšíření (ReadmeCreationWizard) musí implementovat rozhraní INewWizard. Většina průvodců tak činí rozšířením třídy Wizard platformy, ačkoliv toto je implementační mechanizmus a není bodem rozšíření požadován.
Samotný průvodce víceméně jen vytvoří stránky uvnitř sebe. Podívejme se nejprve na implementaci stránky a poté se vraťme k průvodci.
Pracovní plocha poskytuje základní třídy stránek průvodců, které podporují typy zpracování prováděné pro každý bod rozšíření pro průvodce. Můžete tyto stránky použít, nebo je rozšířit, chcete-li přidat další zpracování.
Cílem třídy ReadmeCreationWizard je vytvoření nového souboru, přidání požadovaného obsahu do souboru a volitelně otevření souboru v editoru. Naše stránka musí definovat obslužné prvky, které umožní uživateli zadat, jaký obsah patří do souboru a zda se má spustit editor.
Stránku ReadmeCreationPage průvodce vytvoříme rozšířením třídy WizardNewFileCreationPage. Obslužné prvky pro stránku průvodce jsou definovány způsobem podobným definici obslužných prvků pro pohled nebo editor. Stránka implementuje metodu createControl, která vytvoří potřebné prvky SWT jako podřízené prvky poskytnuté třídy Composite. Protože supertřída již přidá prvky, které podporují zpracování nového souboru, musíme na stránce našeho průvodce pouze rozšířit metodu createControl, abychom přidali další zaškrtávací políčka, která budou řídit generování oddílů a otevření editoru.
public void createControl(Composite parent) { // zdědění výchozího kontejneru a prvků pro určení názvu super.createControl(parent); Composite composite = (Composite)getControl(); ... // skupina pro generování ukázkových oddílů Group group = new Group(composite,SWT.NONE); group.setLayout(new GridLayout()); group.setText(MessageUtil.getString("Automatické_generování_ukázkových_oddílů")); group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); ... // zaškrtávací políčka pro generování ukázkových oddílů sectionCheckbox = new Button(group,SWT.CHECK); sectionCheckbox.setText(MessageUtil.getString("Generovat_ukázkové_titulky_oddílů")); sectionCheckbox.setSelection(true); sectionCheckbox.addListener(SWT.Selection,this); subsectionCheckbox = new Button(group,SWT.CHECK); subsectionCheckbox.setText(MessageUtil.getString("Generovat_ukázkové_titulky_pododdílů")); subsectionCheckbox.setSelection(true); subsectionCheckbox.addListener(SWT.Selection,this); ... // zaškrtávací políčko k otevření souboru pro úpravy openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("Po_dokončení_otevřít_soubor_pro_úpravy")); openFileCheckbox.setSelection(true); ... }
V tomto kódu byste se měli být schopni vyznat, pokud rozumíte konceptům v tématu Modul Standard Widget Toolkit.
Základní vzory pro implementaci stránky zahrnují:
Třída ReadmeCreationPage dědí mnoho z tohoto chování od třídy WizardNewFileCreationPage. Pro další informace si projděte implementace těchto tříd.
Nyní, když jsme porozuměli tomu, co provádí stránka, podívejme se znovu na průvodce.
Průvodce je zodpovědný za vytváření stránek a poskytnutí "logiky dokončení".
Základní vzory pro implementaci průvodce zahrnují:
public void init(IWorkbench workbench,IStructuredSelection selection) { this.workbench = workbench; this.selection = selection; setWindowTitle(MessageUtil.getString("Nový_soubor_README")); setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER); }
public void addPages() { mainPage = new ReadmeCreationPage(workbench, selection); addPage(mainPage); }
public boolean performFinish() { return mainPage.finish(); }
Dokončený průvodce vypadá takto: