Added function ::data_model_to_gtktreestore.
authorAndrea Zagli <azagli@libero.it>
Sat, 4 Jan 2020 08:01:24 +0000 (09:01 +0100)
committerAndrea Zagli <azagli@libero.it>
Sat, 4 Jan 2020 08:01:24 +0000 (09:01 +0100)
src/gdaex.c
src/gdaex.h

index 4e93e9a71fcfcefa5b8419a59513a1d586db282f..26cbf7a7d4092ea9a18b94099fd13da1c911c381 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  gdaex.c
  *
- *  Copyright (C) 2005-2019 Andrea Zagli <azagli@libero.it>
+ *  Copyright (C) 2005-2020 Andrea Zagli <azagli@libero.it>
  *
  *  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.
index 55cff45abfff7ee9bb658193b279e76620b6540a..373de42b56fe4de1bb37fe4bc750b91b1c7f9c32 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  gdaex.h
  *
- *  Copyright (C) 2005-2019 Andrea Zagli <azagli@libero.it>
+ *  Copyright (C) 2005-2020 Andrea Zagli <azagli@libero.it>
  *
  *  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);