Wenn Ihr Assistent eine komplexe Task implementieren soll, ist es unter Umständen sinnvoll, die Informationen vom Benutzer auf mehreren Seiten anzufordern.
Im Allgemeinen ist das Implementierungsmuster jedoch mit dem eines einzelseitigen Assistenten identisch.
Erstellen Sie für jede Seite in Ihrem Assistenten eine Unterklasse WizardPage. Jede Assistentenseite sollte die Methode setPageComplete(true) verwenden, sobald genügend Informationen zur Verfügung stehen.
Erstellen Sie eine Unterklasse Wizard, die alle Seiten zum Assistenten hinzufügt.
Implementieren Sie eine Methode performFinish, um die Logik für die Aktion "Fertig stellen" auszuführen.
Beim Entwerfen eines Assistenten hat sich die Praxis bewährt, alle erforderlichen Informationen in die erste Seite zu stellen, wenn dies möglich ist. Auf diese Weise muss der Benutzer nicht alle Seiten durcharbeiten, um die Task fertig zu stellen. Für optionale Angaben können dann Folgeseiten verwendet werden.
Wenn der Benutzer auf einer Seite noch Informationen eingeben muss, bevor die Seite als fertig gestellt gelten kann, machen Sie dies durch die Verwendung der Methode setPageComplete(false) kenntlich. Sobald die Seite Ereignisse aus ihren Steuerelementen empfängt, prüft sie erneut, ob die Seite nun fertig gestellt ist. Wird die erforderliche Eingabe zur Verfügung gestellt, signalisiert die Methode setPageComplete(true) die Fertigstellung.
Die Klasse Wizard verarbeitet die Logik, mit der die Schaltfläche Fertig stellen gemäß dem Fertigstellungsstatus der Seite aktiviert bzw. inaktiviert wird. Die Schaltfläche Fertig stellen wird in einem Assistenten erst dann aktiviert, wenn für alle seine Seiten der Fertigstellungsstatus auf "true" (= wahr) gesetzt wurde.
Die Klassen WizardNewFileCreationPage und CreateReadme1 zeigen ein allgemeines Muster zur Implementierung einer Seitenauswertung.
Die Klasse WizardNewFileCreationPage definiert eine allgemeine Ereignissteuerroutine für alle SWT-Ereignisse, die die Seite auswerten. Dies bedeutet, dass die Seite immer dann ausgewertet wird, wenn von einem Fensterobjekt, dem die Seite eine Listener-Funktion hinzugefügt hat, ein Ereignis empfangen wird.
public void handleEvent(Event event) {
setPageComplete(validatePage());
}
Sobald die Klasse CreateReadme1 ihre Steuerelemente erstellt, legt sie den Status der Seite mit der Methode validatePage fest.
public void createControl(Composite parent) {
super.createControl(parent);
// Steuerelemente erstellen, Listener-Funktionen hinzufügen und Seitenlayout definieren
...
// Markierungsfelder für die Generierung von Beispielabschnitten
sectionCheckbox = new Button(group,SWT.CHECK);
sectionCheckbox.setText("Titel für Beispielabschnitte generieren");
sectionCheckbox.setSelection(true);
// Listener-Funktion für dieses Markierungsfeld hinzufügen
sectionCheckbox.addListener(SWT.Selection,this);
...
setPageComplete(validatePage());
}
Mit diesem Muster kann eine Assistentenseite den gesamten Code zur Seitenauswertung in eine Methode namens validatePage() stellen. Diese Methode bestimmt den Anfangsstatus der Seite und berechnet den Status immer dann erneut, wenn sie ein Ereignis aus einem Fensterobjekt ihrer Seite empfängt.
Da dem Markierungsfeld "Titel für Beispielabschnitte generieren" eine Listener-Funktion hinzugefügt wurde, wird der gültige Status der Seite immer dann erneut berechnet, wenn dieses Markierungsfeld ein Auswahlereignis empfängt. Bitte beachten Sie, dass die Methode handleEvent der Seite übergeordnet aufgerufen werden muss. Hierdurch wird sichergestellt, dass das Verhalten der übernommenen Seitenauswertung zusätzlich zu allen spezifischen Ereignisverarbeitungen für diese Seite stattfindet.
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);
}