Capítulo 2. Componentes: Modelo, Manejador de celda, Columna, Vista

El concepto mas importante subyacente a GtkTreeView es la completa separación entre los datos y como éstos son desplegados en la pantalla. Este es comúnmente conocido como diseño Modelo/Vista/Controlador (MVC). Datos de varios tipos (strings, números, imágenes, etc.) son almacenados en un 'modelo'. Entonces se le dice a la 'vista' que datos debe desplegar, donde debe hacerlo, y como debe hacerlo. Una de las ventajas de este acercamiento es que se pueden tener múltiples vistas que despliegen los mismos datos (un árbol de directorios por ejemplo) de diferentes maneras, o de la misma manera pero varias veces, con solo una copia de los datos subyacentes. Esto evita la duplicación de datos y esfuerzo de programación si los mismos datos son reutilizados en diferentes contextos. Además, cuando los datos en el modelo son actulizados, todas las vistas se actualizan de igual manera.

Entonces, mientras GtkTreeModel es usado para almacenar datos, hay otros compomentes que determinan que datos son desplegados en el GtkTreeView y como se despliegan.Estos componentes son GtkTreeViewColumn y GtkCellRenderer. Un GtkTreeView está compuesto de columnas de vistas de árboles. Estas son las columnas que el usuario percibe como tales. Tienen una cabecera de columna clickeable con un título de columna que puede ser ocultado, se puede modificar su tamaño y pueden ser reordenadas. Las columnas de vistas de arbol no despliegan dato alguno, solo son usadas como un medio para representar el lado usuario de la vista de árbol (ordenamiento, etc.) y sirven para empaquetar widgets para los componentes que manejan el despliegue de datos en la pantalla, a saber la familia de objetos GtkCellRenderer (los llamo 'objetos' porque no son GtkWidgets). Hay un número de diferentes manejadores de celdas que se especializan en el manejo ciertos datos como strings, pixbufs, o botones de verificación. Mas sobre ésto después.

Los manejadores de celdas son empaquetados dentro de las columnas de vista de árbol para desplegar los datos. Una columna de vista de árbol necesita contener al menos un manejador de celda, pero puede contener varios de estos. Por ejemplo, Si uno quisiera desplegar una columna 'Nombre de Archivo' donde cada nombre de archivo tiene un pequeño ícono a su izquierda indicando el tipo de éste, se debe empaquetar un GtkCellRendererPixbuf y un GtkCellRendererText dentro de una columna de vista de árbol. Empaquetar manejadores dentro de una vista de árbol es similar a empaquetar widgets dentro de un GtkHBox.