Diálogos de aplicación

Cuando un diálogo estándar es demasiado simple para un plug-in, puede construir su propio diálogo utilizando la clase Dialog. Anteriormente, se ha descrito cómo la herramienta readme contribuyó con la acción "Abrir navegador de Readme" de un conjunto de acciones.  Este conjunto de acciones se muestra en la barra de herramientas del entorno de trabajo y en el menú Ventana->Editor de archivos Readme.  

Ahora se tratará la implementación de esta acción en WindowActionDelegate de la herramienta readme.

   public void run(IAction action) {
      SectionsDialog dialog = new SectionsDialog(window.getShell(),
         ReadmeModelFactory.getInstance().getSections(selection));
      dialog.open();
   }

La delegación de acciones de ventana para el conjunto de acciones utiliza la selección actual de la vista del navegador de recursos (el archivo .readme) para obtener una lista de las secciones del archivo readme. Esta lista y la shell de la ventana del entorno de trabajo se pasan a SectionsDialog

Cuando el usuario selecciona la acción, se abre SectionsDialog.

SectionsDialog se implementa en el plug-in de la herramienta readme creando una subclase de la clase Dialog del paquete org.eclipse.jface.dialogs.

La clase Dialog proporciona soporte básico para construir una ventana de shell de diálogos; para ello, se crean los botones de diálogo comunes y se lanza el diálogo. Las subclases son las responsables de manejar el contenido del propio diálogo:

SectionsDialog no implementa ningún método okButtonPressed. Hereda la implementación "do-nothing" (no hacer nada) de Diálogo. Esto no suele suceder. Generalmente, el diálogo efectúa algunos procesos como respuesta a uno de los botones de diálogo que se han pulsado.

Los diálogos pueden ser tan simples o complejos como sea preciso. Cuando se implementa un diálogo, la mayor parte del código está relacionado con la creación de los controles de SWT que representan su área de contenido y con el manejo de cualquier evento necesario mientras el diálogo está activo. En cuanto el usuario pulsa un botón, el diálogo puede consultar el estado de los distintos controles (o visores) que componen el diálogo para determinar qué se ha de hacer.

Diálogos emergentes

En algunos casos, puede que desee visualizar información acerca de algún elemento en un diálogo, pero de una forma más "ligera" que abriendo un diálogo habitual. Por ejemplo, un diálogo puede estar destinado a suministrar información transitoria que pueda descartarse fácilmente, sin necesidad de quitar el foco del trabajo del usuario. En este caso, puede utilizar la clase PopupDialog para implementar el diálogo. El aspecto y funcionamiento de PopupDialog difiere del de Dialog habitual en varios aspectos. No tiene botones en la parte inferior, no tiene la barra de título de ventana estándar y sus bordes, espaciado y fonts son más pequeños y compactos.

Aunque el aspecto de PopupDialog es muy diferente del de un diálogo habitual, el código de la subclase del plug-in que define el contenido del diálogo es casi el mismo. Seguirá implementando el método createDialogArea para crear los controles SWT del diálogo. La diferencia principal en el código de aplicación consiste en que el constructor que crea el diálogo tiene muchos más parámetros que la clase Dialog habitual. Por ejemplo, SectionsDialog podría convertirse en un PopupDialog cambiando simplemente la superclase del diálogo y configurando el diálogo en el constructor:

   public class SectionsDialog extends PopupDialog {
      protected IAdaptable input;

      /**
      * Crea una SectionsDialog.
      */
      public SectionsDialog(Shell parentShell, IAdaptable input) {
        super(parentShell, SWT.DEFAULT, false, // no tomar foco al abrir
        	false, // no hacer los límites persistentes
        	false, // no mostrar un menú de redimensionamiento
        	false, // no mostrar una opción de menú para hacer los límites persistentes
        	null, //  sin título
        	null); // sin texto informativo
        this.input = input;
      }
      ...