Veivisere for flere sider

Hvis veiviseren implementere en kompleks oppgave, kan det være du trenger flere sider for å få informasjon fra brukeren.

Implementeringsmønsteret er stort sett det samme som for en veiviser for enkeltside.

Når du utformer en veiviser, bør du i størst mulig grad legge all nødvendig informasjon på den første siden. Dermed trenger ikke brukeren traversere gjennom hele settet med sider for å fullføre oppgaven. Øvrig informasjon legges i de påfølgende sidene.

Når en side krever inndata fra brukeren før den er ferdig utfylt, bruker du setPageComplete(false) for å angi at siden ikke er fullført. Etter hvert som siden mottar hendelser fra kontrollene, foretas ny kontroll for å se om siden er fullført. Når det nødvendige innholdet er oppgitt, signaliserer setPageComplete(true) at siden er ferdig utfylt.

Klassen Wizard håndterer logikk for aktivering og deaktivering av knappen Fullfør, ut fra fullføringsstatusen på sidene. Knappen Fullfør blir aktivert på sidene når hver av sidene fullføringsstatusen er "true".

Validering og sidekontroll

Klassene WizardNewFileCreationPage og CreateReadme1 viser et fellesmønster for implementering av sidevalidering.

WizardNewFileCreationPage definerer en felles hendelsesbehandler for alle SWT-hendelser som validerer siden. Dette betyr at siden blir validert når det mottas en hendelse fra en widget som siden lytter til.

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

Når ReadmeCreationPage oppretter kontrollene, angis statusen til siden ved hjelp av validatePage.

    public void createControl(Composite parent) {
      super.createControl(parent);
      // create controls, add listeners, and layout the page
      ...
      // sample section generation checkboxes
      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 hjelp av dette mønsteret kan veivisersiden legge all valideringskode for siden i en metode, validatePage(). Denne metoden angir den opprinnelige statusen for siden og beregner statusen på nytt hver gang en hendelse mottas fra en widget på siden.

Siden vi har lagt til en lytter i valgene for seksjonen, beregner vi gyldig status for siden på nytt når avmerkingsboksen mottar en valghendelse. Merk at metoden handleEvent må kalle "super" for å sikre at den arvede sidevalideringsfunksjonen utføres i tillegg til eventuell spesifikk hendelsesstyring for siden.

   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);
   }