Nombres de iconos, menus y acciones en gvSIG 2.0 II: aplicandolo en gvSIG.

Hace un par de días empezamos una pequeñita serie de artículos relacionada con los nombres de iconos, menús y acciones con el articulo “Nombres de iconos, menús y acciones en gvSIG 2.0 (I)“, voy a continuar comentando algunas cosillas mas que pueden ser interesantes para los desarrolladores.

Cuando creamos un plugin para gvSIG, lo normal, es que queramos añadir alguna opción a los menús, o algún botón a la barra de botones de la aplicación. Para hacer esto deberemos hacerlo indicándolo en el fichero config.xml, al igual que lo hacíamos en versiones anteriores de gvSIG. Sin embargo en la versión 2 se ha introducido un concepto nuevo, el de acción.

Una acción, como su nombre indica, identifica una acción que el usuario puede realizar sobre gvSIG, sin estar ligada a un menú o botón de la barra de herramientas. Las acciones pueden ser invocadas o enlazadas desde cualquier parte de gvSIG, solo tenemos que saber su nombre. La acción lleva una serie de datos asociados:

  • Un nombre que la identifica de forma única dentro de todas las acciones registradas en la aplicación.
  • Una etiqueta, que puede ser utilizada para presentar esta, por ejemplo en un botón o en un menú contextual.
  • Un tip, con una pequeña descripción de lo que realiza la acción, para poder presentarlo en botones, o menús.
  • Un icono que la representa, para ser usado, por ejemplo, en botones.
  • Un acelerador de teclado asociado a la acción para el caso en que sea necesario.
  • Una posición absoluta respecto al resto de acciones.
  • Un código asociado a esta para calcular cuando debe estar visible o habilitada la acción o cual es el código asociado a la ejecución de la acción.

El disponer de esta información centralizada asociada a una acción nos permite que se presenten estas de forma homogénea no importa desde donde lo hagan. Siempre pueden tener la misma etiqueta o el mismo icono o el mismo acelerador o la misma posición respecto a otras acciones.

Así si queremos presentar la misma acción en un menú y un botón de la barra de botones solo tendremos que asociar la acción al menú o la barra y añadir el resto de opciones que precisen estos y que no están definidas en la acción.

La clase que representa la acción no puede ser sobreescrita por código. Se trata de una clase que ofrece andami como un servicio suyo, y el programador la puede utilizar, pero no sobrecargar… entonces… ¿ Como se aporta el código asociado a una acción ?

Para aportar el código asociado a una acción se utiliza el mecanismo de extensiones que ya existía en gvSIG en versiones anteriores. Una acción lleva asociado:

  • Un plugin que la contiene.
  • Una IExtension que aporta la lógica de esta.
  • Un action-command, para identificar la acción en la extensión.

Como configurar las acciones y menus

Para configurar las acciones, menús y botones de herramientas en gvSIG se usa el fichero config.xml. Este fichero tiene la configuración general de nuestro plugin; que extensiones lo componen, que acciones aportan, que menús, barras de herramientas y botones de estas.

Vamos a suponer que tenemos una extensión que nos permite importar imágenes de una carpeta como símbolos puntuales de gvSIG, y queremos añadir al menú Tools, submenu Symbology una entrada Import point symbols. Lo primero que tendríamos que hacer seria definir nuestra acción. Veamos como lo tendríamos que hacer. Nuestra acción tendría los siguientes atributos:

  • name, que tendrá el nombre de la acción, en nuestro caso la llamaremos “tools-symbology-import-point-symbols“.
  • label, que contendrá una etiqueta que represente a la acción. Esta etiqueta sera traducida al lenguaje en el que se encuentre gvSIG ejecutándose y deberá estar registrada en la BBDD de traducciones de la aplicación. En nuestro caso pondremos “_import_point_symbols“.
  • tooltip, con una pequeña descripción a usar como tip en donde proceda, pondremos “_import_images_from_folder_as_point_symbols“. Esta cadena también se traducirá antes de ser usada.
  • icon, aquí pondremos el nombre del icono a usar del tema de iconos que este cargado en gvSIG. Normalmente nuestra extensión, se encargara de registrar un icono por defecto en el tema de iconos con el nombre que aquí indiquemos. Pondremos “tools-symbology-import-point-symbols
  • position, indicaremos la posición absoluta respecto al resto de acciones. Pondremos “900400200“.
  • accelerator, en donde indicaríamos que acelerador de teclado queremos asociar a esta acción. El formato para especificar el acelerador de teclado seria:

    modificador + tecla

    Sin espacios, donde modificador podría ser uno o varios de los siguientes separados por el carácter +:

    • CTRL
    • SHIFT
    • META
    • ALT

    Y las teclas serian:

    • Letras de la A a la Z
    • Números del 0 al 9
    • Cadenas de F1 a F12
    • La cadena DELETE.

    Para nuestro ejemplo no indicaremos ninguna tecla aceleradora, y para ello bastara con dejar el valor a “” o simplemente no especificar el atributo.

  • action-command, que sera el valor pasado a nuestra extensión cuando se invoque al método execute, en nuestro caso pondremos el mismo que dimos a nuestra acción, “tools-symbology-import-point-symbols

Todo esto junto quedaría:

<action 
   name="tools-symbology-import-point-symbols" 
   label="_import_point_symbols"
   tooltip="_import_images_from_folder_as_point_symbols" 
   action-command="tools-symbology-import-point-symbols"
   icon="tools-symbology-import-point-symbols" 
   position="900400200" 
   accelerator="" 
/>

Una vez definida nuestra acción, ya podríamos usarla para asociarla a menús o botones. En nuestro caso habíamos pensado asociarla a un menú. Para hacer esto tendríamos que dar al menú el mismo nombre que la acción y luego bastaría con rellenar el atributo “text“. Quedaría algo como:

<menu
     name="tools-symbology-import-point-symbols" 
     text="tools/Symbology/Import_point_symbols"
/>

Si quisiésemos añadirla también a los botones podríamos crear una barra de herramientas y añadirle a ella el botón. Para añadir la barra de herramientas lo podríamos hacer con:

<tool-bar name="symbology" position="10">
  <action-tool name="tools-symbology-import-point-symbols" />
</tool-bar>

Con esto crearíamos la barra de herramientas “symbology” si esta no existiese, y le añadiría un botón con los datos de nuestra acción. Para ello basta con nombrar al botón igual que la acción que ya habíamos definido.

Las tres etiquetas que hemos visto deberían ir dentro de la la etiqueta que define nuestra extensión, “extensión“. Veamos como podría quedar nuestro “config.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin-config>
  <libraries library-dir="lib" />
  <depends plugin-name="org.gvsig.app" />
  <resourceBundle name="text" />
  <extensions>
    <extension
      class-name="org.gvsig.symbology.app.importsymbols.ImportSymbolsExtension"
      description="Import images from a folder as point symbols" 
      active="true">

      <action 
         name="tools-symbology-import-point-symbols" 
         label="_import_point_symbols"
         tooltip="_import_images_from_folder_as_point_symbols" 
         action-command="tools-symbology-import-point-symbols"
         icon="tools-symbology-import-point-symbols" 
         position="900400200" 
         accelerator="" 
      />
      <menu
           name="tools-symbology-import-point-symbols" 
           text="tools/Symbology/Import_point_symbols"
            />
    </extension>
  </extensions>
</plugin-config>

About Joaquin del Cerro

Development and software arquitecture manager at gvSIG Team. gvSIG Association
This entry was posted in development, gvSIG Desktop, spanish. Bookmark the permalink.

One Response to Nombres de iconos, menus y acciones en gvSIG 2.0 II: aplicandolo en gvSIG.

  1. Pingback: Nombres de iconos, menus y acciones en gvSIG 2.0 III: convenios de nombrado. | gvSIG blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s