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