Quando um diálogo padrão for muito simples para seu plug-in, é possível construir seu próprio diálogo utilizando a classe Diálogo. Antes, nós vimos a ferramenta leiame contribuída com uma ação "Abrir Navegador do Leiame" em um conjunto de ações. Esse conjunto de ações é mostrado na barra de ferramentas do workbench e no menu Janela->Editor do Arquivo Leiame.
Agora estamos prontos para ver a implementação desta ação no WindowActionDelegate da ferramenta leiame.
public void run(IAction action) {
SectionsDialog dialog = new SectionsDialog(window.getShell(),
ReadmeModelFactory.getInstance().getSections(selection));
dialog.open();
}
A ação da janela delegada para o conjunto de ações utiliza a seleção atual na exibição do navegador de recurso (o arquivo .readme) para obter uma lista de seções no arquivo leiame. Essa lista e o shell da janela do workbench são passados para o SectionsDialog.
Quando o usuário seleciona a ação, o SectionsDialog é aberto.
O SectionsDialog é implementado no plug-in da ferramenta leiame ordenando em classes filhas da classe Diálogo no pacote org.eclipse.jface.dialogs.
A classe Diálogo fornece suporte básico para a construção da janela de shell do diálogo, criando os botões comuns do diálogo e lançando o diálogo. As classes filhas são responsáveis por identificar o conteúdo do próprio diálogo:
O SectionsDialog cria uma lista SWT para exibir a lista de seções. Ele utiliza um visualizador JFace para ocupar a lista. (Veremos os visualizadores JFace em Visualizadores.) Observe que nosso diálogo não tem que criar nenhum botão para o diálogo se isso for feito pela nossa classe filha.
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite)super.createDialogArea(parent);
List list = new List(composite, SWT.BORDER);
...
ListViewer viewer = new ListViewer(list);
...
return composite;
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("Readme Sections");
...
}
SectionsDialog não implementa um método okButtonPressed. Ele herda a implementação "fazer nada" a partir doDiálogo. Isso não é típico. Seu diálogo normalmente executa algum processamento em resposta de um dos botões da caixa de diálogo que estejam pressionados.
As caixas de diálogo podem ser tão simples ou tão complicada, conforme necessário. Quando implementar um diálogo, a maioria dos códigos do diálogo é relacionada à criação dos controles SWT que representam sua área de conteúdo e identificam qualquer evento necessário enquanto o diálogo estiver para cima. Assim que um botão for pressionado pelo usuário, o diálogo pode consultar o estado de vários controles (ou visualizadores) que fazem com que o diálogo determine o que fazer.