Infraestructura de componentes

Al proporcionar una API simple para vistas y editores, también conocidos como componentes, la Infraestructura de componentes permite añadir y componer los componentes existentes. La API de infraestructura de componentes permite a los clientes crear instancias de componentes dentro de compuestos SWT arbitrarios, mejora la solidez y la capacidad a prueba de fugas al hacer que un componente se comunique con interfaces locales en su sitio en lugar de alcanzar objetos globales, permite a los clientes ampliar el conjunto de interfaces disponible en un sitio y proporciona una infraestructura para los clientes para crear sus propios componentes reutilizables utilizando la misma API disponible para vistas y editores. La infraestructura de componentes también permite construir y destruir un componente con operaciones atómicas y permite que los componentes existentes utilicen nuevas interfaces de sitio.

Imagen de vista NameViewNew

Este ejemplo sencillo proporciona una vista que establece su nombre, título, ayuda flotante e imagen y muestra cómo escribir un editor o una vista utilizando la infraestructura de componentes. Muestra el origen utilizando la API de componentes. Los componentes nuevas pueden tomar argumentos en su constructor y no es necesario implementar ninguna interfaz en particular ni tienen que heredar de ninguna clase básica en particular.

/**
 * Vista de ejemplo que establece su nombre, ayuda flotante, imagen y descripción de contenido. La vista
 * utiliza una imagen personalizada proporcionada por su conector.
 *
 * @since 3.1
 */
public class NameViewNew {
    /**
     * Constructor de componentes. No debe invocarse directamente.
     */
    public NameViewNew(Composite parent, INameable name, IPluginImages images) {
        name.setName("Name View (New)");
        name.setContentDescription("content description");
        name.setTooltip("This is a tooltip");
        name.setImage(images.getImage("icons/sample.gif"));
       
        // Crear contenido ficticio de vista
        Label content = new Label(parent, SWT.NONE);
        content.setText("View contents go here");
    }
}

Observe que los argumentos proporcionados al constructor de la vista ya conocen su contexto. Por ejemplo, no es necesario indicar a la interfaz de IPluginImages a qué conector pertenece la vista. De forma similar, las interfaces son resistentes a las fugas. En este ejemplo, la imagen de la vista se asigna y se desasigna automáticamente con la implementación de INameable, de manera que no es necesario que la propia vista implemente un método de desecho.

Es interesante observar que la API para vistas y editores sea exactamente la misma. En otras palabras, si se hubiese elegido registrar la clase NameViewNew con el punto de extensión org.eclipse.ui.editors, también podría utilizarse como editor sin modificaciones adicionales.