]> git.llucax.com Git - personal/documentos.git/commitdiff
Agregar material del curso de GTK+ nunca dado
authorLeandro Lucarella <llucax@gmail.com>
Sat, 23 Aug 2008 00:58:27 +0000 (21:58 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 23 Aug 2008 00:58:27 +0000 (21:58 -0300)
curso_gtk/clase2/Makefile [new file with mode: 0644]
curso_gtk/clase2/ejemplo.c [new file with mode: 0644]
curso_gtk/clase2/ejemplo.glade [new file with mode: 0644]
curso_gtk/cronograma.txt [new file with mode: 0644]

diff --git a/curso_gtk/clase2/Makefile b/curso_gtk/clase2/Makefile
new file mode 100644 (file)
index 0000000..dfb1e03
--- /dev/null
@@ -0,0 +1,32 @@
+# Makefile de ejemplo para C++
+# 
+# Creado: jue abr 15 15:34:19 ART 2004
+#
+# Copyleft 2004 - Leandro Lucarella, Bajo licencia GPL [http://www.gnu.org/]
+#
+
+# CONFIGURACION
+################
+
+# Nombre del ejecutable.
+target = ejemplo
+
+# CONFIGURACION "AVANZADA"
+###########################
+
+# Opciones para el compilador C.
+CFLAGS = -Wall -ggdb -ansi -pedantic -DDEBUG
+
+CFLAGS += $(shell pkg-config --cflags gtk+-2.0 libglade-2.0)
+LDFLAGS += $(shell pkg-config --libs gtk+-2.0 libglade-2.0)
+
+# REGLAS
+#########
+
+.PHONY: all clean
+
+all: $(target)
+
+clean:
+       @$(RM) -fv *.o $(target)
+
diff --git a/curso_gtk/clase2/ejemplo.c b/curso_gtk/clase2/ejemplo.c
new file mode 100644 (file)
index 0000000..5b78996
--- /dev/null
@@ -0,0 +1,56 @@
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <stdio.h>
+
+/* tengo una estructura global para tener referencias a los elementos que usa
+ * la aplicación comunmente */
+struct 
+{
+       GtkWindow* ventana; /* ventana principal */
+       GtkEntry*  entrada; /* entrada de texto */
+}
+app;
+
+/* callback para cerrar la aplicación con la X */
+void
+on_ventana_destroy(GtkWidget *widget, gpointer user_data)
+{
+       /* sale del programa, corta el loop de eventos */
+       gtk_main_quit();
+}
+
+/* callback a usar cuando se pulsa el botón */
+void
+on_boton_clicked(GtkWidget *widget, gpointer user_data)
+{
+       const gchar* texto;
+
+       /* obtengo texto de la entrada de texto */
+       texto = gtk_entry_get_text(app.entrada);
+       /* pongo el texto como título */
+       gtk_window_set_title(app.ventana, texto);
+}
+
+/* programa principal */
+int
+main(int argc, char *argv[])
+{
+       GladeXML *xml;
+
+       /* inicializo gtk y glade */
+       gtk_init(&argc, &argv);
+       glade_init();
+       /* cargo interfaz del archivo XML de glade */
+       xml = glade_xml_new("ejemplo.glade", "ventana", NULL);
+       /* cargo datos de la aplicación */
+       app.ventana = GTK_WINDOW(glade_xml_get_widget(xml, "ventana"));
+       app.entrada = GTK_ENTRY(glade_xml_get_widget(xml, "entrada"));
+       /* conecta todas las señales automáticamente */
+       glade_xml_signal_autoconnect(xml);
+       /* comienza el loop de eventos */
+       gtk_main();
+
+       /* salimos, después de que alguien llamó gtk_main_quit(), sin error */
+       return 0;
+}
+
diff --git a/curso_gtk/clase2/ejemplo.glade b/curso_gtk/clase2/ejemplo.glade
new file mode 100644 (file)
index 0000000..4b0256f
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="ventana">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Ejemplo de Glade</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <signal name="destroy" handler="on_ventana_destroy"/>
+
+  <child>
+    <widget class="GtkHBox" id="hbox">
+      <property name="border_width">5</property>
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">5</property>
+
+      <child>
+       <widget class="GtkEntry" id="entrada">
+         <property name="visible">True</property>
+         <property name="can_focus">True</property>
+         <property name="editable">True</property>
+         <property name="visibility">True</property>
+         <property name="max_length">0</property>
+         <property name="text" translatable="yes"></property>
+         <property name="has_frame">True</property>
+         <property name="invisible_char">*</property>
+         <property name="activates_default">False</property>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">True</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkButton" id="boton">
+         <property name="visible">True</property>
+         <property name="can_default">True</property>
+         <property name="has_default">True</property>
+         <property name="can_focus">True</property>
+         <property name="label">gtk-ok</property>
+         <property name="use_stock">True</property>
+         <property name="relief">GTK_RELIEF_NORMAL</property>
+         <property name="focus_on_click">True</property>
+         <signal name="clicked" handler="on_boton_clicked"/>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">False</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/curso_gtk/cronograma.txt b/curso_gtk/cronograma.txt
new file mode 100644 (file)
index 0000000..e97c30e
--- /dev/null
@@ -0,0 +1,49 @@
+                       ++===========================++
+                       || Curso a distancia de GTK+ ||
+                       ++===========================++
+
+. _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ .
+
+Clase 1:
+========
+
+Programa:
+---------
+       * Inicialización de GTK+
+       * Creación de una ventana
+       * Conectar callbacks a señales
+       * Compilación de programas GTK+
+
+Lectura:
+       * http://www.gtk.org/tutorial/index.html
+               Capítulos 2, 3, 4, 5.1 y 6
+
+       * http://www.linuxlots.com/~barreiro/spanish/gtk/tutorial/gtk_tut.es.html
+               Versión en castellano, recomiendo _NO_ leerla porque es de
+               GTK+ 1.2, por lo que tiene muchas cosas obsoletas
+
+. _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ .
+
+Clase 2:
+========
+
+Programa:
+---------
+       * Diseñar una interfaz grafica con glade simple
+       * Levantar el XML con libglade
+       * Conectar callbacks automáticamente
+       * Compilación de programas con libglade
+
+Lectura:
+--------
+       * http://developer.gnome.org/doc/API/libglade/libglade-notes.html
+               Sólo "Libglade Programming Basics", "Embedding Libglade
+               Interfaces" y "Internationalisation with Libglade", si te
+               interesa hacer aplicaciones internacionalizables
+
+         * http://developer.gnome.org/doc/API/libglade/libglade-lib.html
+               Recomendado darle una ojeada para conocer mejor las
+               capacidades de glade, en especial mirar GladeXML
+
+. _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ .
+