Está en la página 1de 50

Www.amistosamentelinux.blogspot.

coM

Glade 3 Tutorial
contenido
Glade-3 tutorial
Introduccin
La construccin de la interfaz
Tamao de la negociacin
GtkTreeView datos back-end
Modificacin de rbol de widgets
Seales

(1) - Introduccin tutorial Glade3


Hola de nuevo.
En la siguiente serie de mensajes voy a tratar de mostrar algunas de las tcnicas que utilizan
personalmente al desarrollo de aplicaciones utilizando Glade3.
Qu vamos a cdigo
Nuestra aplicacin muestra ser sencillo, pero totalmente funcional visor grfico y editor. Las cosas que
voy a demostrar a travs de esta aplicacin de ejemplo son:
Cmo acercarse a nuevo proyecto que va a utilizar Glade3 como diseador de interfaz grfica
de usuario.
Cmo utilizar Glade3 para crear elementos visuales de la aplicacin.
Cmo utilizar Glade3 para crear objetos de almacenamiento de datos para su aplicacin.
Cmo conectar las funciones de devolucin de llamada a las seales de los widgets.
Cmo dibujar en los widgets con la biblioteca de grficos Cairo.
Cmo utilizar Pango de El Cairo con pangocairo.
Cmo crear mens basados en la accin y la barra de herramientas.
Puedo aadir otras cosas a esta lista si el inters / necesidad.
Quin puede estar interesado en esta serie de posts?
Voy a hacer mi mejor esfuerzo para escribir este tutorial "recin llegado a GTK +" amable y tratar de
explicar casi todo lo que voy a hacer. Los usuarios experimentados pueden morir de aburrimiento al
leer una seccin que explica algo fundamental, as que por favor, si usted es GTK + gur, lea esta serie
con precaucin;).

Www.amistosamentelinux.blogspot.coM
Primeros pasos
OK, ya que parece que me dio la oportunidad de mostrar cmo suelen trabajar, vamos a empezar.
El trabajo de hoy se divide en dos secciones:
1. Creacin de "modelo" de interfaz grfica de usuario de nuestra aplicacin basada en los
requisitos.
2. Escribir rbol de widgets, en base a plan de la seccin anterior.
Ahora, cules son los requisitos para nuestra aplicacin. Obviamente, tiene que ser capaz de mostrar
datos en forma numrica y grfica. Tambin queremos ser capaces de aadir nuevos, eliminar,
redistribuir y modificar puntos. Tambin queremos ser capaces de ver los marcadores de puntos, lneas
de conexin o de ambos en la tabla. Y se trata de que los requisitos iniciales. Vamos a dejar algo de
espacio para futuras ampliaciones en nuestros planes, por si acaso si decidimos aadir nada a ella ms
tarde.
Ahora viene la parte divertida - interfaz de dibujo. Yo prefiero hacer esto en papel con lpiz, pero se
siente libre para experimentar. Para proyecto de ejemplo, se me ocurri con este diseo:

Oscuro rectngulos grises representan las barras de desplazamiento. Qu piensa usted? No soy muy
malo como diseador de interfaz o lo que realmente aspirar como diseador de interfaz;)
Ya por la ltima cosa que necesitamos hacer hoy: escribir rbol de widgets. En GTK +, todo empieza

Www.amistosamentelinux.blogspot.coM
con la de nivel superior GtkWindow , que servir como una raz de nuestro rbol de widgets.
Nuestra ventana principal se divide en cuatro secciones verticales: una para la barra de men, uno para
la barra de herramientas, una para la parte central donde toda la accin va a suceder y una ltima para
la barra de estado. Desde nuestra ventana principal ( GtkWindow ) slo puede tener un control hijo,
necesitamos GtkVBox en que embalamos, de abajo hacia arriba: GtkStatusbar , widget para la parte
central, GtkToolbar y GtkMenuBar . Por qu digo que vamos a estar de embalaje de la parte inferior?
Voy a explicar esto en el prximo post, cuando vamos a estar jugando con Glade3.
Parte central tendr que ser dividida en secciones horizontales: uno para la tabla de datos, uno de los
controles y un punto para el rea de visualizacin. As que para ello ser necesario GtkHBox . Qu
widgets que necesitamos dentro de ella? Para la tabla de datos que usaremos GtkTreeView , que est
lleno el interior GtkScrolledWindow para poder desplazarse. Para los controles de los puntos que
necesitaremos GtkVButtonBox que albergar nuestros botones.
Ahora para el rea de visualizacin. Volvemos a tener dos partes: la parte superior que en realidad
visualizacin de cartas, y parte inferior que se sostenga los botones de verificacin. As que vamos a
necesitar otra GtkVBox para sostener toda la seccin. La parte inferior estar representado por
GtkHButtonBox con GtkToggleButtons, mientras que la parte superior merece otro prrafo;).
Por qu otro prrafo? Debido a que tendr que aadir un buen widgets pocos con el fin de obtener la
disposicin deseada. Como se puede ver en mi dibujo, quiero tener rea grfica centrada en parte de la
pantalla. Con el fin de poder agregar zoom en grficos de reas, tambin es necesario algn tipo de
widget de desplazamiento. Y cmo montar todo esto? En primer lugar vamos a aadir
GtkScrolledWindow a GtkVBox en el apartado anterior. Para hacer el contenido desplazable, que
necesitamos para empacar GtkViewport dentro GtkScrolledWindow . Dentro GtkViewport vamos a
aadir GtkAlignment , que se encargar de centrar el rea de grfico. Dentro GtkAlignment vamos a
aadir GtkFrame , que aadir una sombra al grfico de reas. Por ltimo, aadimos GtkDrawing rea
dentro GtkFrame . Y hemos terminado.
Si convertimos esta descripcin detallada en la representacin en forma de rbol, obtenemos lo
siguiente:
GtkWindow
- GtkVBox
+ - GtkMenuBar
| `- / * Los mens aqu * /
+ - GtkToolbar
| `- / * Botones de herramientas aqu * /
+ - GtkHBox
| + - GtkScrolledWindow
| | `- GtkTreeView
| + - GtkVButtonBox
| | `- Botones * aqu * /
| + - GtkVBox
| + - GtkScrolledWindow
| | `- GtkViewport
| | `- GtkAlignment
| | `- GtkFrame
| | `- GtkDrawingArea

Www.amistosamentelinux.blogspot.coM
| `- GtkHButtonBox
| `- / * Comprobar botones aqu * /
- GtkStatusBar

Slo hay una cosa que me gustara explicar hoy. Al agregar GtkTreeView a GtkScrolledWindow no he
utilizado GtkViewport como un adaptador de flash, al tiempo que aade GtkAlignment exiga una. Por
qu? Cuando se trata de GtkScrolledWindow , hay dos tipos de reproductores: los que el
desplazamiento de apoyo de forma nativa y los que no lo hacen. GtkTreeView , GtkTextView ,
GtkIconView y GtkViewport hacer desplazamiento de apoyo y se puede agregar en
GtkScrolledWindow directamente. Todos los otros widgets necesidad GtkViewport como un adaptador.
Espero que esta leccin de partida no era demasiado difcil y usted conmigo la prxima vez vamos a
arrancar Glade3 y hacer algo de planchado de la propiedad.

Glade3 tutorial (2) - La construccin de la interfaz


Bienvenido de nuevo.
En esta parte del tutorial, vamos a crear Glade3 aplicacin GUI utilizando de acuerdo a nuestro modelo
y el rbol de widgets. Para comprobar cmo nuestra interfaz grfica de usuario se parece, tambin
vamos a escribir una aplicacin minimalista.
Voy a estar utilizando Glade3-3.6.7 en este tutorial, pero cualquier versin de 3.6 serie har. Nuestro
proyecto se guardar como un proyecto GtkBuilder y usaremos GtkBuilder para crear nuestra interfaz
en tiempo de ejecucin. Glade3-3.4.5 no se puede utilizar al seguir este tutorial, ya que vamos a utilizar
algunas nuevas caractersticas de Glade3 que se introdujeron en el 3,6 serie.
La construccin de la interfaz
Trat de documentar cada paso en la creacin de interfaz grfica de usuario con pantalla e
instrucciones. Video del proceso real se puede encontrar en el sitio ScreenToaster .
Al iniciar Glade3 sin necesidad de abrir proyecto, es recibido por dos ventanas: la ventana principal de
la aplicacin que va a utilizar para crear la interfaz y dilogo de preferencias que permite configurar
algunos parmetros del proyecto.

Www.amistosamentelinux.blogspot.coM

Usted puede ver en esta pantalla que vamos a estar utilizando GtkBuilder formato de proyecto con los
nombres de objeto que se est nicos a travs de todo el proyecto. No vamos a estar usando alguna de
las imgenes en este proyecto, por lo localizacin de recursos no es importante para nosotros. Por
ltimo, este proyecto ser compatible con GTK +> = 2.14, lo que debera hacer posible su utilizacin
en la mayora de distribuciones que hay. Usted puede revisar su proyecto para las incompatibilidades de
este cuadro de dilogo tambin, pero ya estamos empezando poject nuevo, esto no es necesario. Lo
ltimo es hacer clic en Cerrar y hemos terminado con la configuracin inicial.
Ahora es el momento para colocar ventana principal en el proyecto inicial. Simplemente haz clic en
"Ventana" en el icono "Toplevels categora y usted debera ver algo como esto:

Www.amistosamentelinux.blogspot.coM

Ahora vamos a configurar ttulo de la ventana a la "Carta" y el tamao por defecto de 600 x 400 px.

Www.amistosamentelinux.blogspot.coM
Ahora tenemos que cambiar a "comn" ficha en la seccin propiedades y establecer "ancho de la
frontera" a 6 px.

Lo ltimo que tenemos que hacer con la ventana principal es conectar la funcin gtk_main_quit a
"destruir" la seal. Esto cerrar nuestra aplicacin cuando usted haga clic en el botn de cierre. Voy a
hablar ms acerca de las seales en uno de los siguientes puestos, por lo que ningn detalle se le dar
aqu.

Www.amistosamentelinux.blogspot.coM

Con nuestra ventana principal terminado, tenemos que aadir GtkVBox a ella. En el post anterior, nos
propusimos aadir cuatro widgets dentro de este cuadro, pero como barra de mens y barra de
herramientas se pueden crear utilizando GtkUIManager y insertados manualmente desde el cdigo,
slo se necesitan dos. As que cuando se nos pide sobre el nmero de elementos, escriba 2.

Www.amistosamentelinux.blogspot.coM
Ahora vamos a aadir la barra de estado de la aplicacin. Haga clic en icono de la barra de estado y la
inserta en la parte inferior de la caja. Su interfaz grfica de usuario debe ser parecido a esto:

Ahora tenemos que asegurarnos de que la barra de estado est lleno de abajo hacia arriba. Por qu es
importante esto? Si queremos empacar barra de estado de arriba a abajo, sera imposible aadir mens
y barra de herramientas en la parte superior de la solicitud. Cmo asegurar que la barra de estado est
lleno de abajo hacia arriba? Seleccione "Embalaje ficha" y seleccionar "End" como el tipo de paquete y
ajuste "de posicin" a 0. Qu hace esto? Se instruye a Glade para empacar barra de estado como
primer elemento de abajo hacia arriba.

Www.amistosamentelinux.blogspot.coM

Siguiente es una caja horizontal que celebrar tres widgets. Creacin de una es exactamente lo mismo
que crear caja vertical. No te olvides de ajustar el tipo de paquete de esta casilla para "Fin" demasiado!

Www.amistosamentelinux.blogspot.coM

De acuerdo a nuestro rbol de widgets, es necesario desplazar a la ventana de insertar en el


compartimiento de primera. Y puesto que slo queremos tener presente la barra de desplazamiento
vertical cuando sea necesario, tenemos que ajustar la poltica barra de desplazamiento horizontal
tambin.

Www.amistosamentelinux.blogspot.coM

Insercin de vista de rbol en ventana de desplazamiento es fcil. Haga clic en el icono de vista de
rbol e insertarlo en ventana de desplazamiento. Cuando se le pregunt sobre el modelo TreeView, deje
el campo vaco y haga clic en Aceptar (vamos a estar tratando con esto cuando vamos a aadir
almacenamiento de datos a nuestra aplicacin).

Www.amistosamentelinux.blogspot.coM

Dentro de segundo campo de caja horizontal va caja de botones vertical que tendr botones para
modificar los datos dentro de la vista de rbol. Vamos a necesitar seis botones dentro de este cuadro:
"moverse hacia arriba", "hacia arriba", "aadir", "eliminar", "modo de abajo" y "moverse hacia abajo".
As que cuando nos pregunt sobre el nmero de campos al crear caja de botones verticales, entramos 6
y haga clic en Aceptar. A continuacin, tenemos que modificar algunas de las propiedades de la caja de
botones. Vamos a fijar el "estilo de diseo" para "Centro", "espacio" a 2 y "homognea" a "S".

Www.amistosamentelinux.blogspot.coM

En "embalaje" ficha, hemos creado la "Expandir" propiedad "no", ya que queremos que los botones
para tener el menor espacio posible.

Www.amistosamentelinux.blogspot.coM

Creacin de botones es muy sencillo. Simplemente haga clic en icono del botn y colocarla en el
espacio apropiado. Ahora, bajo la bsqueda pestaa "General" por "el botn de archivo" y en "Top"
(Glade convertir icono que seleccione al nombre de archivo automticamente los elementos, as que
no te preocupes por lo que est escrito en el campo de archivo del botn).

Utilizando exactamente los mismos pasos que crear otros cinco botones. Iconos para ellos debe ser
"Up", "Agregar", "Eliminar", "Down" y "Abajo".

ltima campo vaco en caja horizontal debe ser, segn nuestro rbol de widgets, lleno de caja vertical
que albergar dos widgets hijos. El resultado final debera ser algo como esto:

En el interior del compartimiento inferior, tenemos que aadir caja de botones horizontales por dos
botones de alternar. Tambin vamos a establecer "el estilo de diseo" para "Centro", "espacio" a 2 y
"homognea" a "S".

Www.amistosamentelinux.blogspot.coM

En envase, ponga "Expandir" propiedad "no", ya que queremos que esta seccin para tener el menor
espacio posible.

Agregar botones de este cuadro es muy similar a la adicin a la caja vertical. Pero vamos a aadir
botones de activacin aqu en lugar de las normales. Simplemente haga clic en Comprobar icono del
botn y la inserta en el espacio vaco dentro de la caja botn. Despus de eso, cambiar la etiqueta del
botn de "Mostrar puntos". Repita los pasos para crear el botn de verificacin segundo y etiqueta
cambia a "Mostrar lneas".

Www.amistosamentelinux.blogspot.coM

La parte superior de la caja vertical albergar ventana de desplazamiento. Aadir exactamente lo mismo
que hemos aadido la parte de datos. Dentro de esta ventana de desplazamiento que tenemos que
insertar vista.

Www.amistosamentelinux.blogspot.coM

Siguiente en el rbol de widget es la alineacin que se encargar de centrar el rea de dibujo. Crear una
es muy sencillo: simplemente haga clic en el icono de alineacin y la inserta en ventanilla. Tambin
tenemos que modificar los valores de escala horizontal y vertical. Los de control de dos de la expansin
del control hijo. El valor 1 significa "hijo Ampliar la medida de lo posible", 0 significa "no ampliar a
todos los nios", mientras que 0.4 significa "hijo Expandir para tomar 40% del tamao asignado".
Vamos a fijar ambos valores a 0, ya que queremos que nuestros nios a ser constante en el tamao.

Www.amistosamentelinux.blogspot.coM

marco de Insercin tiene algo de trabajo en nuestro caso, ya que Glade3 hace algunas cosas por defecto
que no necesitamos. Haga clic en icono del marco y la inserta en la alineacin. Cambiar "sombra del
marco" a "In" y que debe terminar con algo como esto:

Se puede ver que Glade agrega automticamente la etiqueta y la alineacin en el marco. No


necesitamos ninguna, as que vamos a eliminar a los dos. As es como se ven las cosas despus de la
eliminacin:

Y nos quedamos con un solo flash de paquete: rea de dibujo. Haga clic en el icono y la inserta en el
compartimiento inferior del marco (de arriba se deja vaco, ya que no queremos ninguna etiqueta). En
"comn", la solicitud de tamao conjunto de widgets de 300 x 200 px y ya est.

Www.amistosamentelinux.blogspot.coM

Slo hay una cosa por hacer para hoy: guardar y probar esta interfaz grfica de usuario. Vamos a
escribir aplicaciones C muy simple para esta tarea. No voy a explicar mucho sobre el cdigo de hoy, ya
que vamos a tratar con la codificacin de mensajes ms tarde, pero la mayor parte del cdigo debe ser
fcil de entender.
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">/*</span> / *</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">*
Compile me with:</span> * Recopilar m con:</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">*
gcc -o tut tut.c $(pkg-config --cflags --libs gtk+-2.0 gmodule2.0)</span> * Gcc-o tut tut.c $ (pkg-config - cflags - libs gtk +
-2.0 GModule-2.0)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">*/</span> * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#include <gtk/gtk.h></span> # Include <gtk/gtk.h></span>

Www.amistosamentelinux.blogspot.coM
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">int</span> int</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">main( int argc,</span> main (int argc,</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">char
**argv )</span> char ** argv)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">{</span> {</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GtkBuilder *builder;</span> GtkBuilder * constructor;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GtkWidget *window;</span> GtkWidget * ventana;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GError *error = NULL;</span> GError * error = NULL;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Init GTK+ */</span> / * Inicializacin de GTK + * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_init( &argc, &argv );</span> gtk_init (& argc, &
argv);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Create new GtkBuilder object */</span> / * * Crear nuevo objeto
GtkBuilder /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">builder = gtk_builder_new();</span> constructor =
gtk_builder_new ();</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Load UI from file.</span> / * Cargar la interfaz de usuario desde un
archivo.</span> <span onmouseover="_tipon(this)"
onmouseout="_tipoff()"><span class="google-src-text"
style="direction: ltr; text-align: left">If error occurs, report it
and quit application.</span> Si el error se produce, se informe y

Www.amistosamentelinux.blogspot.coM
salir de la aplicacin.</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">*
Replace "tut.glade" with your saved project.</span> * Reemplace
"tut.glade" con su proyecto guardado.</span> <span
onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">*/</span> * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">if( ! gtk_builder_add_from_file( builder, "tut.glade", &error )
)</span> if (! gtk_builder_add_from_file (constructor, "tut.glade", y
error))</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">{</span> {</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">g_warning( "%s", error->message );</span> g_warning ("% s",
mensaje de error->);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">g_free( error );</span> g_free (error);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">return( 1 );</span> retorno (1);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">}</span> }</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Get main window pointer from UI */</span> / * Obtener puntero de la
ventana principal de la interfaz de usuario * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">window = GTK_WIDGET( gtk_builder_get_object( builder, "window1"
) );</span> ventana = GTK_WIDGET (gtk_builder_get_object
(constructor, "Window1"));</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Connect signals */</span> / * Conectar las seales * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_builder_connect_signals( builder, NULL );</span>

Www.amistosamentelinux.blogspot.coM
gtk_builder_connect_signals (constructor, NULL);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Destroy builder, since we don't need it anymore */</span> / *
Destruye constructora, ya que no se necesita ms * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">g_object_unref( G_OBJECT( builder ) );</span> g_object_unref
(G_OBJECT (constructor));</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Show window.</span> / * Mostrar ventana.</span> <span
onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">All
other widgets are automatically shown by GtkBuilder */</span> Todos
los otros widgets se muestran automticamente por GtkBuilder *
/</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_widget_show( window );</span> gtk_widget_show
(ventana);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Start main loop */</span> / * Iniciar el ciclo principal * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_main();</span> gtk_main ();</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">return( 0 );</span> return (0);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">}</span> }</span>
Ahora ejecute el cdigo y se sorprender;). No est mal, pero nada especial tampoco. Trate de cambiar
el tamao de la ventana para ver cmo se comportan cuando se cambia el tamao de los
compartimentos. Te gusta? Yo tampoco, as que conmigo la prxima vez vamos a estar tratando con
alocation espacio / requisicin en detalle.
Y hemos terminado. Si necesita ms detallada el proceso de hacer clic / cambiar las propiedades, la
cabeza de sitio ScreenToaster , donde se puede ver el video de todo el asunto. Esperamos que sea de
utilidad.

Www.amistosamentelinux.blogspot.coM
glade final se puede obtener desde aqu: tut.glade .

Glade3 tutorial (3) - Tamao de la negociacin


Hola.
La ltima vez que hemos conseguido crear inicial GUI para nuestra "Carta" de la aplicacin. Hoy
vamos a tratar de hacerlo ms flexible. Voy a explicar algunas cosas fundamentales sobre el proceso
tamao de la primera negociacin, y despus de esta introduccin, vamos a jugar un poco con Glade.
Tamao de la negociacin en GTK +
Saber GTK + se encarga de tamao widget es una de las cosas ms importantes si se desea crear
interfaces grficas de usuario limpia y eficiente. Llam a este proceso de negociacin, ya que hay dos
procesos que contribuyen al resultado final: el tamao y la solicitud de asignacin de tamao.
Tamao requistion etapa puede ser visto como recursiva "Cunto espacio necesita?" que se trate.
ventana principal hacer esta pregunta es infantil, reproductores nio pregunta a sus hijos, ... Este
proceso termina cuando todos los widgets en el rbol respondi. En nuestro caso este proceso es el
siguiente:

Www.amistosamentelinux.blogspot.coM
Hay dos hallazgos importantes en esta cascada:
1. widgets nio no sabe nada sobre las preferencias de tamao de los padres
2. Padres bases de su tamao en los tamaos de la misma de los nios
Ahora que la ventana principal sabe cunto espacio se necesita en condiciones ideales, que decide la
cantidad de espacio en realidad estar disponible. Si etapa de solicitud devuelto un valor razonable,
esto es lo que ususally utilizado. Pero si cambia manualmente peticin del tamao de la ventana de
nivel superior (gtk_window_set_default_size utilizando, por ejemplo) o por cualquier otra razn pidi
el tamao no se puede utilizar, ventana deschelo y use uno diferente.
Y aqu es donde comienza la segunda etapa: la asignacin. Esto puede ser visto tambin como un
smbolo: "Aqu tienes un poco de espacio, hacer lo que tiene que hacer para encajar en l." que se
transmite de padres a hijos. Y si el widget tiene ms de un hijo, es tambin responsable de dividir
correctamente el espacio disponible entre los que los hijos. Recuerda esto, ya que esto es muy
importante para las cosas que vienen a continuacin.
Widget de embalaje
No voy a hablar sobre el embalaje mucho aqu, ya que este tema est muy bien representada en GTK +
tutorial oficial. Y ahora es el momento para que usted pueda ir all y leer la seccin de embalaje: GTK
+ tutorial - Reproductores de embalaje .
Terminado de leer? Buena. Ahora bien, son todas estas opciones diferentes coloca dentro de Glade? Se
pueden encontrar en dos lugares distintos:
1. "General" del widget contenedor contiene opciones que se establecen en widget contenedor en
s (por ejemplo sera "homogneo" de propiedad de GtkVBox o "el espacio entre columnas" de
GtkTable.
2. "Embalaje" ficha de widget que se va a agregar en el recipiente contiene opciones que se
establece en tiempo de insercin (en el cdigo, los parmetros se establecen mediante *
gtk_box_pack_ y gtk_table_attach familia de funciones.
Si las cosas relativelly claro ahora? Si no, intente volver a crear ejemplos de embalaje de Glade3
tutorial utilizando. Esta es una gran prctica para obtener el cdigo <-> Conexiones de Glade3
correctamente configurado.
Widget de embalaje y la aplicacin de cambio de tamao
Y finalmente llegamos al punto donde vamos a hablar sobre el problema con nuestra aplicacin - el
cambio de tamao est mal;). Pero antes de llegar demasiado excitados y empezar a editar nuestra
interfaz, vamos a poner algunos de los nuevos conocimientos al trabajo.
Vamos a describir cmo caja horizontal central determina los tamaos de la misma de los nios. Tom
una captura de pantalla de dos casos de nuestra aplicacin, ejecutando al mismo tiempo. Yo les cambia
el tamao y mide las partes de la caja horizontal. Se puede ver que la parte central con botones
conservado su anchura, mientras que otras dos partes gan la misma cantidad de espacio. Por qu es

Www.amistosamentelinux.blogspot.coM
esto as? Esto se debe a la segunda parte del proceso de negociacin tamao. widget padre asignado un
poco de espacio extra para la caja horizontal y la caja que luego se divide el espacio adicional entre los
que es chilren con ampliar la propiedad en el.

Ahora estamos listos para empezar a fijar nuestra aplicacin, haciendo parte izquierda de la aplicacin
de un tamao fijo. Puesta en marcha claro, el proyecto de la carga y haga clic en ventana de
desplazamiento a la izquierda.

Www.amistosamentelinux.blogspot.coM

Ahora ve a "comn" y solicitar ficha ancho establecido a 150 px. Esto asegurar que widget desplaza
siempre pide 150 px de ancho espacio de los padres.

Pero esto no es suficiente para que nuestro lado izquierdo fijo, dado que las solicitudes tamao slo
especificar la cantidad mnima de espacio que este widget necesidades. Es completamente legal para

Www.amistosamentelinux.blogspot.coM
asignar ms espacio para ella. Para asegurarse de que la ventana se desplaza exactamente 150 px, es
necesario modificar su embalaje demasiados parmetros. Abrir "embalaje" ficha y ajuste "Expandir"
propiedad "no".

Con las cosas como aqu, cualquier espacio extra que se destinar a caja horizontal se aadir al rea de
visualizacin. Guarde el proyecto y ejecute la aplicacin de ejemplo. Por cierto, no es necesario que lo
vuelva a compilar para ver los cambios, ya que slo ha cambiado el archivo glade, que se carga en
tiempo de ejecucin. Ver cmo reacciona nuestro GUI para cambiar el tamao de ahora?

Www.amistosamentelinux.blogspot.coM

Y con esto concluye hoy parte de tutorial. Sintase libre de experimentar con diferentes opciones de
embalaje. archivo glade final del tutorial de hoy se puede descargar desde aqu (asegrese de que
cambie su nombre por tut.glade antes de intentar ejecutar nuestra aplicacin de ejemplo).
Estis todos invitados a unirse a m la prxima vez, cuando vamos a aadir almacenamiento de datos
para ver a los rboles y algunos botones de conectar con sus seales.

Glade3 tutorial (4) - Datos GtkTreeView backend


En primer lugar, tengo que decirles que no vamos a conectar cualquier devoluciones de llamada en la
actualidad. Yo saba que prometi esta ltima vez, pero simplemente no tenemos los datos para
manipular las devoluciones de llamada en el interior. Entonces, qu vamos a hacer hoy? Bueno, la
adicin de los datos parece una buena idea;)
Modelo-vista-controlador (MVC) diseo

Www.amistosamentelinux.blogspot.coM
Antes de empezar a hacer algo, tenemos que saber algunas cosas acerca de cmo opera GtkTreeView.
La informacin sobre esto se puede encontrar en documentacin de la API y en GtkTreeView tutorial .
Yo aconsejo que lea estas dos referencias, si ests empezando con el cdigo con GTK +.
Si usted no tiene tiempo para leer los dos en su totalidad, voy a slo suma rapidez el contenido:
1. GtkTreeView es bsicamente recipiente que contiene columnas y proporciona una superficie en
la que los procesadores de celdas recurrir.
2. GtkCellRenderer objeto que se dibuja en su interior vista de rbol sobre la base de los datos
dentro de almacenamiento backend.
3. GtkTreeModel es la interfaz que cualquier almacn de datos debe aplicar si quiere ser utilizado
como una base de datos back-end para ver los rboles.
4. GtkTreeStore GtkListStore y dos almacenes de datos que implementan la interfaz
GtkTreeModel y forman parte de GTK + en s.
Tenga esto en cuenta ya que es crucial para entender exactamente lo que vamos a hacer con claro.
Creacin de datos de backend
Cargar proyecto ltima forma de destino en Glade. Ahora desplcese hacia abajo catlogo flash hasta
que aparezca "rbol modelo" parte. Ampliar y haga clic en "Lista de la tienda" icono. Nueva entrada
aparecer en "objetos" dentro de rbol de objetos.

Usted probablemente querr cambiar el tamao de panel de la derecha para obtener ms espacio para
almacenar las propiedades de edicin de lista. Vamos a hacer dos cosas ahora:
1. Definir nmero de columnas dentro de la tienda lista y sus tipos
2. Agregue un poco de datos de ejemplo para almacenar la lista para fines de demostracin
Nmero de columnas y sus tipos se definen en la parte superior de la pestaa "General". Simplemente
comienza a escribir en el campo adecuado para agregar nueva columna. columnas Qu necesitamos?
Ya que estamos en desarrollo de aplicaciones de grficos, vamos a necesitar una columna que
contendr las coordenadas X de los puntos, una columna para sostener las coordenadas y una columna
de etiqueta opcional que se puede agregar a la punta. Los tipos de las columnas se gdouble de
coordenadas X e Y y gchararray etiqueta para la columna (gchararray es slo otro nombre para "gchar
*" que se registra utilizando GType sistema).

Ahora vamos a aadir algunos datos de ejemplo para almacenar la lista. Desplcese hacia abajo para
exponer parte de insercin de datos, aadir seis filas con el botn ms y llenar con los datos de esta
manera:
+-------+-------+---------------------+
| - 4,5 | - 2 | Inicio |
| - 3 | - 1,5 | |

Www.amistosamentelinux.blogspot.coM
| - 1,5 | - 1 | |
| 0 | - 0,5 | eje interseccin |
| 1.5 | 0 | interseccin del eje X |
| 3 | 0.5 | Final |
+-------+-------+---------------------+

Nuestra tienda en la lista ya est terminada.


Conexin de vista de rbol con la tienda lista
A continuacin, necesitamos conectar vista de rbol y almacenar la lista. Seleccione vista en rbol y en
"General", haga clic en el botn ficha con "..." junto al "modelo TreeView" sobre el terreno. Dentro de
dilogo emergente seleccionar "liststore1" y haga clic en "Aceptar".

Adicin de componentes de la pantalla de vista de rbol


Ahora tenemos que agregar columnas a la vista de rbol que contendr los procesadores de celdas.
Cuando seleccionamos vista de rbol, el nuevo icono con la etiqueta "Editar ..." aparecer al final de la
barra de herramientas. Al hacer clic se abrir una nueva ventana con el editor de vista de rbol.

Dentro de "General" de la vista de rbol Editor podemos ver algunos datos que ya han entrado antes.
Para crear piezas de exhibicin de vista de rbol, tenemos que cambiar a "Jerarqua" ficha, donde se
nos presenta con una gran cantidad de espacio vaco;). Para agregar nueva columna, haga clic en
"Aadir columna de botn y de nuevo se aadir al jardn izquierdo, con sus propiedades que aparecen
en el campo rigth. Vamos a cambiar el ttulo de la columna de "X" y todo esto es que vamos a hacer
con esta columna.

Ahora haga clic en la columna recin creada y seleccione "Agregar nio elemento Spin", que se
sumarn GtkCellRendererSpin nuevo a la jerarqua. Ahora tenemos que volver a cambiar algunas
propiedades. Pero como cambiar las propiedades de procesador de celdas es un poco diferente que las
propiedades cambiantes de los objetos normales, voy a explicar esto un poco ms en detalle.
Si nos fijamos en el editor de propiedades, te dars cuenta de que se compone de cuatro columnas: la
primera columna tiene el botn de verificacin, segunda columna contiene el nombre de propiedad, la
tercera columna tiene botn giratorio y ltima columna tiene un cuadro combinado. Por qu cosas tan

Www.amistosamentelinux.blogspot.coM
complejas? Debido a que los procesadores de celdas pueden tener sus propiedades establecidas en dos
formas diferentes: a nivel mundial, lo que significa que esta propiedad ser el mismo para todas las
lneas que dibuja procesador de celdas, o en funcin de cada lnea, lo que significa que la propiedad se
almacena en el interior datos de backend y se lee desde all para cada lnea.
Cmo estos dos mtodos mapa en editor de la propiedad? Compruebe los controles de botn si la
propiedad se establece por lnea o global (activa el botn de verificacin medios por lnea, inactivo
medio global). Cuando abrimos una propiedad en un caso por caso, debemos informar de procesador de
celdas en las que la columna del almacn de datos son los valores de esta propiedad almacenados, y
podemos utilizar el botn para girar directamente el nmero de columna de entrada o un cuadro
combinado para seleccionar la columna sobre la base de la etiqueta que le asigna en la construccin de
almacn de la lista. Cuando abrimos una propiedad en una escala global, girar el botn y el cuadro
combinado estn ocultos y nos widget regulares edicin de propiedades en su lugar.
Ahora vamos a configurar nuestro procesador de celdas de centrifugado. En primer lugar la propiedad
que estamos goint establecer es "Texto". Queremos mostrar los valores de los datos back-end, as que
vamos a dejar el botn de verificacin activada y establecer la columna, de la que esta propiedad tendr
que los valores de la columna X-coords.

En segundo lugar la propiedad que vamos a configurar es el "ajuste" de propiedad. Vamos a ponerlo en
una escala global, ya que queremos que todas las lneas que tienen el mismo rango de valores
disponibles. As que tenemos que quitar la garrapata del botn de verificacin y luego haga clic en el
botn con "..." y crear el nuevo ajuste (que no tienen todava, as que lo cre).

ltima propiedad que vamos a configurar es "modificable". Una vez ms, voy a establecer Globaly en
"S", ya que queremos que todos nuestros coordenada X clulas que se pueden editar.

Ahora tenemos que crear otra columna de las coordenadas. El proceso es exactamente el mismo que
antes:

haga clic en la columna X y seleccione "Agrega el artculo de la columna"


cambiar el ttulo a "Y"
haga clic derecho en la columna Y y seleccione "Agregar nio elemento Spin"
Ajustar las propiedades exactamente igual que antes (cuando se configura "texto" de propiedad,
slect clumns Y coordenadas como fuente de valores y cuando se establezca la propiedad
"ajuste", no se crea uno nuevo, slo la reutilizacin ajuste1 que hemos creado para el
procesador de giro X)

Www.amistosamentelinux.blogspot.coM
La ltima columna que tenemos que aadir llevar a cabo las etiquetas de punto. Una vez ms, haga
clic en la columna Y y seleccione "Agrega el artculo de la columna". Hemos establecido que la
propiedad del ttulo de "Etiqueta". Ahora haga clic derecho en columnas de etiquetas y seleccione
"Agregar texto nio &qout; tema en el procesador de texto, establezca" texto "de propiedad a la
columna de etiquetas y" editable "propiedad Globaly en" S ".

Hay una ltima cosa que necesitamos hacer: ajustar las propiedades de ajuste1 que hemos creado al
configurar las propiedades de botn de nmero. Cerca del rbol editor de la vista y seleccione ajuste1
de rbol de objetos. Ahora ajustar el valor mnimo de -5,000, valor mximo en 5000, incremento de
paso de 0,1, el incremento de la pgina a 10 y de tamao de pgina a 0 (slo ajustes que estn
conectados a la barra de desplazamiento deben tener a cero el tamao de pgina).

Usted puede ver que los valores que hemos entrado en el almacn de la lista se muestran ahora dentro
de la vista de rbol. Pero tenemos un problema: las etiquetas no son visibles porque nos pusimos
peticin del tamao de la ventana de desplazamiento demasiado bajo. Pero cmo podemos determinar
la cantidad de espacio que necesitamos en diferentes temas con diferentes tamaos de fuente? La
respuesta es: "No podemos.". Y es por eso que vamos a modificar nuestra interfaz grfica de usuario en
la parte siguiente de este tutorial y hacerlo ms flexible.
Como de costumbre, usted puede conseguir el ltimo archivo de glade o ver screencast .

Www.amistosamentelinux.blogspot.coM
Poco Glade3-3.6.7 error
Glade3-3.6.7 tiene algunos problemas con la carga de proyectos que utilizan clulas configuracin de
algo complejo procesador. En nuestro caso, la parte problemtica es el ajuste de los botones de giro. Se
dar cuenta de que cuando se carga este proyecto la prxima vez, la propiedad de ajuste se marcarn
como se establece en base por lnea (vase la imagen para ms detalles). Todo lo que tienes que hacer
es eliminar los controles y que debera estar bien. Este error ya est corregido en la versin git, as que
todo lo que tenemos que hacer es esperar a la prxima versin.

Tanto tiempo y mantenerse sanos.

Glade3 tutorial (5) - Modificacin de rbol de widgets


La ltima vez que hemos aadido los datos de back-end para nuestra aplicacin, pero descubrimos al
final que nuestra interfaz grfica de usuario no es suficientemente flexible. Vamos a arreglar que en la
actualidad mediante la adicin de flash con panel en rbol de widgets y vuelva a colocar los botones de
imagen y etiqueta con botones de imagen solamente.
Nuevo rbol de widgets
Vamos a hacer algunos cambios en el rbol de widgets. Haremos los cambios en el papel primero y de
que vamos a crear nuestro plan de modificacin. Y aqu estn viejos y nuevos rboles widget:

Www.amistosamentelinux.blogspot.coM

Qu pasos tenemos que hacer para transformar viejo rbol (en el lado izquierdo de la imagen) en el
nuevo rbol (en el lado derecho)?
1. Aadir GtkHPaned como padre de GtkHBox
2. Reparent rea de visualizacin de GtkHBox GtkHBox a GtkHPaned
3. Aadir GtkAlignment como padre de GtkVButtonBox
4. Vuelva a colocar GtkVButtonBox con GtkVBox
5. Reemplace los artculos de stock en los botones con imgenes slo disponible inmediatamente
Tambin tendr que ajustar algunos parmetros del flash y el embalaje, pero para mantener el plan
inicial de lo ms simple posible, slo voy a describir los cambios en la marcha.
Insertar flash en rbol de widgets
Hasta ahora, estbamos construyendo nuestra interfaz grfica de usuario en forma lineal de arriba hacia
abajo, donde por primera vez construidos los padres del widget y que l mismo widget. Ahora te
mostrar cmo insertar flash en el centro del rbol de widgets.
Haga clic en GtkHBox widget de rbol y seleccione "Agregar Padre -> paneles horizontales". Usted
debe terminar wih algo similar a esto:

Ahora tenemos que Reparent cuadro de rea de visualizacin vertical para panel de la derecha. Haga
clic derecho en la caja vertical en el rbol de flash y selecciona "Cortar". Ahora haga clic derecho en el
interior panel derecho y seleccione "Pegar". Simple.

Www.amistosamentelinux.blogspot.coM

Se puede ver que tenemos un poco de espacio vaco en el lado derecho de nuestros botones. Para
eliminarlo, seleccione caja horizontal y el nmero de elementos decrese a 2.

Siguiente en la lista es la adicin de GtkAlignment como padre de la caja de botones verticales. Este
proceso es anlogo a la adicin de los paneles. Haga clic en el botn cuadro vertical y seleccione
"Agregar Padre -> Alineacin". Eso es todo lo que hay que hacer.

Crear slo los botones de imagen


Lo ltimo que tenemos que hacer es sustituir caja de botones vertical con caja vertical normal y agregar
iconos slo acciones a los botones. La forma ms sencilla de hacerlo es eliminar el cuadro de botn y
volver a crear los botones de cero. Podramos cortar y pegar cada botn, pero su creacin ser ms
rpida en este caso.
Despus de eliminar caja de botones, caja de insercin vertical con 6 elementos en el espacio vaco y el
elemento de definir el espaciado a 2 px.

Ahora crea nuevo botn, inserte en uno de los campos en caja vertical y establecer su contenido a la
costumbre.

Dentro GtkImage vaco insertar el espacio y la puso de identificacin de acciones a &quote; &quote;
Top.

Ahora Repetir esto cinco veces ms, con identificacin de acciones de "Up", "Agregar", "Eliminar",
"Down" y "Abajo". Usted debe ver algo como esto cuando termine:

Www.amistosamentelinux.blogspot.coM

ajustes finales
Todo lo que queda ahora es ajustar nuestras propiedades interfaz grfica un poco. Lo primero que
tenemos que hacer es hacer que los datos desplaza ventana extensible y desplazable. Seleccione
scrolledwindow1 y en "General" ajuste "barra de desplazamiento horizontal de la poltica" en
"Automtico". Ahora abra "embalaje" ficha y ajuste "Expandir" a "S".
Ahora seleccione alignment2 y en "General" conjunto "escala horizontal" y "Escala vertical" a 0, lo que
har que nuestros botones de centrado.
Y hemos terminado. Guardar la interfaz y divertirse. Obtener completo archivo de glade o ver
screencast como de costumbre.
La prxima vez vamos a conectar algunos callbacs (y lo digo en serio;). Mantngase saludable hasta
entonces.

Glade3 tutorial (6) - Seales


Segn lo prometido, por fin va a conectar algunas seales a los controladores y escribir algo de cdigo
C que va a hacer algo til.
Seales ficha en Glade
Si selecciona uno de los botones, ficha seales se parecer a esto (con cdigos de color columnas):

Dentro de "seal" la columna se enumeran las seales, agrupados por tipo de widget. "Controlador" es
la columna donde se inserte el nombre de la funcin que debe ser conectado a esta seal. "Los datos de
usuario" la columna puede contener el nombre del objeto de este archivo claro que debe ser enviado
como parmetro los datos a la funcin de devolucin de llamada (nota: si el campo no est vaco, la
seal se conectar la misma manera como si fueras a llamar g_signal_connect_swapped macro). Por
ltimo, "Despus de" columna contiene el botn de verificacin que controla la forma de devolucin de
llamada que est conectado: si est marcada, la seal ser conectado como si fueras a llamar
g_signal_connect_after, lo que significa que su funcin ser llamada despus de que el manejador de la
seal por defecto.
Para el 99% del tiempo, puede pasar por alto dos ltimas columnas, ya que rara vez se usan, pero an
as es bueno saber exactamente por qu estn parados all.

Www.amistosamentelinux.blogspot.coM
Teora de la seal de conexin
conexin de la seal se realiza en dos etapas:
1. Los nombres de las funciones que deben ser evocados cuando la seal se emite se especifican en
"Seales" ficha en Glade.
2. Asignacin de nombre de la funcin - direccin de funcin> se hace en tiempo de ejecucin, ya
sea usando GModule o manualmente por el usuario.
La primera etapa es sencilla: slo tiene que rellenar los campos apropiados en el interior "Seales"
ficha y guarde el proyecto.
Segunda etapa es ms compleja de entender, porque hay dos formas diferentes de asignacin de
nombres de las funciones a las direcciones de la funcin. El primero (el simple) es utilizar la funcin
gtk_builder_connect_signals, que buscar automticamente la funcin con los nombres propios en el
ejecutable principal. No voy a entrar en detalles de cmo se hace esto, pero ten en cuenta que GModule
se requiere para esta operacin. Segundo mtodo de asignacin de nombres a direcciones es utilizar
gtk_builder_connect_signals_full, en el que debe proporcionar la funcin que va a hacer la asignacin.
En este tutorial, vamos a utilizar el mtodo automtico, ya que esto es lo que la mayora de la gente
terminar usando en sus aplicaciones.
Pasando datos personalizados para las devoluciones de llamada
Cualquier aplicacin modestamente complejo requerir un cierto intercambio de datos y de las
funciones de devolucin de llamada. Entonces, cmo podemos lograr esto?
Como ya se mencion, una manera de pasar datos a la funcin de devolucin de llamada para
especificar el nombre del objeto en Glade. Esto es simple, pero el mtodo bastante limitado, ya que
slo objeto de su archivo de interfaz de usuario se puede pasar como este. manera ms flexible de
transmitir datos a las devoluciones de llamada es mediante el uso de datos de parmetro de
gtk_builder_connect_signals. Lo que usted especifique como ltimo parmetro se pasa a todas las
devoluciones de llamada conectado como ltimo parmetro.
"Pero no es slo un argumento disponibles, y que iba a necesitar ms!" Bueno, este problema se suele
resolver mediante la definicin de una estructura que contiene todos los datos que puedan ser
necesarios en cualquiera de las devoluciones de llamada. Puntero a una instancia de esa estructura se
pasa como un parmetro pasado a gtk_builder_connect_signals.
De devolucin de llamada definicin controlador
Cuando se utiliza gtk_builder_connect_signals para conectar seales, lo ms tomar algunas medidas
adicionales para asegurar que las funciones se encuentran por GModule. Los pasos exactos necesarios
son especficas de la plataforma, pero los desarrolladores Glib amablemente significa escribir cdigo
portable.
Antes de declaracin de la funcin o definicin, debe colocar macro G_MODULE_EXPORT. As que
si tenemos controlador de devolucin de llamada para "hacer clic en botn de la seal se define as en

Www.amistosamentelinux.blogspot.coM
la aplicacin no claro:
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">static void</span> static void</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">cb_clicked( GtkButton *button,</span> cb_clicked (botn
GtkButton
*,</span>
tenemos que modificar
para ello con el fin de GModule para poder encontrarla:
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">G_MODULE_EXPORT void</span> G_MODULE_EXPORT vaco</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">cb_clicked( GtkButton *button,</span> cb_clicked (botn
GtkButton *,</span>
<span onmouseover="_tipon(this)"
onmouseout="_tipoff()"><span class="google-src-text"
style="direction: ltr; text-align: left">gpointer data )</span>
gpointer datos)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">{</span> {</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
CODE HERE */</span> / * Cdigo aqu * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">}</span> }</span>
Otro paso necesario para hacer funcionar el cdigo correctamente en todas las plataformas es vincular
ejecutable con banderas vinculador adecuada. Gracias a los desarrolladores de Glib, todo lo que
tenemos que hacer es aadir "GModule-2.0" a los parmetros de pkg-config. Si se ha compilado sus
aplicaciones normales utilizando compilar lneas similares a las:
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-c object1.c $(pkg-config --clfags gtk+-2.0)</span> gcc-c object1.c $
(pkg-config - clfags gtk + -2.0)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-c object2.c $(pkg-config --cflags gtk+-2.0)</span> gcc-c object2.c $
(pkg-config - cflags gtk + -2.0)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-o app object1.o object2.o $(pkg-config --libs gtk+-2.0)</span> gcc-o

Www.amistosamentelinux.blogspot.coM
aplicacin object1.o object2.o $ (pkg-config - libs gtk +
-2.0)</span>
Queda aprobado nuevas lneas de compilacin se ver as:
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-c object1.c $(pkg-config --clfags gtk+-2.0 gmodule-2.0)</span> gcc-c
object1.c $ (pkg-config - clfags gtk + -2.0 GModule-2.0)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-c object2.c $(pkg-config --cflags gtk+-2.0 gmodule-2.0)</span> gcc-c
object2.c $ (pkg-config - cflags gtk + -2.0 GModule-2.0)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-o app object1.o object2.o $(pkg-config --libs gtk+-2.0 gmodule2.0)</span> gcc-o aplicacin object1.o object2.o $ (pkg-config - libs
gtk + -2.0 GModule-2.0)</span>
Preparacin de archivo glade
Antes de que podamos empezar a escribir cdigo, que tenemos que hacer algunas modificaciones
menores para presentar claro: cambiar el nombre de "Window1" a "main_window", cambiar el nombre
de "drawingarea1" a "chart_area" y conectar "exponer al evento" para cb_expose_chart funcin.

Ntese, sin embargo, el cambio de nombre no es necesario, pero es ms conveniente si cambiar el


nombre de los widgets que necesitamos. Con estos cambios en su lugar, estamos listos para empezar a
crear cdigo.
Cdigo
Aqu es donde Glade no nos puede ayudar ms. Vamos a empezar por la creacin de carpeta vaca que
mantendr la totalidad de nuestros archivos. Ahora copia el archivo ms reciente claro que ha guardado
aqu y cambiarle el nombre a "charter.glade".
Nuestro cdigo ser inicialmente dividido en tres archivos de cdigo fuente:
1. charter.c celebrar funcin principal
2. support.h llevar a cabo algunas macros conveniencia y definicin principal estructura de datos
3. callbacks.c llevar a cabo las funciones que nos conectamos en Glade
Vamos a empezar con el archivo support.h.
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#ifndef __SUPPORT_H__</span> # Ifndef __SUPPORT_H__</span>

Www.amistosamentelinux.blogspot.coM
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#define __SUPPORT_H__</span> # Define __SUPPORT_H__</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#include <gtk/gtk.h></span> # Include <gtk/gtk.h></span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Convenience macros for obtaining objects from UI file */</span> / *
Conveniencia macros para la obtencin de objetos de archivo de la
interfaz de usuario * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#define CH_GET_OBJECT( builder, name, type, data ) \</span> #
Define CH_GET_OBJECT (constructor, nombre, tipo, datos) \</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">data->name = type( gtk_builder_get_object( builder, #name ) )
</span> nombre de los datos-> = tipo (gtk_builder_get_object
(constructor, # nombre))</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#define CH_GET_WIDGET( builder, name, data ) \</span> # Define
CH_GET_WIDGET (constructor, nombre, datos) \</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">CH_GET_OBJECT( builder, name, GTK_WIDGET, data )</span>
CH_GET_OBJECT (constructor, nombre, GTK_WIDGET, datos)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Main data structure definition */</span> / * Principales datos de
definicin de la estructura * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">typedef struct _ChData ChData;</span> typedef struct _ChData
ChData;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">struct _ChData</span> estructura _ChData</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">{</span> {</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span

Www.amistosamentelinux.blogspot.coM
class="google-src-text" style="direction: ltr; text-align: left">/*
Widgets */</span> / Widgets * * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GtkWidget *main_window; /* Main application window */</span>
GtkWidget * main_window; / * Uso principal ventana * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GtkWidget *chart_area; /* Chart drawing area */</span>
GtkWidget * chart_area; / * * rea de dibujo grfico /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">};</span> };</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#endif /* __SUPPORT_H__ */</span> # Endif / * __SUPPORT_H__
* /</span>
Lo primero que hacemos es incluir GTK + fichero de cabecera, que proporcionar las declaraciones de
tipo y funcin. A continuacin se definen dos macros que har que la obtencin de punteros a objetos
menos detallado. Consulte a su favorito de manual de preprocesador de C para obtener ms
informacin acerca de cmo este trabajo dos macros. Lo ltimo en este archivo es la definicin de la
estructura. Esta estructura nos servir como almacenamiento de datos principal. Vamos a aadir ms
campos para que poco a poco. Para empezar, la ventana principal y punteros grfico de rea ser
suficiente.
Archivo siguiente que vamos a crear es charter.c.
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#include "support.h"</span> # Include "support.h"</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#define UI_FILE "charter.glade"</span> # Define UI_FILE
"charter.glade"</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">int</span> int</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">main( int argc,</span> main (int argc,</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">char
**argv )</span> char ** argv)</span>

Www.amistosamentelinux.blogspot.coM
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">{</span> {</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">ChData *data;</span> ChData datos *;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GtkBuilder *builder;</span> GtkBuilder * constructor;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GError *error = NULL;</span> GError * error = NULL;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Init GTK+ */</span> / * Inicializacin de GTK + * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_init( &argc, &argv );</span> gtk_init (& argc, &
argv);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Create new GtkBuilder object */</span> / * * Crear nuevo objeto
GtkBuilder /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">builder = gtk_builder_new();</span> constructor =
gtk_builder_new ();</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">if( ! gtk_builder_add_from_file( builder, UI_FILE, &error ) )
</span> if (! gtk_builder_add_from_file (constructor, UI_FILE, y
error))</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">{</span> {</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">g_warning( "%s", error->message );</span> g_warning ("% s",
mensaje de error->);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">g_free( error );</span> g_free (error);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:

Www.amistosamentelinux.blogspot.coM
left">return( 1 );</span> retorno (1);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">}</span> }</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Allocate data structure */</span> / * Asignar datos de la estructura
* /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">data
= g_slice_new( ChData );</span> = datos g_slice_new (ChData);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Get objects from UI */</span> / * Obtener los objetos de interfaz de
usuario * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#define GW( name ) CH_GET_WIDGET( builder, name, data )</span>
# Define GW (nombre) CH_GET_WIDGET (constructor, nombre,
datos)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GW( main_window );</span> GW (main_window);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">GW( chart_area );</span> GW (chart_area);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#undef GW</span> # Undef GW</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Connect signals */</span> / * Conectar las seales * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_builder_connect_signals( builder, data );</span>
gtk_builder_connect_signals (constructor, los datos);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Destroy builder, since we don't need it anymore */</span> / *
Destruye constructora, ya que no se necesita ms * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:

Www.amistosamentelinux.blogspot.coM
left">g_object_unref( G_OBJECT( builder ) );</span> g_object_unref
(G_OBJECT (constructor));</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Show window.</span> / * Mostrar ventana.</span> <span
onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">All
other widgets are automatically shown by GtkBuilder */</span> Todos
los otros widgets se muestran automticamente por GtkBuilder *
/</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_widget_show( data->main_window );</span> gtk_widget_show
(main_window de datos->);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Start main loop */</span> / * Iniciar el ciclo principal * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gtk_main();</span> gtk_main ();</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Free any allocated data */</span> / * Cualquier * Libre de datos
asignada /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">g_slice_free( ChData, data );</span> g_slice_free (ChData,
datos);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">return( 0 );</span> return (0);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">}</span> }</span>
Este archivo es casi exactamente el mismo archivo tut.c de la segunda parte de este tutorial. Una
diferencia importante es la creacin de la estructura de datos que se pasa a todas las devoluciones de
llamada.
Ultimo archivo es callbacks.c. Vamos a agregar controladores de devolucin de llamada en este archivo
ya que los conectan el interior de Glade. Slo hay una funcin que tenemos que escribir:
cb_expose_chart. Pero antes de empezar a escribir cualquier cosa, tenemos que comprobar qu
prototipo de controlador de exponer debe tener. Vaya a GtkWidget API de referencia y de bsqueda

Www.amistosamentelinux.blogspot.coM
para "exponer-evento" de la seal. (O, si usted es demasiado perezoso para buscar por s mismo, haga
clic en este enlace .)
En referencia, vers que exponen controlador de eventos se define como:
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">gboolean</span> gboolean</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">function( GtkWidget *widget,</span> funcin (GtkWidget *
widget,</span>
<span onmouseover="_tipon(this)"
onmouseout="_tipoff()"><span class="google-src-text"
style="direction: ltr; text-align: left">GdkEventExpose
*event,</span> * GdkEventExpose caso,</span>
<span onmouseover="_tipon(this)"
onmouseout="_tipoff()"><span class="google-src-text"
style="direction: ltr; text-align: left">gpointer user_data )</span>
gpointer user_data)</span>
Teniendo este conocimiento, podemos crear el archivo de devolucin de llamada.
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">#include "support.h"</span> # Include "support.h"</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">G_MODULE_EXPORT gboolean</span> G_MODULE_EXPORT gboolean</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">cb_expose_chart( GtkWidget *widget,</span> cb_expose_chart
(GtkWidget * widget,</span>
<span onmouseover="_tipon(this)"
onmouseout="_tipoff()"><span class="google-src-text"
style="direction: ltr; text-align: left">GdkEventExpose
*event,</span> * GdkEventExpose caso,</span>
<span onmouseover="_tipon(this)"
onmouseout="_tipoff()"><span class="google-src-text"
style="direction: ltr; text-align: left">ChData *data )</span> ChData
datos *)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">{</span> {</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:

Www.amistosamentelinux.blogspot.coM
left">cairo_t *cr;</span> cairo_t * cr;</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Create cairo context from GdkWindow */</span> / * Crear el cairo
contexto de GdkWindow * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">cr =
gdk_cairo_create( event->window );</span> cr = gdk_cairo_create
(ventana de eventos>);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Paint whole area in green color */</span> / * La pintura en toda la
zona de color verde * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">cairo_set_source_rgb( cr, 0, 1, 0 );</span>
cairo_set_source_rgb (cr, 0, 1, 0);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">cairo_paint( cr );</span> cairo_paint (CR);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Destroy cairo context */</span> / * Destruye el cairo contexto *
/</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">cairo_destroy( cr );</span> cairo_destroy (CR);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">/*
Return TRUE, since we handled this event */</span> / * Volver cierto,
ya que manejamos este caso * /</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">return( TRUE );</span> retorno (TRUE);</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">}</span> }</span>
Se puede ver que hemos aadido G_MODULE_EXPORT delante de definicin de la funcin. Tambin
modific ltimo parmetro para evitar algunos de calidad. Puede pasar por alto cuerpo de la funcin,
por ahora, ya que el dibujo Cairo se explicar ms cuando vamos a empezar a dibujar nuestras tablas.
Compilar la aplicacin

Www.amistosamentelinux.blogspot.coM
Lo ltimo que tenemos que hacer es compilar la aplicacin. Esto en nuestro caso se hace en tres pasos:
1. compilar charter.c en charter.o
2. compilar callbacks.c en callbacks.o
3. vincular ambos archivos objeto en la carta
Esto se traduce en lneas de comando en el terminal:
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-c charter.c -o charter.o $(pkg-config --cflags gtk+-2.0 gmodule2.0)</span> gcc-c-o charter.c charter.o $ (pkg-config - cflags gtk +
-2.0 GModule-2.0)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-c callbacks.c -o callbacks.o $(pkg-config --cflags gtk+-2.0 gmodule2.0)</span> gcc-c-o callbacks.c callbacks.o $ (pkg-config - cflags
gtk + -2.0 GModule-2.0)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">gcc
-o charter charter.o callbacks.o $(pkg-config --libs gtk+-2.0
gmodule-2.0)</span> Carta gcc-o charter.o callbacks.o $ (pkg-config libs gtk + -2.0 GModule-2.0)</span>
Ya que esto puede ser muy exigentes a escribir para cada recopilacin, he creado Makefile que deben
hacer las cosas un poco ms fcil.
?
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">CC =
gcc</span> CC = gcc</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">CFLAGS = `pkg-config --cflags gtk+-2.0 gmodule-2.0`</span>
CFLAGS = `pkg-config - cflags gtk + -2.0 GModule-2.0</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">LIBS
= `pkg-config --libs gtk+-2.0 gmodule-2.0`</span> LIBS = `pkg-config
- libs gtk + -2.0 GModule-2.0</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">DEBUG = -Wall -g</span> DEBUG =-Wall-g</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">OBJECTS = charter.o callbacks.o</span> OBJETOS = charter.o
callbacks.o</span>

Www.amistosamentelinux.blogspot.coM
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">.PHONY: clean</span> . PHONY: limpio</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">all:
charter</span> todo: la carta</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">charter: $(OBJECTS)</span> Carta: $ (OBJETOS)</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">$
(CC) $(DEBUG) $(LIBS) $(OBJECTS) -o $@</span> $ (CC) $ (DEBUG) $
(LIBS) $ (OBJETOS)-o $ @</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">charter.o: charter.c support.h</span> charter.o: support.h
charter.c</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">$
(CC) $(DEBUG) $(CFLAGS) -c $< -o $@</span> $ (CC) $ (DEBUG) $
(CFLAGS)-c $ <-o $ @</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">callbacks.o: callbacks.c support.h</span> callbacks.o:
support.h callbacks.c</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">$
(CC) $(DEBUG) $(CFLAGS) -c $< -o $@</span> $ (CC) $ (DEBUG) $
(CFLAGS)-c $ <-o $ @</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align:
left">clean:</span> Limpieza:</span>
<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span
class="google-src-text" style="direction: ltr; text-align: left">rm
-f *.o charter</span> rm-f *. o carta</span>
Consulte a hacer manual para obtener informacin detallada acerca de este archivo. Y hemos terminado
por hoy.
Conseguir fuentes
Esto es algo nuevo. He creado un repositorio git en Gtihub.com para albergar los archivos de este

Www.amistosamentelinux.blogspot.coM
tutorial. Voy a un paquete de cdigo de cada parte del tutorial y subirlo en Github.com, pero si usted
prefiere usar git para obtener el cdigo, yo tambin te compromete etiquetas. Aqu est mi Github
repositorio y los archivos estn aqu para este tutorial parte .
Tambin comenc a convertir los mensajes de este tutorial en un formato DocBook, que esperemos que
hacer este tutorial ms flexible y disponible en otros formatos.

También podría gustarte