org.eclipse.ui.decorators

Su conector puede utilizar decoradores para anotar información en las imágenes de los recursos y de otros objetos que aparezcan en las vistas del entorno de trabajo.  Los decoradores son de utilidad cuando el conector aporta funciones para tipos de recursos existentes.  Muchas de las vistas estándar del entorno de trabajo participan en el proceso de mostrar decoraciones.  

Por ejemplo, el PDE contribuye con decoradores que permiten distinguir los proyectos binarios de los proyectos fuente.

Vista Explorador de paquetes, con decoradores del PDE

El proyecto com.example.sourceProject es el único proyecto fuente que se muestra en la vista Navegador.  Observe cómo los demás proyectos binarios muestran el decorador de binario en la parte superior izquierda del icono de proyecto Java.  Este decorador es una contribución del PDE realizada mediante el punto de extensión org.eclipse.ui.decorators.

   <extension
   point="org.eclipse.ui.decorators">
      <decorator
            lightweight="true"
            quadrant="TOP_LEFT"
            adaptable="true"
            label="%decorator.label"
            icon="icons/full/ovr16/binary_co.gif"
            state="false"
            id="org.eclipse.pde.ui.binaryProjectDecorator">
         <description>
            %decorator.desc
         </description>
       <enablement>
            ...
       </enablement>
      </decorator>
 </extension>

Existen varias formas de suministrar una implementación de decorador.  Este código utiliza la forma más sencilla, conocida como decorador declarativo (declarative) ligero (lightweight).  Cuando se define un decorador declarativo ligero, el código contiene una descripción completa del icono, la situación y las condiciones de habilitación del decorador.  Los decoradores declarativos son de utilidad cuando sólo se utiliza un icono para decorar la etiqueta.  El conector sólo necesita especificar el cuadrante (quadrant) del icono regular donde debe colocarse el decorador y el icono (icon) de la superposición.  Como se muestra en la imagen, el icono binario del PDE aparece superpuesto en el cuadrante superior izquierdo del icono de paquete.

Si el conector necesita manipular el texto de la etiqueta además del icono, o si el tipo de icono se determina dinámicamente, puede utilizar un decorador ligero no declarativo.   En este caso, debe definirse una clase de implementación que implemente ILightweightLabelDecorator.  La clase designada es responsable de suministrar un prefijo, un sufijo y una imagen de superposición durante la ejecución que se apliquen a la etiqueta.  La mecánica de la concatenación del prefijo y el sufijo con el texto de la etiqueta y de la realización de la superposición se manejan en el código del entorno de trabajo en una hebra de segundo plano.   Por tanto, el trabajo realizado por el conector en la implementación correspondiente de ILightweightLabelDecorator debe ser a prueba de hebras de UI.  (Consulte el apartado Ejecutar código desde una hebra que no es de UI para obtener más detalles).

  Los siguientes códigos XML muestran cómo el cliente CVS define su decorador mediante esta técnica:

   <extension
   point="org.eclipse.ui.decorators">
      <decorator
            objectClass="org.eclipse.core.resources.IResource"
            adaptable="true"
        label="%DecoratorStandard.name"
            state="false"
            lightweight= "true"
            quadrant = "BOTTOM_RIGHT"
            class="org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator"
        id="org.eclipse.team.cvs.ui.decorator">
         <description>
            %DecoratorStandard.desc
         </description>
      </decorator>
</extension>

El usuario es quien controla en última instancia los decoradores por medio de la página de preferencias Decoraciones de etiqueta del entorno de trabajo.  Pueden activarse y desactivarse decoradores individuales.  Aun así, es aconsejable diseñar los decoradores de manera que no se solapen ni entren en conflicto con los decoradores existentes del SDK de la plataforma. Si varios conectores añaden decoradores ligeros al mismo cuadrante, los conflictos se resuelven de forma no determinista.  

El conector también puede realizar por sí mismo toda la gestión de imágenes y etiquetas.  En este caso, el atributo lightweight debe establecerse en false y el atributo class debe nombrar una clase que implemente ILabelDecorator.  Esta clase permite decorar la imagen y el texto de la etiqueta original con anotaciones propias.  Proporciona una mayor flexibilidad, ya que el usuario no está limitado a los prefijos, sufijos y superposiciones de cuadrantes simples.

Los demás atributos de un decorador son independientes del estilo de implementación.  Los atributos label y description designan el texto utilizado para nombrar y describir el decorador en el diálogo de preferencias.  El atributo objectClass nombra la clase de objetos a los que debe aplicarse el decorador.  El atributo enablement permite describir las condiciones bajo las que el objeto debe decorarse.   El indicador adaptable indica si también deben decorarse los objetos que se adaptan a IResource.  El indicador state controla si el decorador es visible por omisión.

Si los decoradores incluyen información que cueste de calcular o que pueda distraer la atención, tal vez le interese aportar preferencias propias que permitan al usuario ajustar todavía más el decorador una vez activado.  Esta técnica es la que utiliza el cliente CVS.

Página de preferencias de decoradores de CVS

 

Copyright IBM Corporation y otros 2000, 2003.