Se la procedura guidata in uso implementa un'attività complessa, può essere necessario utilizzare più pagine per ottenere informazioni dall'utente.
In generale, il modello di implementazione corrisponde a quello previsto per una procedura guidata a pagina singola.
Quando si progetta una procedura guidata, è buona norma inserire tutte le informazioni necessarie nella prima pagina. In questo modo, l'utente non dovrà scorrere tutte le pagine per completare l'attività. Le informazioni facoltative potranno essere immesse nelle pagine successive.
Quando una pagina richiede l'input dell'utente prima di potersi considerare completa, utilizzare setPageComplete(false) per specificare che non è completa. Quando la pagina riceve eventi provenienti dai propri controlli, esegue nuovamente la verifica per controllare se è completa. Quando viene fornito l'input richiesto, setPageComplete(true) segnala il completamento.
La classe Wizard gestisce la logica necessaria per abilitare e disabilitare il pulsante Fine in base allo stato di completamento delle pagine. Il pulsante Fine viene abilitato per una procedura guidata solo quando ciascuna delle relative pagine presenta un valore true per lo stato di completamento.
Le classi WizardNewFileCreationPage e CreateReadme1 mostrano un modello comune per l'implementazione della convalida di pagina.
WizardNewFileCreationPage definisce un gestore di eventi comuni per tutti gli eventi SWT che convalidano la pagina. Ciò significa che la pagina verrà convalidata ogni volta che si riceve un evento da un widget al quale la pagina ha aggiunto un listener.
public void handleEvent(Event event) { setPageComplete(validatePage()); }
Una volta creati i controlli, ReadmeCreationPage imposta lo stato della pagina mediante 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()); }
Utilizzando questo modello, una pagina di procedura guidata può inserire tutto il proprio codice di convalida di pagina in un metodo validatePage(). Questo metodo determina lo stato iniziale della pagina e ricalcola lo stato ogni volta che riceve un evento da un widget sulla pagina.
Poiché è stato aggiunto un listener alla casella di controllo della sezione, lo stato valido della pagina verrà rielaborato ogni volta che tale casella di controllo riceve un evento di selezione. Si osservi che il metodo handleEvent della pagina deve richiamare super per assicurare che il comportamento di convalida della pagina ereditato si verifichi in aggiunta a qualsiasi gestione di evento specifico per questa pagina.
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); }