El modelo

Cada Gtk::TreeView tiene un Gtk::Model asociado que contiene los datos mostrados por el TreeView Varios Gtk::TreeView puede usar el mismo Gtk::TreeModel. Por ejemplo, esto le permite mostrar y editar los mismos datos de 2 formas diferentes al mismo tiempo. O las 2 vistas pueden mostrar diferentes columnas de los mismos modelos de datos, de la misma manera que dos consultas SQL (o «vistas») pueden mostrar diferentes campos de la misma tabla de la base de datos.

A pesar de que, teóricamente, puede implementar su propio modelo, normalmente usará las clases de los modelos ListStore o TreeStore.

Referencia

9.1.1. ListStore, para filas

El ListStore contiene filas simples de datos, y ninguna fila tiene hijos.

Figura 9-1TreeView - ListStore

Referencia

9.1.2. TreeStore, para una jerarquía

El TreeStore contiene filas de datos, y cada fila puede tener filas hijas.

Figura 9-2TreeView - TreeStore

Referencia

9.1.3. Columnas del modelo

La clase TreeModelColumnRecord se usa para rastrear a las columnas y sus tipos de datos. Añádale instancias TreeModelColumn al ColumnRecord y luego use esas TreeModelColumn cuando establezca u obtenga los datos en las filas del modelo. Probablemente encuentre conveniente derivar un TreeModelColumnRecord que tenga a sus instancias TreeModelColumn como datos miembro.

class ModelColumns : public Gtk::TreeModelColumnRecord
{
public:

  ModelColumns()
    { add(m_col_text); add(m_col_number); }

  Gtk::TreeModelColumn<Glib::ustring> m_col_text;
  Gtk::TreeModelColumn<int> m_col_number;
};

ModelColumns m_Columns;

Especifique el ColumnRecord cuando cree el modelo, así:

Glib::RefPtr<Gtk::ListStore> refListStore =
    Gtk::ListStore::create(m_Columns);

Tenga en cuenta que la instancia (como m_Columns aquí) normalmente no debe ser estática, porque a menudo se necesita instanciarla después de haber instanciado a glibmm.

9.1.4. Añadir filas

Añadir filas al modelo con los métodos append(), prepend(), o insert().

Gtk::TreeModel::iterator iter = m_refListStore->append();

Puede desreferenciar al iterador para obtener la fila:

Gtk::TreeModel::Row row = *iter;

9.1.4.1. Añadiendo filas secundarias

Los modelos Gtk::TreeStore pueden tener elementos hijos. Añádalos con los métodos append(), prepend(), o insert(), así:

Gtk::TreeModel::iterator iter_child =
    m_refListStore->append(row.children());

9.1.5. Configurar los valores

Puede usar la sobrecarga de operator[] para establecer los datos de una columna particular en la fila, especificando la TreeModelColumn que se usó para crear el modelo.

row[m_Columns.m_col_text] = "sometext";

9.1.6. Obtener los valores

Puede usar la sobrecarga operator[] para obtener los datos de una columna particular en una fila, especificando la TreeModelColumn que se usó para crear el modelo.

Glib::ustring strText = row[m_Columns.m_col_text];
int number = row[m_Columns.m_col_number];

El compilador le hará saber si usa un tipo inapropiado. Por ejemplo, esto generaría un error de compilación:

//compiler error - no conversion from ustring to int.
int number = row[m_Columns.m_col_text];

9.1.7. Columnas «ocultas»

Puede querer asociar datos adicionales a cada fila. Si es así, sólo añádalos como una columa del modelo, pero no se los añada a la vista.