Se o seu assistente implementar uma tarefa complexa, você pode desejar utilizar mais de uma página para obter informações do usuário.
Geralmente, o padrão de implementação é o mesmo de um assistente de página única.
Quando projetar um assistente, é indicado colocar todas as informações necessárias na primeira página, se possível. Dessa forma, o usuário não tem que passar pelo conjunto inteiro de páginas para concluir a tarefa. As informações opcionais podem ser colocadas em páginas subseqüentes.
Quando uma página solicitar uma entrada do usuário antes que possa ser considerada concluída, utilize setPageComplete(false) para indicar que não está concluída. À medida que a página recebe eventos dos seus controles, ela verifica novamente se a página está concluída. Assim que a entrada necessária for fornecida, o setPageComplete(true) indica a conclusão.
A classe Assistente trata da lógica necessária para ativar e desativar o botão Concluir de acordo com o estado de conclusão das páginas. O botão Concluir é ativado para um assistente apenas quando cada uma de suas páginas tiver definido seu estado de conclusão para verdadeiro.
As classes WizardNewFileCreationPage e CreateReadme1 mostram um padrão comum para implementar a validação de páginas.
WizardNewFileCreationPage define uma rotina de tratamento de eventos comum para todos os eventos SWT que validam a página. Isso significa que a página será validada sempre que um evento for recebido de um widget ao qual a página tenha incluído um ouvinte.
public void handleEvent(Event event) {
setPageComplete(validatePage());
}
Depois que a ReadmeCreationPage cria seus controles, ela define o estado da página utilizando validatePage.
public void createControl(Composite parent) {
super.createControl(parent);
// cria controles, inclui ouvintes e faz o layout da página
...
// exemplos de caixas de opção de geração de seção
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());
}
Utilizando esse padrão, uma página de assistente pode colocar todos os seus códigos de validação de páginas em um método, validatePage(). Esse método determina o estado inicial da página e recalcula o estado a qualquer momento que receber um evento de um widget na sua página.
Já que incluímos um ouvinte na caixa de entrada da seção, recalcularemos o estado válido da página sempre que a caixa de entrada receber um evento de seleção. Observe que o método handleEvent da página deve ser nomeado super para garantir que o comportamento de validação da página herdada ocorra além de qualquer tratamento de evento específico nesta página.
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);
}