[Jde-dev] Ejemplo "hola mundo" de esquemas+GTK

JoseMaria jmplaza en gsyc.es
Mar Ene 27 19:53:50 CET 2009


Hola mozos,

acabo de crear el ticket 217 describiéndolo: "desacoplar de la
inicialización del esquema la inicialización de su interfaz gráfica".
Aquí va una explicación para entender el problema:

Varios esquemas (p.e opengldemo, image_viewer, wiimote_viewer...) tienen
soldada a fuego la inicialización del interfaz gráfico en la
inicialización del esquema (startup). Esto es un problema porque así los
esquemas no arrancan si no están cargados los servicios gráficos (el que
toque). 

Esto dificulta funcionar sin ninguna interfaz gráfica, pero con toda la
funcionalidad de determinados esquemas. Por ejemplo cuando queremos
ejecutar una aplicación de grabación sensores en la placa picoITX, sin
pantalla alguna (lanzada remotamente), o cuando queremos ejecutar una
aplicación de navegación en el robot Pioneer, sin pantalla alguna.

Uno de los principios de diseño de JDE es desacoplar por completo la
funcionalidad de los esquemas de su interfaz gráfica, de modo que las
aplicaciones con esquemas puedan funcionar perfectamente sin GUI. De
hecho, el GUI se concibe básicamente como una herramienta de depuración,
que se activa bajo demanda (guiresume) y se apaga (guisuspend) cuando no
se necesita. Por otro lado la funcionalidad del esquema también puede
detenerse (suspend) o reanudarse (resume). Típicamente las cosas de
visualización se inicializan en la primera ejecución del guiresume. Y
las cosas de ejecución se inicializan en el startup del esquema.

Ocurre que varios esquemas tienen una funcionalidad muy pegada a su
interfaz gráfica. Por ejemplo mastergui, hsvtuner, image_viewer, etc.
Para esos casos no tiene mucho sentido tener activado el esquema y no su
GUI. Por compatibilidad con el caso general, mantengamos que la
inicialización del GUI se ejecuta en la primera invocación a guiresume.
Adicionalmente, en esos casos, podemos hacer que el resume del esquema
invoque a guiresume también, y que la detención del esquema (suspend)
invoque a guisuspend también.

Ánimo,

JoseMaria
PD: Queda nombrado el día de hoy como "día pico del mes" :-) Bien, bien,
se nota actividad...
On Tue, 2009-01-27 at 18:41 +0100, Roberto Calvo wrote:
> El mar, 27-01-2009 a las 18:31 +0100, Eduardo Perdices escribió:
> > Ok, ahí va el parche, solo el cortar y pegar de una función a otra,
> 
> Gracias, si te parece le voy a poner lo del initgui para que quede
> claro.
> 
> 
> >  de todas formas he mirado algunos schemas (opengldemo, image_viewer,
> > wiimote_viewer) y está en todos con el init en el startup.
> 
> Si si, ya te digo que creo que es una herencia del copy&paste, pero que
> es necesario que lo cambiemos, porque sino los esquemas no arrancan si
> no esta cargado los servicios gráficos.
> 
> Me di cuenta al intentar arrancar ciertos esquemas en la picoITX sin
> interfaz gráfica.
> 
> un saludo!
> 
> > 
> > Un saludo
> > 
> > El 27 de enero de 2009 17:59, Roberto Calvo <rocapal en gsyc.es>
> > escribió:
> >         
> >         Genial Eduardo!
> >         
> >         Sólo una cosa, que es necesario cambiar en éste y en todos los
> >         esquemas
> >         que suele pasar.
> >         
> >         En la función startup por conveniencia no puede haber nada
> >         relacionado
> >         con interfaz gráfica, ya que es posible correr el esquema sin
> >         tener
> >         interfaz gráfica (incluso sin tener X en el sistema)
> >         
> >         Por ello, en el ejemplo concreto de opencv, la función
> >         "opencvdemo_init()" no se puede llamar desde el startup. Es
> >         necesario
> >         llamarla desde "image_recording_guiresume". Creo que lo hemos
> >         ido
> >         heredando del copy&paste y es necesario revisarlo y cambiarlo.
> >         
> >         De hecho si la función se llamara opencvdemo_initgui() sería
> >         más
> >         explicativo incluso.
> >         
> >         Eduardo si te parece y generas el parche para tu esquema,
> >         genial :-) Que
> >         lo vimos hace unas semanas Jose María y yo pero el tiempo ...
> >         ya sabes.
> >         
> >         un saludete!!
> >         
> >         El mar, 27-01-2009 a las 17:21 +0100, Eduardo Perdices
> >         escribió:
> >         
> >         
> >         > Hola juan, yo fui quien creó esa entrada del manual, no
> >         tengo el
> >         > código porque solo lo cree para poner la entrada de ejemplo
> >         y hacer la
> >         > captura, después lo borré.
> >         >
> >         > Aun así, entra en mi repositorio, por ejemplo aquí:
> >         >
> >         >
> >         http://svn.jde.gsyc.es/users/eperdes/headtracking/trunk/opencvdemo/
> >         >
> >         > Te explico un poco, los glade se crean con un programa con
> >         el que vas
> >         > creando la interfaz sin necesidad de picar código, el
> >         paquete de linux
> >         > se llama "glade-gnome", con eso generas la interfaz
> >         gráficamente y te
> >         > genera el .glade, en mi schema puedes ver el que se ha
> >         creado con el
> >         > nombre opencvdemo.glade.
> >         >
> >         > Después todos los .h son iguales en todos los chemas, si
> >         abres el
> >         > opencvdemo.h simplemente tienes que cambiar lo de
> >         "opencvdemo" por el
> >         > nombre de tu schema, todo lo demás es igual.
> >         >
> >         > Después en el opencvdemo.c, deja como cabeceras solo esto:
> >         >
> >         > #include "jde.h"
> >         > #include "opencvdemo.h"
> >         > #include <graphics_gtk.h>
> >         > #include <glade/glade.h>
> >         > #include <gtk/gtk.h>
> >         > #include <gdk/gdk.h>
> >         >
> >         > Después, a partir de la linea 102, verás que hay muchas
> >         funciones que
> >         > se llaman "on_active_x_toggled", esas son las funciones que
> >         llama el
> >         > gtk, y que están asignadas en la linea 1025. Todas esas
> >         funciones si
> >         > quieres las puedes borrar y también todas las funciones
> >         propias del
> >         > schema, hasta la linea 536.
> >         >
> >         > Después el resto de funciones tienes que tenerlas, aunque
> >         estén en
> >         > blanco, ya que aparecen en el opencvdemo.h y jde las
> >         utiliza:
> >         >
> >         > La primera es opencvdemo_iteration, esa la puedes dejar en
> >         blanco
> >         > Luego viene opencvdemo_imports, ahí hay que hacer el import
> >         de las
> >         > variables de los drivers que utilices, de momento también la
> >         puedes
> >         > dejar en blanco.
> >         > En opencv_exports, tienes que hacer los 4 exports que vienen
> >         > obligatoriamente, así que es solo cambiar el opencvdemo por
> >         el nombre
> >         > de tu schema.
> >         > opencvdemo_init es siempre parecida, ponla como viene en el
> >         manual.
> >         > opencvdemo_end y stop se pueden quedar en blanco, tal como
> >         están.
> >         > opencvdemo_suspend también es siempre igual, cambiando el
> >         nombre del
> >         > schema.
> >         > opencvdemo_resume, dejalo tal cual está pero quitando las
> >         dos llamadas
> >         > que aparecen de la forma "RGB2HSV_..." que son de la
> >         librería
> >         > colorspaces y que tu no tienes que utlizar.
> >         > opencvdemo_thread, también es siempre igual, solo cambiar
> >         nombres.
> >         > La de opencvdemo_parseconf, la puedes borrar, se usa para
> >         cuando
> >         > tienes tu propio archivo de configuración, pero de momento
> >         no creo que
> >         > tengas, así que borra la función.
> >         > opencvdemo_startup, dejalo como está, pero quitando el
> >         primer if, que
> >         > llama a la función que acabas de borrar.
> >         > Las 3 funciones que faltan, que son guidisplay, guiresume y
> >         guisuspend
> >         > son las 3 propias de la interfaz gráfica, vienen en el
> >         manual, así que
> >         > ponlas como están ahí.
> >         >
> >         > Y nada más, si tienes alguna duda pregunta lo que sea.
> >         >
> >         > Un saludo.
> >         >
> >         > El 27 de enero de 2009 16:43, juan <juan en iearobotics.com>
> >         escribió:
> >         >         Hola,
> >         >
> >         >          He estado mirando esta documentación sobre cómo
> >         hacer
> >         >         esquemas que
> >         >         usen GTK:
> >         >
> >         >
> >         http://jde.gsyc.es/index.php/Manual#Using_GTK_Library
> >         >
> >         >          Me gustaría empezar por ese ejemplo. ¿Alguien tiene
> >         el código
> >         >         completo? Me refiero no sólo al fichero .c, sino
> >         también
> >         >         el .h,
> >         >         el .glade y el Makefile.
> >         >
> >         >         Gracias
> >         >
> >         >         Saludos, Juan
> >         >
> >         >         --
> >         >         Juan Gonzalez Gomez
> >         >         blog: http://www.iearobotics.com/blog/
> >         >         web: http://www.iearobotics.com/juan
> >         >
> >         >         _______________________________________________
> >         >         Jde-developers mailing list
> >         >         Jde-developers en gsyc.es
> >         >
> >         http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
> >         >
> >         > _______________________________________________
> >         > Jde-developers mailing list
> >         > Jde-developers en gsyc.es
> >         >
> >         http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
> >         
> >         --
> >         Roberto Calvo Palomino          | Libre Software Engineering
> >         Lab (GSyC)
> >         Tel: (+34) 91 488 85 23         | Universidad Rey Juan Carlos
> >         Tel: (+34) 91 488 81 05         | Edif. Departamental II -
> >         Despacho 116
> >         rocapal en gsyc.es                 | c/Tulipán s/n 28933 Móstoles
> >         (Madrid)
> >         http://libresoft.es/
> >         
> >         GPG-KEY: http://gsyc.es/~rocapal/rocapal.gpg
> > 
> > documento de texto sencillo adjunto (parche.txt)
> > 945d944
> > <   	opencvdemo_init();
> > 1000a1000
> > >    opencvdemo_init();
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
-- 
http://gsyc.es/jmplaza 
Universidad Rey Juan Carlos




More information about the Jde-developers mailing list