Monisivuiset ohjatut toiminnot

Jos ohjattu toiminto toteuttaa monimutkaisen tehtävän, voi olla hyvä käyttää useampi kuin yksi sivu siihen, että käyttäjältä noudetaan tietoja.

Toteutusmalli on yleisesti ottaen samanlainen kuin yksisivuisissa ohjatuissa toiminnoissa.

Ohjatun toiminnon suunnittelussa on hyvä ottaa huomioon, että (jos vain mahdollista) yleensä ensimmäiselle sivulle laitetaan kaikki tarvittava tieto. Näin käyttäjän ei tarvitse tehtävän suorittamiseksi käydä kaikkia sivuja läpi.  Seuraaville sivuille voi laittaa valinnaista tietoa.

Jos sivu tarvitsee käyttäjän tuottamaa syötettä ennen kuin sivu voidaan katsoa valmiiksi, käytä määritystä setPageComplete(false) ilmaisemaan sitä, että sivu ei vielä ole valmis. Kun sivu vastaanottaa tapahtumia ohjausobjekteiltaan, se tarkistaa uudelleen, onko sivu valmis. Kun vaadittu syöte on saatu, määritys setPageComplete(true) kertoo, että sivu on valmis.

Wizard -luokka käsittelee logiikkaa, jota tarvitaan Valmis-painikkeen ottamisessa käyttöön ja poistamisessa käytöstä sen mukaan, onko sivu valmis vai ei.  Valmis-painike otetaan ohjatun toiminnon käyttöön vain silloin, kun jokainen toiminnon sivu on määrittänyt olevansa valmis.

Kelpoisuuden tarkistus ja sivujen ohjaus

Luokissa WizardNewFileCreationPage ja CreateReadme1 on molemmissa malli, jonka mukaan voi toteuttaa sivujen kelpoisuuden tarkistusta.

WizardNewFileCreationPage määrittää kaikissa widget-vakiotyökaluissa käytetyn yleisen tapahtumien käsittelytoiminnon, joka tarkistaa sivun. Sivu tarkistetaan aina kun jokin widget-toiminto, johon sivu on lisännyt kuuntelutoiminnon, välittää jonkin tapahtuman.

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

Kun ReadmeCreationPage luo ohjausobjektinsa, se määrittää sivun tilan validatePage-toiminnon avulla.

public void createControl(Composite parent) {
	super.createControl(parent);
      // luo ohjausobjektit, lisää kuuntelutoiminnot ja asettele sivu
      ...
      // esimerkki osan luomisen valintaruudusta
      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());
   }

Tätä mallia noudattamalla ohjatun toiminnon sivu voi sijoittaa kaiken sivujen tarkistusta käsittelevän koodinsa yhteen metodiin, joka on validatePage(). Kyseinen metodi määrittää sivun alkutilan ja laskee tilan aina kun sivun widget-objekti välittää sille tapahtuman.

Koska osan valintaruutuun lisättiin kuuntelutoiminto, sivun kelvollinen tila lasketaan aina uudestaan, kun valintaruutu vastaanottaa valintatapahtuman. Huomaa, että sivun handleEvent-metodin täytyy kutsua ylätyyppiä ja varmistaa siten, että peritty sivun tarkistus ja muut mahdolliset tapahtumien käsittelytoiminnot ovat toiminnassa.

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