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 como a ferramenta leia-me contribuiu com uma ação "Abrir Navegador do Leia-me" em um conjunto de ações. Esse conjunto de ações é mostrado na barra de ferramentas do workbench e no menu Janela->Editor de Arquivo Leia-me.
Agora estamos prontos para ver a implementação desta ação no WindowActionDelegate da ferramenta leia-me.
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 readme. Esta lista e o shell da janela do workbench são transmitidos para o SectionsDialog.
Quando o usuário seleciona a ação, o SectionsDialog é aberto.
O SectionsDialog é implementado no plug-in da ferramenta leia-me 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(MessageUtil.getString("Seções do Readme"));
...
}
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.