Guider med flere sider

Hvis en guide implementerer en kompleks opgave, kan det være praktisk at bruge mere end én side til at hente oplysninger fra brugeren.

Generelt er implementeringsmønstret det samme som for guider med en enkelt side.

Når du designer en guide, er det god praksis at placere alle nødvendige oplysninger på den første side, hvis det kan lade sig gøre. På den måde skal brugeren ikke gennemgå alle siderne for at kunne afslutte opgaven.  Valgfri oplysninger kan placeres på de følgende sider.

Når en side kræver input fra brugeren, før den kan anses for at være fuldstændig, skal du bruge setPageComplete(false) til at angive, at den ikke er færdiggjort. Efterhånden som siden modtager aktiviteter fra sine kontroller, undersøger den igen, om siden er færdiggjort. Når det nødvendige input er leveret, angiver setPageComplete(true), at siden er færdig.

Klassen Guide håndterer den logik, der kræves for at aktivere og deaktivere knappen Afslut i overensstemmelse med, hvor færdige siderne er. Knappen Afslut aktiveres kun for en guide, når færdiggørelsestilstanden for alle dens sider er angivet som 'true'.

Validering og sidekontrol

Klasserne WizardNewFileCreationPage og CreateReadme1 viser en fælles mønster for implementering af sidevalidering.

WizardNewFileCreationPage definerer en fælles aktivitetsbehandler for alle SWT-aktiviteter, som validerer siden. Det betyder, at siden valideres, hver gang en aktivitet modtages fra et element, som siden har tilføjet en lytter til.

   public void handleEvent(Event event) {
      setPageComplete(validatePage());
   }

Når ReadmeCreationPage opretter sine kontroller, fastsætter den sidens tilstand vha. validatePage.

    public void createControl(Composite parent) {
      super.createControl(parent);
      // opret kontroller, tilføj lyttere, og foretag layout af siden
      ...
      // afkrydsningsfelter for generering af sektionseksempel
      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);
      ...
      setPageComplete(validatePage());
   }

Ved hjælp af dette mønster kan en guideside placere hele sin sidevalideringskode i én metode, validatePage(). Denne metode bestemmer sidens oprindelige tilstand og genberegner tilstanden, hver gang den modtager en aktivitet fra et element på sin side.

Da vi har tilføjet en lytter til afkrydsningsfeltet for sektionen, genberegner vi nu den gyldige tilstand for siden, hver gang det pågældende afkrydsningsfelt modtager en valg-aktivitet. Bemærk, at sidens handleEvent-metode skal kalde superklassen for at sikre, at den overtagne sidevalideringsfunktionsmåde finder sted foruden den specifikke aktivitetshåndtering af denne side.

   public void handleEvent(Event e) {
      Widget source = e.widget;
      if (source == sectionCheckbox) {
         if (!sectionCheckbox.getSelection())
            subsectionCheckbox.setSelection(false);
         subsectionCheckbox.setEnabled(sectionCheckbox.getSelection());
      }
      super.handleEvent(e);
   }