Arboles de Datos en GTK+:
GtkTreeView y Amigos

Claudio Saavedra

csaavedra@alumnos.utalca.cl

Universidad del Bio Bio - Concepción
14 de Agosto 2004

Contenidos

Esquema de la charla

Overview de la arquitectura MVC

GtkTreeModel: El modelo de Datos

GtkListStore/GtkTreeStore: Listas y Arboles

Renderers y Columnas

El voila: GtkTreeView

Ejemplos

Esquema de la charla

Pese a que en principio todo parecerá inutil, al final se demostrará lo contrario.

Marco Teorico + Ejemplo = Entendimiento.

Los errores y nervios del expositor se deben a su inexperiencia con slides.

MVC

Modelo/Vista/Controlador

Modelo: La representacion
interna de los datos

Vista: Como la aplicación
muestra los datos

Controlador: Como el
usuario manipula la informacion

GtkTreeModel: El modelo de datos

El modelo contiene toda la información a desplegar.

No solo se almacenan datos sino también atributos.

Cada dato o atributo se almacena en una columna.

Cada nodo contiene la misma cantidad de columnas.

GtkTreeModel: El modelo de datos

Cada nodo tiene asociado un nodo padre y potencialmente hijos.

Cada columna almacena solo un tipo de dato bien definido:
G_TYPE_BOOLEAN
G_TYPE_STRING
G_TYPE_INT
GDK_TYPE_PIXBUF
G_TYPE_POINTER

GtkTreeModel: El modelo de datos

¡¡¡Que esté en el modelo no implica que se ha de desplegar directamente!!!

Una columna con un dato de tipo G_TYPE_BOOLEAN nos puede indicar si se ha modificado la información en los nodos, por ejemplo.

GtkTreeModel: El modelo de datos

GtkTreeModel brinda métodos para ordenar los nodos, iterar sobre ellos, filtrarlos de acuerdo a criteros, y todo de manera muy simple.

GtkListStore - GtkTreeStore

Crear un GtkTreeModel desde cero no es trivial.

La mayoria de las aplicaciones necesitan desplegar listas o árboles simples.

GTK+ brinda dos modelos genéricos para cubrir estas necesidades.

GtkListStore

Modelo para almacenar listas de nodos.

Las columnas y los tipos de datos que almacenan deben ser definidos al crear el modelo.

Despues no hay lugar a modificaciones.

Funcion para crear un GtkListStore:
gtk_list_store_new (N_COLS, ...);

GtkListStore

Agregar un nodo al modelo:
gtk_list_store_append (store,
&iter);

iter almacena una referencia al nodo.

Este nodo esta inicialmente vacio y necesita ser llenado.

Para definir los datos de un nodo:
gtk_list_store_set (store, 0, “Texto”,
-1);

GtkListStore

Para obtener los datos de un modelo usamos:
gtk_tree_model_get (model, &iter,
0, &str,
-1);

Existe un conjunto grande de funciones para modificar, reordenar, eliminar los nodos (ver API).

GtkTreeStore

Cuando se agrega un nodo al modelo debe especificarse cual es el nodo padre.

Para esto usamos:
gtk_tree_store_append (model, &iter_new,
&iter_parent);
donde iter_parent es una referencia al nodo padre del nuevo nodo.

GtkCellRenderer

Permite renderizar en pantalla una columna en un modelo.

Los tipos de datos que se pueden renderizar son variados.

Si renderizamos texto o numeros, utilizamos gtk_cell_renderer_text.

Debemos definir que ha de representarse en un renderer. Para esto asociamos una columna del modelo, con el renderer.

GtkCellRenderer

Un ejemplo de una aplicacion:

GtkTreeColumn

Representa una columna en la vista.

Una columna puede agrupar varios GtkCellRenderers.

GtkTreeView

Todo lo que se ha dicho si sirve para algo.

Una vez creado un modelo, lo asociamos a una vista, y voila!

Ejemplos ...

2004-08-13T00:21:41