Personal tools
You are here: Home Development Documents gvSIG desktop 1.0 / 1.1 gvSIG Andami Plugins y extensiones Extensiones HiddableExtension y ExtensionDecorator
La interfaz HiddableExtension y la clase ExtensionDecorator permiten cambiar la visibilidad de una extensión (y sus controles asociados) en tiempo de ejecución, ignorando el valor que indique la propia extensión en el método *isVisible*. De esta forma podemos instalar una extensión que oculte un conjunto de otras extensiones, creando un gvSIG personalizado (que sólo mostraría las extensiones deseadas).

La interfaz HiddableExtension sólo contiene dos métodos:

- **public void setVisibility(int state)** Permite definir una visibilidad para una extensión, que prevalece sobre la visibilidad definida en el método *isVisible()* de la propia extensión. Los valores de visibilidad aceptados incluyen: *ExtensionDecorator.INACTIVE* (el Decorator está desactivado y por tanto se obedecerá a la establecido en el método *isVisible()* de la propia extensión), *ExtensionDecorator.ALWAYS_VISIBLE* (la extensión estará siempre visible) y *ExtensionDecorator.ALWAYS_INVISIBLE* (la extensión estará siempre invisible).

- **public int getVisibility()** Consulta la visibilidad que se ha adjudicado a la extensión. Los valores devueltos pueden ser *ExtensionDecorator.INACTIVE*, *ExtensionDecorator.ALWAYS_VISIBLE* o *ExtensionDecorator.ALWAYS_INVISIBLE*.

La clase ExtensionDecorator implementa la interfaz HiddableExtension. Cada extensión cargada por Andami posee un ExtensionDecorator asociado, que podemos obtener para cambiar la visibilidad de esa extensión. Mostramos como ejemplo el código necesario para ocultar la extensión "com.iver.cit.gvsig.StartEditing", que es la que permite poner una capa en edición. De esta forma, estaríamos desactivando las capacidades de edición de gvSIG:

.. code-block:: java

  ExtensionDecorator decorator = PluginServices.getDecoratedExtension(com.iver.cit.gvsig.StartEditing.class);
  decorator.setVisibility(ExtensionDecorator.ALWAYS_INVISIBLE);

Por supuesto, para llevar a cabo con éxito una personalización de gvSIG, necesitamos conocer las extensiones que deseamos ocultar. Además, para poder acceder correctamente a la clase de la extensión a desactivar (en este ejemplo, *com.iver.cit.gvsig.StartEditing.class*) necesitamos declarar una dependencia del plugin que contenga la extensión, de lo contrario obtendremos una excepción de tipo *ClassNotFoundException* al ejecutar ese código. En este caso, *com.iver.cit.gvsig.StartEditing.class* está contenido en el plugin *com.iver.cit.gvsig.cad*, por tanto necesitamos añadir al *config.xml* de nuestro plugin una línea como la siguiente:

.. code-block:: xml

  

Téngase en cuenta que cualquier extensión puede usar este mecanismo en cualquier momento para ocultar o mostrar otra extensión. Para evitar comportamientos impredecibles, ExtensionDecorator sólo debería usarse en extensiones especiales que deseen personalizar gvSIG, y no deberían instalarse dos extensiones de este tipo al mismo tiempo (de lo contrario, es posible que lo que una de ellas vaya ocultando, la otra lo vaya mostrando y será difícil prever el resultado final, salvo que ambas extensiones realicen estas ocultaciones de forma coordinada).

View source document


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: