ProgramacionGTKenC/CapituloVIII

De Wiki GNOME Chile
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(GtkWidgets)
(Conceptos avanzados en GTK+)
Línea 4: Línea 4:
  
 
Cubramos cada uno de ellos aqui, de menor a mayor complejidad.
 
Cubramos cada uno de ellos aqui, de menor a mayor complejidad.
 
== Señales ==
 
  
 
Habiamos visto que cada uno de los widgets recibe (y emite) señales. Estas son tomadas por el subsistema de GTK+ y ejecuta las funciones pertinentes, permitiendo que los programas dejen de ser aburridos y ejecuten mas acciones, con o sin la ayuda del usuario.
 
Habiamos visto que cada uno de los widgets recibe (y emite) señales. Estas son tomadas por el subsistema de GTK+ y ejecuta las funciones pertinentes, permitiendo que los programas dejen de ser aburridos y ejecuten mas acciones, con o sin la ayuda del usuario.
Línea 21: Línea 19:
 
No crean que es la unica señal que es capaz de recibir el boton (ni otros widgets). Antes de continuar, hay que entender un poco la jerarquia de objetos de GTK+.
 
No crean que es la unica señal que es capaz de recibir el boton (ni otros widgets). Antes de continuar, hay que entender un poco la jerarquia de objetos de GTK+.
  
=== Objetos ===
+
== Objetos ==
  
 
Habia dicho de un principio que todos los widgets son herencia de GObject, y a GtkWidget, y esta es una de las razones que la declaracion de los widgets en codigo pueda ser:
 
Habia dicho de un principio que todos los widgets son herencia de GObject, y a GtkWidget, y esta es una de las razones que la declaracion de los widgets en codigo pueda ser:
Línea 73: Línea 71:
 
La unica señal que puede recibir un GObject es "notify", que es usada para emitir advertencias acerca de propiedades no esperadas o no soportadas por el objeto. Por ejemplo, si queremos preguntar por "title" en un widget de boton.
 
La unica señal que puede recibir un GObject es "notify", que es usada para emitir advertencias acerca de propiedades no esperadas o no soportadas por el objeto. Por ejemplo, si queremos preguntar por "title" en un widget de boton.
  
=== GtkWidgets ===
+
== GtkWidgets ==
  
 
Los GtkWidgets son capaces de recibir muchas señales. La lista completa es:
 
Los GtkWidgets son capaces de recibir muchas señales. La lista completa es:

Revisión de 06:44 5 sep 2006

Conceptos avanzados en GTK+

Hemos quedado con un monton de dudas hasta el momento acerca de algunos de los ejemplos presentados anteriormente.

Cubramos cada uno de ellos aqui, de menor a mayor complejidad.

Habiamos visto que cada uno de los widgets recibe (y emite) señales. Estas son tomadas por el subsistema de GTK+ y ejecuta las funciones pertinentes, permitiendo que los programas dejen de ser aburridos y ejecuten mas acciones, con o sin la ayuda del usuario.

Una señal que se ha visto seguido es la asociada al widget boton:

g_signal_connect ((GObject *) boton_n,"clicked", (GCallback * ) funcion_n, NULL);

esto es que la funcion "funcion_n" es ejecutada al momento de hacer clic en el boton "boton_n".

Antiguamente (y en varios ejemplos antiguos) se ve que la funcion se llamaba gtk_signal_connect(). Esta es una funcion que se depreco desde la version 2.x de GTK+.

No crean que es la unica señal que es capaz de recibir el boton (ni otros widgets). Antes de continuar, hay que entender un poco la jerarquia de objetos de GTK+.

Objetos

Habia dicho de un principio que todos los widgets son herencia de GObject, y a GtkWidget, y esta es una de las razones que la declaracion de los widgets en codigo pueda ser:

GtkWidget * widget1;
GtkWidget * widget2;
...

Ser "hijos" de GObject les permite, por ejemplo, la emision y recepcion de señales (de ahi la funcion g_object_signal).

Los GObjects es el tipo fundamental para los atributos y objetos en GTK+. Esto permite tener una serie de fundaciones (funciones base) para la construccion de objetos, acceso a metodos y soporte de señales.

Un GObject posee solo cuatro funciones basicas:

  • get_property()
  • set_property()
  • dispose()
  • finalize()

Solo nos centraremos en las primeras dos.

Habiamos visto hace algunas entregas atras que podemos cambiar algunas propiedades de los widgets.

Un ejemplo simple:

gtk_window_set_title((GtkWindow *) ventana, "titulo de la ventana");

Esto solo cambia el titulo de la ventana a "titulo de la ventana".

Revisando un poco la documentacion de GTK+, se puede ver que el widget de ventana posee la propiedad "title" (titulo). Esta la podemos cambiar con la funcion anterior (gtk_window_set_title). Pero como un widget es un GObject, podemos cambiar la propiedad "title" usando una funcion de GObject:

g_object_set_property((Gobject *) ventana, "title", "titulo de la ventana");

Ademas, las funciones de GObject nos permiten cambiar multiples propiedades de un widget!

g_object_set((GObject *) ventana, 
                         "title", "titulo de la ventana",
                         "default-height", 100,
                         "default-width", 200,
                         "accept-focus", TRUE,
                         "destroy-with-parent", TRUE,
                         NULL);

La unica señal que puede recibir un GObject es "notify", que es usada para emitir advertencias acerca de propiedades no esperadas o no soportadas por el objeto. Por ejemplo, si queremos preguntar por "title" en un widget de boton.

GtkWidgets

Los GtkWidgets son capaces de recibir muchas señales. La lista completa es:

  • accel-closures-changed
  • button-press-event
  • button-release-event
  • can-activate-accel
  • child-notify
  • client-event
  • configure-event
  • delete-event
  • destroy-event
  • direction-changed
  • drag-begin
  • drag-data-delete
  • drag-data-get
  • drag-data-received
  • drag-drop
  • drag-end
  • drag-leave
  • drag-motion
  • enter-notify-event
  • event
  • event-after
  • expose-event
  • focus
  • focus-in-event
  • focus-out-event
  • grab-broken-event
  • grab-focus
  • grab-notify
  • hide
  • hierarchy-changed
  • key-press-event
  • key-release-event
  • leave-notify-event
  • map
  • map-event
  • mnemonic-activate
  • motion-notify-event
  • no-expose-event
  • parent-set
  • popup-menu
  • property-notify-event
  • proximity-in-event
  • proximity-out-event
  • realize
  • screen-changed
  • scroll-event
  • selection-clear-event
  • selection-get
  • selection-notify-event
  • selection-received
  • selection-request-event
  • show
  • show-help
  • size-allocate
  • size-request
  • state-changed
  • style-set
  • unmap
  • unmap-event
  • unrealize
  • visibility-notify-event
  • window-state-event

Cada una de estas señales posee una funcion tipo asociada. Por ejemplo, "selection-get":

void user_function (GtkWidget * widget,
                    GtkSelectionData * data,
                    guint info,
                    guint time,
                    gpointer user_data);

mientras que "grab-broken-event"

gboolean user_function (GtkWidget * widget,
                        GdkEvent * event,
                        gpointer user_data);

Todas las funciones tienen como primer argumento "GtkWidget * widget", que es el widget que origina la señal, y como ultimo argumento "gpointer data" que es un tipo de dato cualquiera (un puntero).

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas