Diálogos de Aplicativo

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 ambiente de trabalho 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 ambiente de trabalho 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:

SectionsDialog não implementa um método okButtonPressed. Ele herda a implementação "fazer nada" do Diá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.

Diálogos Pop-up

Em alguns casos, talvez você queira mostrar informações sobre algo em um diálogo, mas de uma maneira mais "leve" do que ativar um diálogo comum. Por exemplo, um diálogo pode ser planejado para fornecer informações temporárias que podem ser facilmente descartadas, sem tirar o foco do trabalho do usuário. Se esse for o caso, você poderá utilizar a classe PopupDialog para implementar o diálogo. A aparência e comportamento de um PopupDialog é diferente de um Diálogo comum em diversas formas. Não há nenhum botão na parte inferior, não existe a barra de título da janela padrão, e suas bordas, espaçamento e fontes são menores e mais compactos.

Embora um PopupDialog pareça muito diferente de um diálogo comum, o código na subclasse do plug-in que define o conteúdo do diálogo é quase o mesmo. Você ainda implementa o método createDialogArea para criar os controles SWT para o diálogo. A diferença principal no código do aplicativo é que o construtor que cria o diálogo tem muito mais parâmetros do que a classe de Diálogo comum. Por exemplo, o SectionsDialog poderia ser transformado em um PopupDialog com a simples alteração da superclasse do diálogo e a configuração do diálogo no construtor:

   public class SectionsDialog extends PopupDialog {
      protected IAdaptable input;

      /**
      * Creates a new SectionsDialog.
      */
      public SectionsDialog(Shell parentShell, IAdaptable input) {
        super(parentShell, SWT.DEFAULT, false, // do not take focus when opened
        	false, // do not persist the bounds
        	false, // do not show a resize menu
        	false, // do not show a menu item for persisting bounds
        	null, //  no title
        	null); // no info text
        this.input = input;
      }
      ...