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