Cuando un diálogo estándar es demasiado simple para un conector, 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 conector 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 crea una lista de SWT para visualizar la lista de secciones. Utiliza un visor de JFace para poblar la lista. (Encontrará información sobre visores de JFace en Visores). Tenga en cuenta que el diálogo no tiene que crear ninguno de los botones para el diálogo, ya que esto lo hace la superclase.
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("Secciones de Readme")); ... }
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.