Punkt rozszerzenia org.eclipse.ui.newWizards

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 Przykłady w menu 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.

Wpisy pliku readme w kreatorze Nowy przykład

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.

Strony

Ś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

Kreator jest odpowiedzialny za tworzenie stron i dostarczanie logiki "zakończenia".

Podstawowe wzorce implementacji kreatora obejmują:

Po zakończeniu pracy kreator będzie wyglądał następująco:

Strona kreatora pliku readme