Pokud váš průvodce implementuje složitou úlohu, můžete chtít k získání informací od uživatele použít více než jednu stránku.
Obecně je vzor implementace stejný, jako pro jednostránkového průvodce.
Když navrhujete průvodce, je dobrým zvykem umístit všechny požadované informace, pokud možno na první stránku. Uživatel pak nemusí procházet celou množinou stránek, aby úlohu dokončil. Nepovinné informace mohou přijít na následující stránky.
Když stránka vyžaduje vstup od uživatele předtím, než bude moci být považována za dokončenou, použijte setPageComplete(false) k označení, že stránka není dokončena. Jak stránka přijímá události od svých obslužných prvků, znovu kontroluje, zda je dokončena. Jakmile je poskytnut požadovaný vstup, setPageComplete(true) signalizuje dokončení.
Třída Wizard také ovládá logiku potřebnou ke zpřístupnění a znepřístupnění tlačítka Dokončit podle stavu dokončení stránek. Tlačítko Dokončit je v průvodci zpřístupněno jen tehdy, pokud každá ze stránek průvodce nastaví svůj stav dokončení na true.
Třídy WizardNewFileCreationPage a CreateReadme1 ukazují běžný vzor pro implementaci kontroly platnosti stránek.
WizardNewFileCreationPage definuje společnou obsluhu událostí pro všechny události SWT, která kontroluje platnost stránky. To znamená, že se platnost stránky zkontroluje pokaždé, když se přijme událost od prvku, ke kterému stránka přidala listener.
public void handleEvent(Event event) { setPageComplete(validatePage()); }
Jakmile třída ReadmeCreationPage vytvoří své obslužné prvky, nastaví stav stránky pomocí metody validatePage.
public void createControl(Composite parent) { super.createControl(parent); // vytvořit obslužné prvky, přidat listenery a rozvrhnout stránku ... // zaškrtávací políčka pro generování ukázkových oddílů sectionCheckbox = new Button(group,SWT.CHECK); sectionCheckbox.setText(MessageUtil.getString("Generovat_ukázkové_titulky_oddílů")); sectionCheckbox.setSelection(true); sectionCheckbox.addListener(SWT.Selection,this); subsectionCheckbox = new Button(group,SWT.CHECK); subsectionCheckbox.setText(MessageUtil.getString("Generovat_ukázkové_titulky_pododdílů")); subsectionCheckbox.setSelection(true); subsectionCheckbox.addListener(SWT.Selection,this); ... setPageComplete(validatePage()); }
Podle tohoto vzoru může stránka průvodce umístit veškerý kód kontroly platnosti do jediné metody validatePage(). Tato metoda určí počáteční stav stránky a přepočítá stav pokaždé, když přijme událost od prvku na své stránce.
Poněvadž jsme přidali listener k zaškrtávacímu tlačítku oddílů, přepočítá se stav platnosti stránky pokaždé, když zaškrtávací tlačítko přijme událost výběru. Vezměte na vědomí, že metoda handleEvent stránky musí zavolat supertřídu, aby zajistila, že kromě specifického zpracování událostí pro tuto stránku proběhne i zděděná kontrola platnosti stránky.
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); }