Przy użyciu punktu rozszerzenia org.eclipse.ui.newWizards można dodać kreatora do opcji menu środowiska roboczego Plik > Nowy. Przykładowe narzędzie readme w celu dodania kreatora pliku readme używa następującej definicji punktu rozszerzenia:
<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>
Element category opisuje grupy kreatora. Opcjonalny element parentCategory ustanawia nową kategorię jako element potomny istniejącej kategorii.
Kategorie najwyższego poziomu zostaną wyświetlone w menu Plik > Nowy. W tym przykładzie element parentCategory został ustawiony jako kategoria "Examples". Skąd się wzięła kategoria nadrzędna? Znacznik modułu dodatkowego org.eclipse.ui definiuje standardową kategorię Examples:
<extension point="org.eclipse.ui.newWizards"> <category name="%NewWizards.Category.Examples" id="org.eclipse.ui.Examples"> </category> ...
Kategoria ta jest wyświetlana w menu Plik > Nowy.
Kategoria narzędzia readme name definiuje etykietę dla następnej warstwy grupowania pod kategorią nadrzędną. Kategorie te są widoczne na drugim poziomie drzewa w kreatorze Nowy przykład. Nazwa kreatora (name) oraz jego ikona (icon) są widoczne na następnym poziomie po rozwinięciu kategorii. Opis (description) zaznaczonego kreatora jest wyświetlany nad kreatorem po jego zaznaczeniu.
Te informacje o kreatorze są wyświetlane wyłącznie z powodu znacznika w pliku plugin.xml. Żaden kod modułu dodatkowego nie zostanie uruchomiony, dopóki użytkownik nie naciśnie przycisku Dalej. Następnie środowisko robocze utworzy instancję klasy kreatora (class) określonej w znaczniku i przekaże jej oczekiwany wybór class.
Klasa określona w tym rozszerzeniu (ReadmeCreationWizard) musi implementować interfejs INewWizard. Większość kreatorów robi to przez rozszerzenie platformy o klasę Wizard, mimo że jest to mechanizm implementacji i nie jest wymagany przez punkt rozszerzenia.
Kreator ma niewielkie możliwości, ale można w nim tworzyć strony. Przyjrzyjmy się implementacji strony, a następnie powrócimy do kreatora.
Środowisko robocze udostępnia podstawowe klasy stron kreatora, które obsługują typ przetwarzania dla każdego punktu rozszerzenia kreatora. Stron tych można użyć w takiej postaci, w jakiej zostały udostępnione, ale można też je rozszerzyć przez dodanie przetwarzania.
Celem kreatora ReadmeCreationWizard jest utworzenie nowego pliku, dodanie do niego wymaganej treści oraz - opcjonalnie - otwarcie pliku w edytorze. Projektowana strona wymaga zdefiniowania pól sterujących, które umożliwią określenie treści pliku oraz podjęcie decyzji dotyczącej uruchomienia edytora.
Teraz utworzona zostanie strona kreatora ReadmeCreationPage przez rozszerzenie klasy WizardNewFileCreationPage. Pola sterujące strony kreatora są definiowane podobnie jak pola sterujące widoku lub edytora. Strona implementuje metodę createControl, tworząc niezbędne widgety SWT jako elementy potomne dostarczonej klasy Composite. Ponieważ nadklasa dodaje widgety obsługujące przetwarzanie nowego pliku, wystarczy rozszerzyć metodę createControl na stronie kreatora o dodatkowe pola wyboru sterujące generowaniem sekcji oraz otwieraniem edytora.
public void createControl(Composite parent) { // dziedziczenie domyślnego kontenera i widgetów specyfikacji nazwy super.createControl(parent); Composite composite = (Composite)getControl(); ... // grupa generowania przykładowej sekcji 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)); ... // pola wyboru związane z generowaniem przykładowej sekcji 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); ... // pole wyboru otwarcia pliku do edycji openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("Open_file_for_editing_when_done")); openFileCheckbox.setSelection(true); ... }
Powyższy kod powinien być zrozumiały po opanowaniu pojęć z sekcji Standard Widget Toolkit.
Podstawowe wzorce implementacji strony obejmują:
Klasa ReadmeCreationPage dziedziczy wiele zachowań z klasy WizardNewFileCreationPage. Więcej informacji na ten temat zawiera sekcja dotycząca implementacji tych klas.
Skoro już wiadomo, co robi strona, można przyjrzeć się ponownie kreatorowi.
Kreator jest odpowiedzialny za tworzenie stron i dostarczanie logiki "zakończenia".
Podstawowe wzorce implementacji kreatora obejmują:
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(); }
Po zakończeniu pracy kreator będzie wyglądał następująco: