+static GtkTreeModelFlags tree_model_get_flags (GtkTreeModel *model);
+
+static gint tree_model_n_columns (GtkTreeModel *model);
+
+static GType tree_model_column_type (GtkTreeModel *model, gint index);
+
+static gboolean tree_model_get_iter (GtkTreeModel *model, GtkTreeIter *iter,
+ GtkTreePath *path);
+
+static gboolean tree_model_iter_next (GtkTreeModel *model, GtkTreeIter *iter);
+
+static GtkTreePath * tree_model_get_path (GtkTreeModel *model,
+ GtkTreeIter *iter);
+
+static void tree_model_get_value (GtkTreeModel *model, GtkTreeIter *iter,
+ gint column, GValue *value);
+
+static gboolean tree_model_nth_child (GtkTreeModel *model, GtkTreeIter *iter,
+ GtkTreeIter *parent, gint n);
+
+static gint tree_model_n_children (GtkTreeModel *tree_model,
+ GtkTreeIter *iter);
+
+static gboolean tree_model_iter_children (GtkTreeModel *,
+ GtkTreeIter *,
+ GtkTreeIter *);
+
+static gboolean tree_model_iter_parent (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ GtkTreeIter *child);
+
+static gboolean tree_model_iter_has_child (GtkTreeModel *tree_model,
+ GtkTreeIter *iter);
+
+static void
+dictionary_tree_model_init (GtkTreeModelIface *iface)
+{
+ iface->get_flags = tree_model_get_flags;
+ iface->get_n_columns = tree_model_n_columns;
+ iface->get_column_type = tree_model_column_type;
+ iface->get_iter = tree_model_get_iter;
+ iface->iter_next = tree_model_iter_next;
+ iface->get_path = tree_model_get_path;
+ iface->get_value = tree_model_get_value;
+
+ iface->iter_children = tree_model_iter_children ;
+ iface->iter_has_child = tree_model_iter_has_child ;
+ iface->iter_n_children = tree_model_n_children ;
+ iface->iter_nth_child = tree_model_nth_child ;
+ iface->iter_parent = tree_model_iter_parent ;
+}
+
+static gboolean
+tree_model_iter_has_child (GtkTreeModel *tree_model,
+ GtkTreeIter *iter)
+{
+ return FALSE;
+}
+
+static gboolean
+tree_model_iter_parent (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ GtkTreeIter *child)
+{
+ return TRUE;
+}
+
+static GtkTreeModelFlags
+tree_model_get_flags (GtkTreeModel *model)
+{
+ g_return_val_if_fail (PSPPIRE_IS_DICT (model), (GtkTreeModelFlags) 0);
+
+ return GTK_TREE_MODEL_LIST_ONLY;
+}
+
+
+static gint
+tree_model_n_columns (GtkTreeModel *model)
+{
+ return n_DICT_COLS;
+}
+
+static GType
+tree_model_column_type (GtkTreeModel *model, gint index)
+{
+ g_return_val_if_fail (PSPPIRE_IS_DICT (model), (GType) 0);
+
+ switch (index)
+ {
+ case DICT_TVM_COL_NAME:
+ return G_TYPE_STRING;
+ break;
+ case DICT_TVM_COL_VAR:
+ return PSPPIRE_VAR_PTR_TYPE;
+ break;
+ case DICT_TVM_COL_LABEL:
+ return G_TYPE_STRING;
+ break;
+ default:
+ g_return_val_if_reached ((GType)0);
+ break;
+ }
+
+ g_assert_not_reached ();
+ return ((GType)0);
+}
+
+static gboolean
+tree_model_get_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreePath *path)