<div dir="ltr"><div><div><div>Muchas gracias Joaquín, muy completa tu ayuda :)<br></div>Voy a verlo y luego te cuento...<br></div>Saludos<br></div>Alicia Duarte - Argentina<br></div><div class="gmail_extra"><br><div class="gmail_quote">El 5 de octubre de 2015, 13:32, Joaquin Jose del Cerro Murciano <span dir="ltr">&lt;<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">El 28 de septiembre de 2015, 16:13, Alicia Duarte <span dir="ltr">&lt;<a href="mailto:duartealicia@yahoo.com.ar" target="_blank">duartealicia@yahoo.com.ar</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Hola a todos!!!<br>Estoy viendo el tema de generar una extensión con scripting, que se dispare desde una opción de menú.<br>
Por lo que he investigado se necesita tener un config.xml donde se 
define la entrada del menú y también se indica acción a ejecutar al 
seleccionarla.<br>
Basándome en un ejemplo que había para versión de gvSIG 1.x configuré de
 esta manera el config.xml. Me agrega la entrada en el menú pero no me 
reconoce el valor de &quot;action-command&quot;.<br>
Existe la manera de poder invocar al archivo .py y al .dlg desde el config.xml en gvSIG 2.x?<br>
<br>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;<br>
&lt;plugin-config&gt;<br>
    &lt;libraries library-dir=&quot;../org.gvsig.scripting.app.extension/scripting&quot;/&gt;<br>
    &lt;depends plugin-name=&quot;org.gvsig.scripting.app.extension&quot;/&gt;<br>
        &lt;resourceBundle name=&quot;text&quot;/&gt;<br>
    &lt;extensions&gt;<br>
        &lt;extension class-name=&quot;org.gvsig.scripting.app.extension.ScriptingExtension&quot;<br>
<br>
            description=&quot;Extensión para el manejo de scripts en gvSIG&quot;<br>
<br>
            active=&quot;true&quot;&gt;<br>
            &lt;menu text=&quot;tools/Scripting/Centrar vista en un punto&quot;<br>
                tooltip=&quot;Centrar la vista en un punto&quot;<br>
                action-command = &quot;show(fileName=&#39;gvSIG/extensiones/centrarVistaSobreUnPunto/centrarVistaSobreUnPunto.xml&#39;,language=&#39;python&#39;,title=&#39;Centrar la vista a un punto&#39;,width=210,height=86)&quot;<br>
                icon=&quot;images/default.png&quot;<br>
                position=&quot;55&quot;<br>
                /&gt;<br>
            &lt;menu text=&quot;tools/Scripting/Borrar puntos&quot;<br>
                tooltip=&quot;Borrar puntos&quot;<br>
                action-command = &quot;run(fileName=&#39;gvSIG/extensiones/centrarVistaSobreUnPunto/limpiarElGraphics.py&#39;,language=&#39;python&#39;)&quot; <br>
                icon=&quot;images/default.png&quot;<br>
                position=&quot;56&quot;<br>
                /&gt;<br>
        &lt;/extension&gt;<br>
    &lt;/extensions&gt;<br>
&lt;/plugin-config&gt;<br>
<br></blockquote></div></blockquote></div></div><div><br>Hola Alicia, <br>perdona por tardar tanto en decir algo, pero estaba fuera y se me paso <br>por alto el correo.<br><br>En principio, lo que quieres hacer no funciona correctamente en gvSIG 2. <br>No se pueden asociar scripts a extensiones en el config.xml (bueno en realidad<br>si se puede pero hay un error en el classpath y no creo que se arregle).<br><br>Ahora bien la forma de hacer lo que quieres seria otra.<br><br>Puedes crear un script que se llame &quot;autorun&quot;. Este script se ejecutara al<br>arrancar gvSIG, y desde el puedes añadir botones a la barra de herramientas<br>o entradas a los menus y  asociarles scripts.<br><br>¿ Donde debes dejar este autorun ?<br>Pues puedes dejarlo en varias partes... puedes dejarlo en el raiz de los <br>scrips de usuario, eso seria lo mas simple... pero solo estaria disponible<br>para ese usuario.<br><br>A falta de poder generar paquetes con nuestros scripts para instalarlos <br>desde el administrador de complementos, podemos meter nuestros scripts<br>dentro de un plugin, y si ahi hay un &quot;autorun&quot; tambien se ejecutaria al <br>arrancar gvSIG.<br><br>Y la ventaja es que podriamos empaquetar el plugin con nuestros scripts para<br>poder instalarlos luego desde el administrador de complementos.<br><br>Ahora ire poniendo los detalles.<br><br>Vamos a crear un plugin que para el ejemplo he llamado &quot;com.acme.testplugin&quot; :)<br>Para ello en la carpeta &quot;gvSIG/extensiones&quot; de la instalacion de gvSIG crearemos<br>las carpetas y ficheros:<br><br>gvSIG/extensiones/com.acme.testplugin<br>gvSIG/extensiones/com.acme.testplugin/scripting<br>gvSIG/extensiones/com.acme.testplugin/scripting/lib <br>gvSIG/extensiones/com.acme.testplugin/scripting/scripts  <br>gvSIG/extensiones/com.acme.testplugin/scripting/scripts/acme.png<br>gvSIG/extensiones/com.acme.testplugin/scripting/scripts/acme.inf<br>gvSIG/extensiones/com.acme.testplugin/scripting/scripts/acme.py<br>gvSIG/extensiones/com.acme.testplugin/scripting/scripts/autorun.inf<br>gvSIG/extensiones/com.acme.testplugin/scripting/scripts/autorun.py<br>gvSIG/extensiones/com.acme.testplugin/config.xml<br>gvSIG/extensiones/com.acme.testplugin/<a href="http://package.info" target="_blank">package.info</a><br><br>Voy contando que tendriamos en cada fichero.<br><br><br>En &quot;acme.py&quot; tendriamos el script que queremos ejecutar desde un boton u opcion <br>de menu. En el caso de ejemplo es muy simple, pero eso ya lo puedes complicar tu.<br><br>#---------------&gt;&lt;----acme.py---&gt;&lt;----------------<br><br>from commonsdialog import *<br><br>def main():<br>  msgbox(&quot;A.C.M.E. ..... Boom!!!!&quot;)<br>  <br>#---------------&gt;&lt;-------------&gt;&lt;----------------<br><br>El acme.png es la imagen que vamos a utilizar en la barra de botones y la entrada de menu,<br>y el acme.inf se crea automaticamente al crear un script desde el composer. <br>Tendria algo como:<br><br>;---------------&gt;&lt;---acme.inf---&gt;&lt;----------------<br>[Unit]<br>name = acme<br>description = <br>createdBy = <br>version = <br><br>[Script]<br>main = main<br>Lang = python<br>;---------------&gt;&lt;-------------&gt;&lt;----------------<br><br>El &quot;<a href="http://package.info" target="_blank">package.info</a>&quot; contiene los metadatos del plugin, y vendria a ser algo como:<br><br>#---------------&gt;&lt;---package.info----&gt;&lt;----------------<br>#Tue Jun 02 11:21:02 CEST 2015<br>owner=ACME Inc <br>code=com.acme.testplugin<br>java-version=j1_7<br>official=false<br>type=plugin<br>version=2.0.100<br>state=final<br>operating-system=all<br>dependencies=required\: org.gvsig.scripting.app.extension -ge 2<br>sources-url=<br>web-url=<br>architecture=all<br>model-version=1.0.1<br>categories=<br>description=This a example plugin make using scripting<br>buildNumber=1<br>gvSIG-version=2.2.0<br>name=ACME<br>#---------------&gt;&lt;-------------&gt;&lt;----------------<br><br>El &quot;config.xml&quot;, sigue siendo necesario, pero en una version minimalista:<span class=""><br><br>&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;<br>&lt;plugin-config&gt;<br></span>  &lt;libraries library-dir=&quot;lib&quot;/&gt;<span class=""><br>  &lt;depends plugin-name=&quot;org.gvsig.scripting.app.extension&quot;/&gt;  <br>  &lt;resourceBundle name=&quot;text&quot;/&gt;<br>  &lt;extensions&gt;<br></span>    &lt;extension class-name=&quot;org.gvsig.andami.LibraryExtension&quot;<br>      description=&quot;&quot;<br>      active=&quot;true&quot;&gt;  <br>  &lt;/extensions&gt;<br>&lt;/plugin-config&gt;<br><br>El &quot;autorun.inf&quot;, pues eso, parecido al &quot;acme.inf&quot;:<br><br>;---------------&gt;&lt;---autorun.inf---&gt;&lt;----------------<br>[Unit]<br>name = autorun<br>description = <br>createdBy = <br>version = <br><br>[Script]<br>main = main<br>Lang = python<br>;---------------&gt;&lt;-------------&gt;&lt;----------------<br><br>Y donde esta el meollo es en el &quot;autorun.py&quot;, pero ya le he puesto<br>comentarios y salvo el problema del bug en el addMenu, creo que<br>el resto se puede entender bastante bien.<br><br>#---------------&gt;&lt;---autorun.py---&gt;&lt;----------------<br>from gvsig import *<br><br>from commonsdialog import msgbox<br><br>from javax.swing import ImageIcon<br><br>from org.gvsig.andami import PluginsLocator<br>from org.gvsig.scripting.app.extension import ScriptingExtension<br>from org.gvsig.tools.swing.api import ToolsSwingLocator<br><br><br>from java.lang import Thread<br>class fixbug_addMenu(Thread):<br>  &quot;&quot;&quot;<br>  Clase de utilidad para rodear un error que hay en la funcion addMenu<br>  al añadir entradas de menu a los menus de gvSIG.<br>  &quot;&quot;&quot;<br>  def __init__(self, name, text):<br>    <a href="http://self.name" target="_blank">self.name</a> = name<br>    self.text = text<br>    self.start()<br><br>  def run(self):<br>    from time import sleep<br>    from  org.gvsig.andami import PluginServices<br>  <br>    sleep(5)<br>    menu = PluginServices.getMainFrame().getComponentByName(<a href="http://self.name" target="_blank">self.name</a>)<br>    menu.setText(self.text)<br><br>    <br>def main():<br>  application = ApplicationLocator.getManager()<br><br>  # Cargamos y registramos el icono en el tema de iconos<br>  iconurl = script.getResource(&quot;acme.png&quot;).toURL()<br>  iconimage = ImageIcon(iconurl)  <br>  iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent()<br>  iconTheme.register(&quot;Scripting&quot;, &quot;action&quot;, &quot;tools-scripting-acme&quot;, iconimage, iconurl)<br>  <br>  # Creamos la accion asociada a nuestro script<br>  actionManager = PluginsLocator.getActionInfoManager()<br>  action = actionManager.createAction(<br>      ScriptingExtension, <br>      &quot;tools-scripting-acme&quot;, <br>      &quot;A.C.M.E.&quot;, <br>      &quot;acme&quot;, # Nombre del script<br>      &quot;tools-scripting-acme&quot;, <br>      None, <br>      1009000000, <br>      &quot;A.C.M.E. Inc.&quot;<br>  )<br>  # Registramos la accion<br>  action = actionManager.registerAction(action)<br><br>  # Cargamos en la barra de botones &quot;acme&quot; nuestro nuevo boton<br>  # asociado a nuestra accion<br>  application.addTool(action, &quot;acme&quot;)<br><br>  # Y damos de alta una entrada de menu asociada a nuesta accion<br>  application.addMenu(action, &quot;tools/Scripting/A.C.M.E.&quot;)<br><br>  # Esto es por que en gvSIG 2.2 hay un error en la funcion addMenu<br>  # y con esto lo rodeamos.<br>  fixbug_addMenu(&quot;tools-scripting-acme&quot;,&quot;A.C.M.E.&quot;)<br>  <br>  msgbox(&quot;A.C.M.E. Inc., instalada&quot;)<br>    <br>#---------------&gt;&lt;-------------&gt;&lt;----------------<br><br>Adjunto tambien el fichero &quot;com.acme.testplugin.zip&quot; con el plugin completo (que <br>basicamente es lo que he incluido ya en el correo salvo el png).<br><br>Y lo unico que quedaria seria generar un paquete con esto.<br><br>Una vez ya tengas creado el plugin, puedes usar la opcion de menu:<br><br>  Herramientas/desarrollo/Crear paquetes de instalacion<br><br>Para crear el paquete.<br><br>Cuando lo aranques, selecciona tu plugin de la lista, y simplemente <br>dandole a siguiente te creara un paquete de instalacion para tu plugin<br>hecho enteramente usando scripting. Ten cuidado de no seleccionar la opcion<br>de &quot;Habilitar modo avanzado&quot;, hay errores en ella y lo mas seguro es que acabes<br>generando un paquete &quot;chungo&quot;.<br><br>Cuando este disponible la opcion de empaquetar nuestros scripts desde el mismo <br>composer, sera bastante mas simple todo esto ya que no precisaremos crear un<br>plugin para hacerlo.<br><br>Espero que te sirva, y si tienes dudas ya sabes pregunta por la lista, en<br>cuanto tenga un ratito contesto.<br><br>Un saludo<br>Joaquin<br><br><br><br><br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=""><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Desde ya muchas gracias.<br>
Saludos<br>
Alicia Duarte - Argentina<br>
</blockquote>
</div>
<br></span>_______________________________________________<br>
gvSIG_desarrolladores mailing list<br>
<a href="mailto:gvSIG_desarrolladores@listserv.gva.es" target="_blank">gvSIG_desarrolladores@listserv.gva.es</a><br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>
<br></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><br>-- <br><div>--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br><a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a><br>gvSIG Association<br><a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br><a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a></div>
</font></span></div></div>
<br>_______________________________________________<br>
gvSIG_desarrolladores mailing list<br>
<a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a><br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>
<br></blockquote></div><br></div>