/*
* 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.
*
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.
/*
* 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.
*
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);