Az org.eclipse.ui.newWizards kiterjesztési pont segítségével a munkaterületen hozzáadhat egy varázslót a Fájl > Új> menüponthoz. A readme eszköz példa ezt a kiterjesztési pont definíciót használja a Readme fájl varázsló hozzáadásához:
<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>
A kategória leírja a varázsló csoportosítását. Az elhagyható parentCategory létrehozza az új kategóriát a meglévő kategória leszármazottjaként.
A felsőszintű kategóriák megjelennek a Fájl > Új menüben. Ebben a példában a parentCategory "Példák" kategóriára van állítva. Honnan ered a szülőkategória? Az org.eclipse.ui bedolgozó szabványos példakategóriát ad meg a leírónyelvben:
<extension point="org.eclipse.ui.newWizards"> <category name="%NewWizards.Category.Examples" id="org.eclipse.ui.Examples"> </category> ...
Ez a kategória megjelenik a Fájl > Új menüben.
A readme eszköz név kategóriája megadja a csoportosítás következő kategóriájához használt címkét a szülőkategória alatt. Ezek a kategóriák második szintként jelennek meg az Új példa varázslóban megjelenő fában. A kategória kiterjesztésekor a varázsló neve és ikonja alul jelenik meg. A kiválasztott varázsló leírása megjelenik a varázsló tetején, amikor kiválasztja.
Kizárólag a varázslóval kapcsolatos információk jelennek meg a plugin.xml fájlban lévő leírónyelv miatt. Egyik bedolgozó kód sem fut, amíg a felhasználó ki nem választja a Tovább gombot. Ha ez történik, akkor a munkaterület példányosítja a leírónyelvben megadott varázslóosztályt és átadja a várt kiválasztási osztályt.
A kiterjesztésben azonosított osztálynak (ReadmeCreationWizard) meg kell valósítania az INewWizard felületet. A legtöbb varázsló a platform Varázsló osztály kiterjesztésével valósítja meg, habár ez egy megvalósítási mechanizmus és a kiterjesztési ponthoz nem szükséges.
A varázsló maga kicsi, de létrehozza az oldalakat ezen belül. Tekintsük meg az első oldal megvalósítását, majd térjen vissza a varázslóhoz.
A munkaterület alap varázslóoldal-osztályokat biztosít, amely támogatja a varázsló kiterjesztési pontokhoz végrehajtott feldolgozási típusokat. Használhatja ezeket az oldalakat, vagy kiterjesztheti őket további feldolgozás hozzáadásához.
A ReadmeCreationWizard célja új fájl létrehozása, a szükséges tartalom fájlhoz adása, és lehetőségként szerkesztő megnyitása a fájlon. Az oldalaknak meg kell adniuk a vezérlőket, amelyek segítségével a felhasználó megadhatja, hogy milyen tartalom kerüljön a fájlba, valamint hogy a szerkesztőt el kell-e indítani.
Létrehozzuk a ReadmeCreationPage varázslóoldalt a WizardNewFileCreationPage kiterjesztésével. A varázslóoldal vezérlőelemei a nézet vagy szerkesztő vezérlőelemeihez hasonlóan kerülnek megadásra. Az oldal megvalósít egy createControl metódust, létrehozza a szükséges SWT felületi elemeket a biztosított Composite leszármazottjaként. Mivel a szülőosztály már hozzáadott felületi elemeket, amely támogatja az új fájlfeldolgozást, csak createControl metódust kell kiterjeszteni a varázslóoldalon további jelölőnégyzetek hozzáadása érdekében, amelyek vezérlik a szakaszok előállítását és a szerkesztő megnyitását.
public void createControl(Composite parent) { // inherit default container and name specification widgets super.createControl(parent); Composite composite = (Composite)getControl(); ... // példa szakaszelőállítási csoport 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)); ... // példa szakaszelőállítási jelölőnégyzetek 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); ... // fájlmegnyitás a jelölőnégyzet szerkesztéséhez openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("Open_file_for_editing_when_done")); openFileCheckbox.setSelection(true); ... }
Követnie kell ezt a kódot, ha megérti az alapelvet a Standard Widget eszközkészletben.
Az oldal megvalósításának alap mintái az alábbiak:
A ReadmeCreationPage osztály a viselkedésének nagy részét a WizardNewFileCreationPage elemtől örökli. További információkért böngéssze az osztályok megvalósítását.
Most, hogy már ismerjük, mit csinál az oldal, tekintsük meg újra a varázslót.
A varázsló felelős az oldalak létrehozásáért és a "befejező" logika biztosításáért.
A varázsló megvalósításának alap mintái a következők:
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(); }
A befejezett varázsló az alábbi módon néz ki: