Οδηγοί πολλαπλών σελίδων

Εάν ο οδηγός σας υλοποιεί μια πολύπλοκη εργασία, μπορεί να επιθυμείτε να χρησιμοποιήσετε περισσότερες από μια σελίδες για τη λήψη πληροφοριών από τη χρήστη.

Σε γενικές γραμμές, το μοτίβο υλοποίησης είναι το ίδιο με αυτό για ένα οδηγό με μια μοναδική σελίδα.

Κατά το σχεδιασμό ενός οδηγού, αποτελεί σωστή πρακτική η τοποθέτηση όλων των απαιτούμενων πληροφοριών στην πρώτη σελίδα εάν είναι δυνατόν. Με αυτόν τον τρόπο ο χρήστης δεν χρειάζεται να διασχίζει ολόκληρο το σύνολο των σελίδων για να ολοκληρώσει την εργασία.  Οι προαιρετικές πληροφορίες μπορούν να τοποθετηθούν στις μετέπειτα σελίδες.

Όταν μια σελίδα απαιτεί δεδομένα εισόδου από το χρήστη πριν να μπορέσει να θεωρηθεί ολοκληρωμένη, χρησιμοποιήστε τη μέθοδο setPageComplete(false) για να σηματοδοτήσετε το γεγονός ότι δεν είναι ολοκληρωμένη. Καθώς η σελίδα λαμβάνει συμβάντα από τα στοιχεία ελέγχου της, εκτελεί επανέλεγχο για να διαπιστώσει εάν η σελίδα είναι ολοκληρωμένη. Μόλις ολοκληρωθεί η παροχή των απαιτούμενων δεδομένων εισόδου, η setPageComplete(true) σηματοδοτεί την ολοκλήρωση.

Η κλάση Wizard χειρίζεται τη λογική που απαιτείται για την ενεργοποίηση και την απενεργοποίηση του κουμπιού Ολοκλήρωση σύμφωνα με την κατάσταση ολοκλήρωσης των σελίδων.  Το κουμπί Ολοκλήρωση ενεργοποιείται μόνο για έναν οδηγό όταν κάθε σελίδα του έχει θέσει την κατάσταση ολοκλήρωσής της ως true.

Επικύρωση και έλεγχος σελίδας

Οι κλάσεις WizardNewFileCreationPage και CreateReadme1 δείχνουν ένα κοινό μοτίβο για την υλοποίηση της επικύρωσης σελίδας.

Η WizardNewFileCreationPage ορίζει μια κοινή ρουτίνα χειρισμού συμβάντων για όλα τα συμβάντα SWT η οποία επικυρώνει τη σελίδα. Αυτό σημαίνει ότι η σελίδα θα επικυρωθεί όποτε γίνεται η λήψη ενός συμβάντος από ένα όργανο στο οποίο η σελίδα έχει προσθέσει μια λειτουργία ακρόασης.

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

Μόλις η ReadmeCreationPage δημιουργήσει τα στοιχεία ελέγχου της, ορίζει την κατάσταση της σελίδας χρησιμοποιώντας την 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());
   }

Χρησιμοποιώντας αυτό το μοτίβο, μια σελίδα του οδηγού μπορεί να τοποθετήσει όλο τον κώδικα επικύρωσης της σελίδας σε μια μέθοδο, validatePage(). Αυτή η μέθοδος καθορίζει την αρχική κατάσταση της σελίδας και υπολογίζει εκ νέου την κατάσταση κάθε φορά που λαμβάνει ένα συμβάν από ένα όργανο στη σελίδα της.

Δεδομένου ότι προσθέσαμε μια λειτουργία ακρόασης στο τετραγωνίδιο επιλογής της ενότητας, θα υπολογίσουμε εκ νέου την έγκυρη κατάσταση της σελίδας κάθε φορά που αυτό το τετραγωνίδιο επιλογής λαμβάνει ένα συμβάν επιλογής. Σημειώστε ότι η μέθοδος handleEvent της σελίδας πρέπει να καλέσει super για να διασφαλίσει ότι η κληρονομημένη συμπεριφορά επικύρωσης σελίδας πραγματοποιείται επιπλέον του οποιουδήποτε συγκεκριμένου χειρισμού συμβάντος για αυτή τη σελίδα.

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