Added function GdaEx::data_model_to_gtkliststore.
authorAndrea Zagli <azagli@libero.it>
Thu, 1 Sep 2011 15:56:28 +0000 (17:56 +0200)
committerAndrea Zagli <azagli@libero.it>
Thu, 1 Sep 2011 15:56:28 +0000 (17:56 +0200)
closes #43

src/gdaex.c
src/gdaex.h

index eda33073fb1cc4cd26796848fee5738bd06c23d6..16515f56b5787379741b74ede2269e7fd99d1e7f 100644 (file)
@@ -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.
index 8b8cff5853bbd567c2c3472acab2c1366b9c94b6..1f94c8aa924bea72c1e20ee858cb6687b80837d2 100644 (file)
@@ -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);