From ad2d8a28a804d9cc16d434e09e74f1a6d58ef062 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Thu, 1 Sep 2011 17:56:28 +0200 Subject: [PATCH] Added function GdaEx::data_model_to_gtkliststore. closes #43 --- src/gdaex.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/gdaex.h | 3 +++ 2 files changed, 73 insertions(+) diff --git a/src/gdaex.c b/src/gdaex.c index eda3307..16515f5 100644 --- a/src/gdaex.c +++ b/src/gdaex.c @@ -2164,6 +2164,76 @@ GHashTable return ret; } +/** + * gdaex_data_model_to_gtkliststore: + * @dm: a #GdaDataModel object. + * @only_schema: + * + * Returns: a #GtkListStore, filled or not, that reflects the #GdaDataModel @dm. + */ +GtkListStore +*gdaex_data_model_to_gtkliststore (GdaDataModel *dm, + gboolean only_schema) +{ + GtkListStore *ret; + + guint cols; + guint col; + + GdaColumn *column; + GType *gtypes; + + guint rows; + guint row; + + GtkTreeIter iter; + GValue *gval; + + g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), NULL); + + ret = NULL; + + /* GtkListStore creation */ + + cols = gda_data_model_get_n_columns (dm); + if (cols == 0) + { + g_warning ("Invalid GdaDataModel."); + return NULL; + } + + gtypes = (GType *)g_malloc0 (cols * sizeof (GType)); + + for (col = 0; col < cols; col++) + { + column = gda_data_model_describe_column (dm, col); + gtypes[col] = gda_column_get_g_type (column); + } + ret = gtk_list_store_newv (cols, gtypes); + if (ret == NULL) + { + g_warning ("Unable to create the GtkTreeModel."); + return NULL; + } + + if (!only_schema) + { + /* Filling GtkListStore */ + rows = gda_data_model_get_n_rows (dm); + for (row = 0; row < rows; row++) + { + gtk_list_store_append (ret, &iter); + for (col = 0; col < cols; col++) + { + gval = (GValue *)gda_data_model_get_value_at (dm, col, row, NULL); + gtk_list_store_set_value (ret, &iter, col, gval); + } + } + } + + return ret; +} + /** * gdaex_begin: * @gdaex: a #GdaEx object. diff --git a/src/gdaex.h b/src/gdaex.h index 8b8cff5..1f94c8a 100644 --- a/src/gdaex.h +++ b/src/gdaex.h @@ -175,6 +175,9 @@ struct tm *gdaex_data_model_iter_get_value_tm_at (GdaDataModelIter *iter, GHashTable *gdaex_data_model_columns_to_hashtable (GdaDataModel *dm); +GtkListStore *gdaex_data_model_to_gtkliststore (GdaDataModel *dm, + gboolean only_schema); + gboolean gdaex_begin (GdaEx *gdaex); gint gdaex_execute (GdaEx *gdaex, const gchar *sql); -- 2.49.0