Introducción al desarrollo sobre la plataforma GNOME

Anuncio
Introducciónal desarrollosobre
laplataformaGNOME
Lucas Di Pentima <lucas@lunix.com.ar>
Santa Fe, Argentina
LUNIX Soluciones
LUGLi
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura
GNOME es un conjunto de herramientas (bibliotecas) que
ofrecen distintas funcionalidades:
✔ GLib: Utilidades de programación.
✔ GTK+: Controles gráficos (widgets).
✔ LibGlade: Manejo de interfaz de usuario.
✔ Pango: Internacionalización (i18n).
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GLib
Utilidades de programación que hacen al C, muy
amigable:
✔ Tipos de datos
✔ Mensajes de salida
✔ Cadenas
✔ Listas enlazadas
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GLib – Tipo de datos
Proveen independencia con el sistema operativo,
mejorando la portabilidad.
✔
✔
✔
✔
✔
✔
✔
gint (gint8, gint16, guint8, guint16, gint32...)
gchar
gdouble
gshort
glong
gboolean (TRUE o FALSE)
...
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GLib – Mensajes de salida
Se utilizan para depuración de los programas.
✔
✔
✔
✔
✔
✔
✔
✔
void g_print(const char *format, ...)
g_assert(expresión)
g_return_if_fail(expresión)
g_return_val_if_fail(expresión, val)
g_message(...)
g_warning(...)
g_critical(...)
g_error(...)
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GLib – Cadenas
✔
✔
✔
✔
✔
gchar * g_strdup(const gchar * cadena)
gboolean g_ascii_isalnum(gchar char)
gboolean g_ascii_isalpha(gchar char)
gboolean g_ascii_isdigit(gchar char)
...
GString (Tipo de dato abstracto)
✔ GString * g_string_new(const gchar * cadena)
✔ GString * g_string_append(GString *gstr, gchar
*str_a_agregar)
✔ void g_string_printf(GString *cadena, const gchar
formato, ...)
✔ ...
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GLib – Listas enlazadas
Se provee de estructuras y funciones para el manejo de
listas simple y doblemente enlazadas:
GSList: listas simplemente enlazadas
✔ GSList* g_slist_append (GSList *lista, gpointer
dato)
✔ GSList* g_slist_insert (GSList *lista, gpointer dato,
gint posicion)
GList: listas doblemente enlazadas
✔ GList* g_list_prepend (GList *lista, gpointer dato)
✔ GList* g_list_insert_sorted (GList *lista, gpointer
dato, GCompareFunc funcion)
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GLib – ¿Que más?
Además, GLib ofrece:
✔ GObject: programación OO en C.
✔ GTimer: temporizador.
✔ GIOChannel: entrada/salida.
✔ Pilas, colas, árboles...
✔ Manejo de plug-ins.
✔ Manejo dinámico de memoria.
✔ Soporte para multi-hilos (threads).
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GTK+
GTK+ comprende el toolkit de
Aplicaciones
controles gráficos (widgets) y las
Gtk
funciones de dibujado en
Gdk
pantalla.
Xlib
Gdk provee a Gtk una capa de
Hardware
abstracción de manera tal que
cambiando sólo Gdk a otros
sistemas, las aplicaciones
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
basadas en Gtk funcionen sin
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GTK+ - Widgets
Los widgets son objetos
gráficos que componen la
interfaz del usuario, incluyen:
✔ Botones
✔ Entradas de menú
✔ Cajas de opciones
✔ Barras de botones
✔ Barras de desplazamiento
✔ Ventanas
✔ ...
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Cada widget se instancia con
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GTK+ - Eventos
GTK+ posee un esquema de eventos para responder a
las acciones del usuario.
Bucle de eventos
✔ void gtk_main(void);
✔ void gtk_main_quit(void);
Señales
✔ g_signal_connect(instancia, señal, callback, dato)
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GTK+ - Ejemplo
#include <gtk/gtk.h>
void hello(GtkWidget *widget, gpointer data)
{
g_print ("Hello World\n");
}
gint delete_event(GtkWidget *widget,
GdkEvent *event,
gpointer
data)
{
g_print ("delete event occurred\n");
return TRUE;
}
void destroy(GtkWidget *widget, gpointer data)
{
gtk_main_quit();
}
(...continúa...)
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GTK+ - Ejemplo (cont.)
int main(int argc, char *argv[]) {
GtkWidget *window, *button;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);
gtk_container_set_border_width(GTK_CONTAINER(window),10);
button = gtk_button_new_with_label("Hello World");
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (hello), NULL);
g_signal_connect_swapped(G_OBJECT(button), "clicked",
G_CALLBACK(gtk_widget_destroy),
G_OBJECT (window));
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main();
return 0;
}
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: GTK+ - Ejemplo compilado
La compilación se hace de la siguiente manera:
$ gcc -o ejem `pkg-config gtk+-2.0 --cflags –libs` ejem.c
$ ./ejem
...y el resultado:
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Glade y Libglade
Glade
✔ Editor de interfaces de usuario GTK.
✔ Exporta código C y C++.
✔ Agiliza enormemente el diseño de la IU.
✔ Almacena la descripción de la IU en un archivo
XML.
Libglade
✔ Entiende la descripción XML de la IU de Glade.
✔ Auto-conecta las señales a los callbacks.
✔ Agiliza aún más el diseño de la IU.
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Glade
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Libglade – Algunas funciones
Las mas importantes son:
✔ G lad eX M L *g lad e_x m l_n ew (g ch ar *arch ,
g ch ar *w id g et_raiz ,
N U L L );
✔ G tk W id g et *g lad e_x m l_g et_w id g et (G lad eX M L
*x m l,
g ch ar
*n o m b re_w id g et);
✔ v o id g lad e_x m l_s ig n al_au to co n n ect (G lad eX M L
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Libglade – Ejemplo
#include <gtk/gtk.h>
#include <glade/glade.h>
void hello(GtkWidget *widget, gpointer data) {
g_print ("Hello World\n");
}
gint delete_event(GtkWidget *widget, GdkEvent *event,
gpointer data) {
g_print ("delete event occurred\n");
return TRUE;
}
void destroy(GtkWidget *widget, gpointer data) {
gtk_main_quit();
}
(...continúa...)
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Libglade – Ejemplo (cont.)
int main(int argc, char *argv[]) {
GladeXML *xml;
gtk_init (&argc, &argv);
xml = glade_xml_new("archivo.glade", NULL, NULL);
glade_xml_signal_autoconnect(xml);
gtk_main();
return 0;
}
(...bastante menos código, ¿no?)
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Libglade – Ejemplo compilado
Esta vez la compilación se hace de esta manera:
$ gcc -o ejem `pkg-config libglade-2.0 --cflags --libs` ejem.c
$ ./ejem
...y el resultado es el mismo...
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Libglade – descripción XML
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade2.0.dtd">
<glade-interface>
<widget class="GtkWindow" id="window">
<property name="border_width">10</property>
<property name="visible">True</property>
<property name="title" translatable="yes">window1</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>
<signal name="delete_event" handler="delete_event"
last_modification_time="Thu, 17 Jul 2003 20:40:00 GMT"/>
...
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Pango
Pango es el sistema de GNOME para el dibujado de texto
en pantalla. Entre sus características se incluye:
✔ Soporte de casi todos los idiomas existentes.
✔ Independiente del sistema de ventanas.
✔ Maneja texto bidireccional y glifos complicados.
✔ Permite el uso de marcas HTML en los textos.
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Pango – Ejemplos
Algunas capturas de pantalla:
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Pango – Marcas HTML
Con Pango, es muy fácil darle formato a widgets como
etiquetas:
✔
gtk_label_set_markup(etiqueta, "<b>Título</b>");
✔
gtk_label_set_markup(etiqueta,
"<span foreground=\"red\">Error!</span>");
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Arquitectura: Completando el rompecabezas
Algunas piezas extra:
✔ Bonobo: sistema de componentes.
✔ GConf: almacenamiento de configuraciones.
✔ ATK: facilidades de accesibilidad.
✔ ScrollKeeper: ayuda en línea.
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Otras herramientas útiles
Las siguientes no son herramientas exclusivas de
GNOME, pero de todos modos se utilizan:
✔ gettext: internacionalización.
✔ autoconf y automake: automatización de
compilación.
✔ docbook: desarrollo de documentación
Lucas Di Pentima <lucas@lunix.com.ar> - Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
Enlaces de interés
Sitio de GNOME para desarrolladores:
http://developer.gnome.org
GNOME Hispano:
http://es.gnome.org
Bindings:
●
P H P : h ttp ://g tk .p h p .n et/
●
C + + : h ttp ://g tk m m .s o u rcefo rg e.n et/
●
Jav a:
h ttp ://w w w .in fo rm atik .u o s .d e/elm ar/p ro jects /jav ag tk /
●
Lucas Di Pentima <lucas@lunix.com.ar>
- Santa Fe - Argentina
Introducción al desarrollo sobre la plataforma GNOME
I E nc u entro Linu x del Lito ral – S alto , U ru gu ay – Ju lio 2003
¡Muchasgracias!
Esta presentación se puede descargar de:
http://www.lunix.com.ar/~ldipenti/intro-proggnome.tgz
Lucas Di Pentima <lucas@lunix.com.ar>
Descargar