From 69f73220ff7133a566f01e357d9f12571c0f847d Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Sat, 4 Jan 2020 09:01:24 +0100 Subject: [PATCH] Added function ::data_model_to_gtktreestore. --- src/gdaex.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++- src/gdaex.h | 4 ++- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/gdaex.c b/src/gdaex.c index 4e93e9a..26cbf7a 100644 --- a/src/gdaex.c +++ b/src/gdaex.c @@ -1,7 +1,7 @@ /* * gdaex.c * - * Copyright (C) 2005-2019 Andrea Zagli + * Copyright (C) 2005-2020 Andrea Zagli * * This file is part of libgdaex. * @@ -2649,6 +2649,76 @@ GtkListStore return ret; } +/** + * gdaex_data_model_to_gtktreestore: + * @dm: a #GdaDataModel object. + * @only_schema: + * + * Returns: a #GtkTreeStore, filled or not, that reflects the #GdaDataModel @dm. + */ +GtkTreeStore +*gdaex_data_model_to_gtktreestore (GdaDataModel *dm, + gboolean only_schema) +{ + GtkTreeStore *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_tree_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_tree_store_append (ret, &iter, NULL); + for (col = 0; col < cols; col++) + { + gval = (GValue *)gda_data_model_get_value_at (dm, col, row, NULL); + gtk_tree_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 55cff45..373de42 100644 --- a/src/gdaex.h +++ b/src/gdaex.h @@ -1,7 +1,7 @@ /* * gdaex.h * - * Copyright (C) 2005-2019 Andrea Zagli + * Copyright (C) 2005-2020 Andrea Zagli * * This file is part of libgdaex. * @@ -204,6 +204,8 @@ GHashTable *gdaex_data_model_row_to_hashtable_from_sql (GdaEx *gdaex, gchar *sql GtkListStore *gdaex_data_model_to_gtkliststore (GdaDataModel *dm, gboolean only_schema); +GtkTreeStore *gdaex_data_model_to_gtktreestore (GdaDataModel *dm, + gboolean only_schema); gboolean gdaex_begin (GdaEx *gdaex); -- 2.49.0