Assistentes de Páginas Múltiplas

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 por todo o conjunto de páginas para finalizar a tarefa.  Podem aparecer informações opcionais 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 a 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.

Validação e controle de página

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 atendente.

public void handleEvent(Event event) {
    setPageComplete(validatePage());
}

Uma vez que a página CreateReadme1 cria seus controles, ela define o estado da página usando validatePage.

public void createControl(Composite parent) {
    super.createControl(parent);
    // cria controles, inclui atendentes e faz o layout de página
    ...
    // amostra de caixas de entrada de geração de seção
    sectionCheckbox = new Button(group,SWT.CHECK);
    sectionCheckbox.setText("Gerar amostras de títulos de seção");
    sectionCheckbox.setSelection(true);

    // incluímos um atendente nesta caixa de entrada
    sectionCheckbox.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 incluimos um atendente 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);
}