Assistants multi-pages

Si votre assistant implémente une tâche complexe, vous pouvez utiliser plusieurs pages pour obtenir des informations de la part de l'utilisateur.

En règle générale, le schéma de mise en oeuvre est le même que pour un assistant à page unique.

Lorsque vous concevez un assistant, il est si possible, préférable de placer toutes les informations requises sur la première page. De cette façon, l'utilisateur n'a pas besoin de traverser la totalité des pages pour terminer la tâche. Les informations optionnelles peuvent figurer sur les pages suivantes.

Lorsqu'une page nécessite une entrée de la part de l'utilisateur avant qu'elle ne soit considérée comme achevée, utilisez setPageComplete(false) pour signifier que la page n'est pas complète. Au fur et à mesure que la page reçoit les événements de ses contrôles, elle revérifie pour voir si la page est terminée. Une fois, les données nécessaires entrées, setPageComplete(true) signale que la page est achevée.

La classe Wizard traite la logique requise pour activer et désactiver le bouton Fin selon l'état d'achèvement de la page. Le bouton Fin d'un assistant devient accessible uniquement lorsque l'état d'achèvement de chacune de ses pages porte la valeur "true".

Validation et contrôle des pages

Les classes WizardNewFileCreationPage et CreateReadme1 montrent un schéma commun d'implémentation de validation des pages.

WizardNewFileCreationPage définit un processeur d'événements commun pour tous les événements SWT qui valident la page. Ceci signifie que la page est validée chaque fois qu'un événement est reçu d'un widget auquel la page a ajouté un écouteur.

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

Lorsque ReadmeCreationPage a créé ses contrôles, il définit l'étét de la page à l'aide de validatePage.

   public void createControl(Composite parent) {
      super.createControl(parent);
      // crée des contrôles, ajoute des modules d'écoute et organise la page
      ...
      // cases à cocher de génération de sections
      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());
   }

A l'aide de ce schéma, une page d'assistant peut placer la totalité de son code de validation de page dans une méthode validatePage(). Cette méthode détermine l'état initial de la page et le recalcule chaque fois qu'elle reçoit un événement en provenance d'un widget de sa page.

Un écouteur ayant été ajouté à la case à cocher de la section, l'état valide de la page est recalculé chaque fois que la case à cocher est sélectionnée. Notez que la méthode handleEvent de la page doit s'appeler "super" pour garantir que le comportement de validation de la page héritée se produit en plus de tout traitement d'événement spécifique à cette page.

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

Copyright IBM Corporation and others 2000, 2003.