[libgda] Sealed most GdaSet and GdauiSet structures
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Sealed most GdaSet and GdauiSet structures
- Date: Fri, 5 Apr 2013 19:37:45 +0000 (UTC)
commit 50e5f57545e2749f858e652c5495ec4172a1d797
Author: Daniel Espinosa <esodan gmail com>
Date: Tue Mar 26 13:57:34 2013 -0600
Sealed most GdaSet and GdauiSet structures
.../data-entries/gdaui-data-cell-renderer-combo.c | 31 +-
.../data-entries/gdaui-data-cell-renderer-info.c | 11 +-
libgda-ui/data-entries/gdaui-entry-combo.c | 35 +-
libgda-ui/gdaui-basic-form.c | 57 ++-
libgda-ui/gdaui-data-entry.c | 2 +-
libgda-ui/gdaui-raw-grid.c | 86 ++--
libgda-ui/gdaui-set.c | 130 +++++-
libgda-ui/gdaui-set.h | 112 ++---
libgda-ui/internal/utility.c | 28 +-
libgda-ui/libgda-ui.symbols | 23 +
libgda/gda-set.c | 543 +++++++++++++++++---
libgda/gda-set.h | 90 ++--
libgda/gda-value.h | 14 -
libgda/libgda-5.0.vapi | 33 +-
libgda/libgda.symbols | 28 +
15 files changed, 904 insertions(+), 319 deletions(-)
---
diff --git a/libgda-ui/data-entries/gdaui-data-cell-renderer-combo.c
b/libgda-ui/data-entries/gdaui-data-cell-renderer-combo.c
index ba6152e..c86f1a0 100644
--- a/libgda-ui/data-entries/gdaui-data-cell-renderer-combo.c
+++ b/libgda-ui/data-entries/gdaui-data-cell-renderer-combo.c
@@ -292,7 +292,7 @@ gdaui_data_cell_renderer_combo_set_property (GObject *object,
gvalues = g_list_next (gvalues);
}
- g_return_if_fail (length == datacell->priv->source->ref_n_cols);
+ g_return_if_fail (length == gdaui_set_source_get_ref_n_cols
(datacell->priv->source));
if (allnull)
g_object_set (G_OBJECT (object), "text", "", NULL);
@@ -301,20 +301,21 @@ gdaui_data_cell_renderer_combo_set_property (GObject *object,
/* if (gdaui_data_model_get_status (datacell->priv->data_model) & */
/*
GDAUI_DATA_MODEL_NEEDS_INIT_REFRESH) */
/*
gdaui_data_model_refresh (datacell->priv->data_model, NULL); */
- row = gda_data_model_get_row_from_values
(datacell->priv->source->source->data_model,
+ GdaDataModel *source_model;
+ source_model = gda_set_source_get_data_model
(gdaui_set_source_get_source (datacell->priv->source));
+ row = gda_data_model_get_row_from_values (source_model,
values,
-
datacell->priv->source->ref_cols_index);
+
gdaui_set_source_get_ref_columns (datacell->priv->source));
if (row >= 0) {
GList *dsplay_values = NULL;
gint i;
gchar *str;
- for (i = 0; i < datacell->priv->source->shown_n_cols; i++) {
+ for (i = 0; i < gdaui_set_source_get_shown_n_cols
(datacell->priv->source); i++) {
const GValue *value;
-
- value = gda_data_model_get_value_at
(datacell->priv->source->source->data_model,
-
datacell->priv->source->shown_cols_index [i],
- row, NULL);
+ gint* cols;
+ cols = gdaui_set_source_get_shown_columns
(datacell->priv->source);
+ value = gda_data_model_get_value_at (source_model,
cols [i], row, NULL);
dsplay_values = g_list_append (dsplay_values, (GValue
*) value);
}
str = render_text_to_display_from_values (dsplay_values);
@@ -349,7 +350,7 @@ gdaui_data_cell_renderer_combo_set_property (GObject *object,
GList *gvalues = g_value_get_pointer (value);
gchar *str;
- g_assert (g_list_length (gvalues) == (guint)datacell->priv->source->shown_n_cols);
+ g_assert (g_list_length (gvalues) == (guint) gdaui_set_source_get_shown_n_cols
(datacell->priv->source));
str = render_text_to_display_from_values (gvalues);
g_object_set (G_OBJECT (object), "text", str, NULL);
g_free (str);
@@ -551,15 +552,17 @@ gdaui_data_cell_renderer_combo_start_editing (GtkCellRenderer *cell,
GdauiDataCellRendererCombo *datacell;
GtkWidget *combo;
gboolean editable;
+ GdaDataModel *source_model;
g_object_get ((GObject*) cell, "editable", &editable, NULL);
if (editable == FALSE)
return NULL;
datacell = GDAUI_DATA_CELL_RENDERER_COMBO (cell);
- combo = gdaui_combo_new_with_model (GDA_DATA_MODEL (datacell->priv->source->source->data_model),
- datacell->priv->source->shown_n_cols,
- datacell->priv->source->shown_cols_index);
+ source_model = gda_set_source_get_data_model (gdaui_set_source_get_source (datacell->priv->source));
+ combo = gdaui_combo_new_with_model (source_model,
+ gdaui_set_source_get_shown_n_cols (datacell->priv->source),
+ gdaui_set_source_get_shown_columns (datacell->priv->source));
g_object_set (combo, "has-frame", FALSE, NULL);
g_object_set_data_full (G_OBJECT (combo),
@@ -598,8 +601,8 @@ gdaui_data_cell_renderer_combo_editing_done (GtkCellEditable *combo, GdauiDataCe
return;
list = _gdaui_combo_get_selected_ext (GDAUI_COMBO (combo),
- datacell->priv->source->ref_n_cols,
- datacell->priv->source->ref_cols_index);
+ gdaui_set_source_get_ref_n_cols (datacell->priv->source),
+ gdaui_set_source_get_ref_columns (datacell->priv->source));
list_all = _gdaui_combo_get_selected_ext (GDAUI_COMBO (combo), 0, NULL);
path = g_object_get_data (G_OBJECT (combo), GDAUI_DATA_CELL_RENDERER_COMBO_PATH);
diff --git a/libgda-ui/data-entries/gdaui-data-cell-renderer-info.c
b/libgda-ui/data-entries/gdaui-data-cell-renderer-info.c
index a734013..931ef04 100644
--- a/libgda-ui/data-entries/gdaui-data-cell-renderer-info.c
+++ b/libgda-ui/data-entries/gdaui-data-cell-renderer-info.c
@@ -456,17 +456,18 @@ gdaui_data_cell_renderer_info_activate (GtkCellRenderer *cell,
gtk_tree_path_free (treepath);
/* we want the attributes */
- if (! cellinfo->priv->group->group->nodes_source) {
+ if (! gda_set_group_get_source (gdaui_set_group_get_group (cellinfo->priv->group))) {
gint col;
GdaDataModel *proxied_model;
GdaDataProxy *proxy;
-
+ GdaSetGroup *sg;
+
proxy = gdaui_data_store_get_proxy (cellinfo->priv->store);
proxied_model = gda_data_proxy_get_proxied_model (proxy);
-
- g_assert (g_slist_length (cellinfo->priv->group->group->nodes) == 1);
+ sg = gdaui_set_group_get_group (cellinfo->priv->group);
+ g_assert (gda_set_group_get_n_nodes (sg) == 1);
col = g_slist_index (GDA_SET (cellinfo->priv->iter)->holders,
- GDA_SET_NODE
(cellinfo->priv->group->group->nodes->data)->holder);
+ gda_set_node_get_holder ( gda_set_group_get_node (sg)));
gtk_tree_model_get (GTK_TREE_MODEL (cellinfo->priv->store), &iter,
gda_data_model_get_n_columns (proxied_model) + col,
diff --git a/libgda-ui/data-entries/gdaui-entry-combo.c b/libgda-ui/data-entries/gdaui-entry-combo.c
index 2713005..e9d4018 100644
--- a/libgda-ui/data-entries/gdaui-entry-combo.c
+++ b/libgda-ui/data-entries/gdaui-entry-combo.c
@@ -241,15 +241,17 @@ uiset_source_model_changed_cb (G_GNUC_UNUSED GdauiSet *paramlist, GdauiSetSource
{
if (source == combo->priv->source) {
GSList *list, *values = NULL;
- for (list = source->source->nodes; list; list = list->next) {
+ GdaSetSource *s;
+ s = gdaui_set_source_get_source (source);
+ for (list = gda_set_source_get_nodes (s); list; list = list->next) {
const GValue *cvalue;
- cvalue = gda_holder_get_value (GDA_SET_NODE (list->data)->holder);
+ cvalue = gda_holder_get_value (gda_set_node_get_holder (GDA_SET_NODE (list->data)));
values = g_slist_append (values, (GValue *) cvalue);
}
gdaui_combo_set_model (GDAUI_COMBO (combo->priv->combo_entry),
- source->source->data_model,
- combo->priv->source->shown_n_cols,
- combo->priv->source->shown_cols_index);
+ gda_set_source_get_data_model (s),
+ gdaui_set_source_get_shown_n_cols (combo->priv->source),
+ gdaui_set_source_get_shown_columns (combo->priv->source));
_gdaui_combo_set_selected_ext (GDAUI_COMBO (combo->priv->combo_entry), values, NULL);
g_slist_free (values);
gdaui_combo_add_null (GDAUI_COMBO (combo->priv->combo_entry), combo->priv->null_possible);
@@ -287,23 +289,23 @@ void _gdaui_entry_combo_construct (GdauiEntryCombo* combo, GdauiSet *paramlist,
* and use the values provided by the parameters to display the correct row */
null_possible = TRUE;
values = NULL;
- for (list = source->source->nodes; list; list = list->next) {
+ for (list = gda_set_source_get_nodes (gdaui_set_source_get_source (source)); list; list = list->next)
{
ComboNode *cnode = g_new0 (ComboNode, 1);
cnode->node = GDA_SET_NODE (list->data);
cnode->value = NULL;
combo->priv->combo_nodes = g_slist_append (combo->priv->combo_nodes, cnode);
- values = g_slist_append (values, (GValue *) gda_holder_get_value (cnode->node->holder));
- if (gda_holder_get_not_null (cnode->node->holder))
+ values = g_slist_append (values, (GValue *) gda_holder_get_value (gda_set_node_get_holder
(cnode->node)));
+ if (gda_holder_get_not_null (gda_set_node_get_holder (cnode->node)))
null_possible = FALSE;
}
combo->priv->null_possible = null_possible;
/* create the combo box itself */
- entry = gdaui_combo_new_with_model (GDA_DATA_MODEL (source->source->data_model),
- combo->priv->source->shown_n_cols,
- combo->priv->source->shown_cols_index);
+ entry = gdaui_combo_new_with_model (gda_set_source_get_data_model (gdaui_set_source_get_source
(source)),
+ gdaui_set_source_get_shown_n_cols (combo->priv->source),
+ gdaui_set_source_get_shown_columns (combo->priv->source));
g_object_set (G_OBJECT (entry), "as-list", TRUE, NULL);
gdaui_entry_shell_pack_entry (GDAUI_ENTRY_SHELL (combo), entry);
@@ -445,7 +447,7 @@ combo_contents_changed_cb (G_GNUC_UNUSED GdauiCombo *entry, GdauiEntryCombo *com
ComboNode *node = COMBO_NODE (list->data);
gda_value_free (node->value);
- gtk_tree_model_get (model, &iter, node->node->source_column, &(node->value), -1);
+ gtk_tree_model_get (model, &iter, gda_set_node_get_source_column (node->node),
&(node->value), -1);
if (node->value)
node->value = gda_value_copy (node->value);
/*g_print ("%s (%p): Set Combo Node value to %s (%p)\n", __FUNCTION__, combo,
@@ -503,7 +505,7 @@ gdaui_entry_combo_set_values (GdauiEntryCombo *combo, GSList *values)
model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo->priv->combo_entry));
if (gdaui_data_store_get_iter_from_values (GDAUI_DATA_STORE (model), &iter,
- values, combo->priv->source->ref_cols_index)) {
+ values, gdaui_set_source_get_ref_columns
(combo->priv->source))) {
ComboNode *node;
real_combo_block_signals (combo);
@@ -514,7 +516,7 @@ gdaui_entry_combo_set_values (GdauiEntryCombo *combo, GSList *values)
for (list = combo->priv->combo_nodes; list; list = list->next) {
node = COMBO_NODE (list->data);
gda_value_free (node->value);
- gtk_tree_model_get (model, &iter, node->node->source_column,
+ gtk_tree_model_get (model, &iter, gda_set_node_get_source_column (node->node),
&(node->value), -1);
if (node->value)
node->value = gda_value_copy (node->value);
@@ -644,8 +646,9 @@ gdaui_entry_combo_set_reference_values (GdauiEntryCombo *combo, GSList *values)
GdaColumn *attrs;
GType type = GDA_TYPE_NULL;
- attrs = gda_data_model_describe_column (combo->priv->source->source->data_model,
- COMBO_NODE
(nodes->data)->node->source_column);
+ attrs = gda_data_model_describe_column (
+ gda_set_source_get_data_model (gdaui_set_source_get_source
(combo->priv->source)),
+ gda_set_node_get_source_column (COMBO_NODE
(nodes->data)->node));
arg_value = (GValue*) (argptr->data);
if (arg_value)
diff --git a/libgda-ui/gdaui-basic-form.c b/libgda-ui/gdaui-basic-form.c
index df83568..442e033 100644
--- a/libgda-ui/gdaui-basic-form.c
+++ b/libgda-ui/gdaui-basic-form.c
@@ -575,20 +575,21 @@ paramlist_param_attr_changed_cb (G_GNUC_UNUSED GdaSet *paramlist, GdaHolder *par
!strcmp (att_name, GDA_ATTRIBUTE_DESCRIPTION)) {
if (sentry) {
gchar *str, *title;
+ GdaSetSource *ss;
str = create_text_label_for_sentry (sentry, &title);
gtk_label_set_text (GTK_LABEL (sentry->label), str);
g_free (str);
g_free (sentry->label_title);
sentry->label_title = title;
-
- if (! sentry->group->group->nodes_source) {
+ ss = gda_set_group_get_source (gdaui_set_group_get_group (sentry->group));
+ if (!ss) {
g_object_get (G_OBJECT (param), "description", &title, NULL);
if (title && *title)
gtk_widget_set_tooltip_text (sentry->label, title);
g_free (title);
}
else {
- title = g_object_get_data (G_OBJECT
(sentry->group->group->nodes_source->data_model),
+ title = g_object_get_data (G_OBJECT (gda_set_source_get_data_model (ss)),
"descr");
if (title && *title)
gtk_widget_set_tooltip_text (sentry->label, title);
@@ -823,8 +824,10 @@ static gchar *
create_text_label_for_sentry (SingleEntry *sentry, gchar **out_title)
{
gchar *label = NULL;
+ GdaSetSource *ss;
g_assert (out_title);
- if (! sentry->group->group->nodes_source) {
+ ss = gda_set_group_get_source (gdaui_set_group_get_group (sentry->group));
+ if (!ss) {
g_object_get (G_OBJECT (sentry->single_param), "name", out_title, NULL);
if (!*out_title)
*out_title = g_strdup (_("Value"));
@@ -841,13 +844,14 @@ create_text_label_for_sentry (SingleEntry *sentry, gchar **out_title)
GSList *params;
gchar *title = NULL;
- label = g_object_get_data (G_OBJECT (sentry->group->group->nodes_source->data_model), "name");
+ label = g_object_get_data (G_OBJECT (gda_set_source_get_data_model (ss)), "name");
if (label)
title = g_strdup (label);
else {
GString *tstring = NULL;
- for (params = sentry->group->group->nodes; params; params = params->next) {
- g_object_get (G_OBJECT (GDA_SET_NODE (params->data)->holder),
+ for (params = gda_set_group_get_nodes (gdaui_set_group_get_group (sentry->group));
+ params; params = params->next) {
+ g_object_get (gda_set_node_get_holder (GDA_SET_NODE (params->data)),
"name", &title, NULL);
if (title) {
if (tstring)
@@ -875,6 +879,7 @@ static void
create_entry_widget (SingleEntry *sentry)
{
GdauiSetGroup *group;
+ GdaSetGroup *sg;
GtkWidget *entry;
gboolean editable = TRUE;
GValue *ref_value = NULL;
@@ -916,7 +921,8 @@ create_entry_widget (SingleEntry *sentry)
}
group = sentry->group;
- if (! group->group->nodes_source) {
+ sg = gdaui_set_group_get_group (group);
+ if (! gda_set_group_get_source (sg)) {
/* there is only one non-constrained parameter */
GdaHolder *param;
GType type;
@@ -925,9 +931,9 @@ create_entry_widget (SingleEntry *sentry)
const gchar *plugin = NULL;
const GValue *plugin_val;
- g_assert (! group->group->nodes->next); /* only 1 item in the list */
+ g_assert (gda_set_group_get_n_nodes (sg) == 1); /* only 1 item in the list */
- param = GDA_HOLDER (GDA_SET_NODE (group->group->nodes->data)->holder);
+ param = GDA_HOLDER (gda_set_node_get_holder (gda_set_group_get_node (sg)));
sentry->single_param = param;
val = gda_holder_get_value (param);
@@ -1010,14 +1016,14 @@ create_entry_widget (SingleEntry *sentry)
GSList *plist;
gboolean nullok = TRUE;
- entry = gdaui_entry_combo_new (sentry->form->priv->set_info, group->source);
+ entry = gdaui_entry_combo_new (sentry->form->priv->set_info, gdaui_set_group_get_source
(group));
/* connect to the parameter's changes */
sentry->group_signals = g_array_new (FALSE, FALSE, sizeof (SignalData));
- for (plist = group->group->nodes; plist; plist = plist->next) {
+ for (plist = gda_set_group_get_nodes (gdaui_set_group_get_group (group)); plist; plist =
plist->next) {
GdaHolder *param;
- param = GDA_SET_NODE (plist->data)->holder;
+ param = gda_set_node_get_holder (GDA_SET_NODE (plist->data));
if (gda_holder_get_not_null (param))
nullok = FALSE;
@@ -1036,6 +1042,7 @@ create_entry_widget (SingleEntry *sentry)
/* label */
gchar *title = NULL;
gchar *str;
+ GdaSetSource *ss;
str = create_text_label_for_sentry (sentry, &title);
sentry->label = gtk_label_new (str);
@@ -1044,9 +1051,8 @@ create_entry_widget (SingleEntry *sentry)
sentry->label_title = title;
gtk_misc_set_alignment (GTK_MISC (sentry->label), 0., 0.);
gtk_widget_show (sentry->label);
-
- title = g_object_get_data (G_OBJECT (group->group->nodes_source->data_model),
- "descr");
+ ss = gda_set_group_get_source (gdaui_set_group_get_group (group));
+ title = g_object_get_data (G_OBJECT (gda_set_source_get_data_model (ss)), "descr");
if (title && *title)
gtk_widget_set_tooltip_text (sentry->label, title);
@@ -1498,7 +1504,7 @@ entry_contents_modified (GdauiDataEntry *entry, SingleEntry *sentry)
GdauiSetGroup *group;
group = sentry->group;
- params = group->group->nodes;
+ params = gda_set_group_get_nodes (gdaui_set_group_get_group (group));
values = gdaui_entry_combo_get_values (GDAUI_ENTRY_COMBO (entry));
g_assert (g_slist_length (params) == g_slist_length (values));
@@ -1516,7 +1522,7 @@ entry_contents_modified (GdauiDataEntry *entry, SingleEntry *sentry)
sentry->forward_param_updates = FALSE;
/* parameter's value */
- param = GDA_SET_NODE (params->data)->holder;
+ param = gda_set_node_get_holder (GDA_SET_NODE (params->data));
gda_holder_set_value (param, (GValue *)(list->data), NULL);
g_signal_emit (G_OBJECT (sentry->form), gdaui_basic_form_signals[HOLDER_CHANGED],
0, param, TRUE);
@@ -1596,9 +1602,10 @@ parameter_changed_cb (GdaHolder *param, SingleEntry *sentry)
GSList *list;
gboolean allnull = TRUE;
- for (list = sentry->group->group->nodes; list; list = list->next) {
+ for (list = gda_set_group_get_nodes (gdaui_set_group_get_group (sentry->group));
+ list; list = list->next) {
const GValue *pvalue;
- pvalue = gda_holder_get_value (GDA_SET_NODE (list->data)->holder);
+ pvalue = gda_holder_get_value (gda_set_node_get_holder (GDA_SET_NODE
(list->data)));
values = g_slist_append (values, (GValue *) pvalue);
if (allnull && pvalue &&
(G_VALUE_TYPE ((GValue *) pvalue) != GDA_TYPE_NULL))
@@ -1679,9 +1686,10 @@ gdaui_basic_form_set_as_reference (GdauiBasicForm *form)
GSList *params;
gboolean allnull = TRUE;
- for (params = sentry->group->group->nodes; params; params = params->next) {
+ for (params = gda_set_group_get_nodes (gdaui_set_group_get_group (sentry->group));
+ params; params = params->next) {
const GValue *pvalue;
- pvalue = gda_holder_get_value (GDA_SET_NODE (params->data)->holder);
+ pvalue = gda_holder_get_value (gda_set_node_get_holder (GDA_SET_NODE
(params->data)));
values = g_slist_append (values, (GValue *) pvalue);
if (allnull && pvalue &&
(G_VALUE_TYPE ((GValue *) pvalue) != GDA_TYPE_NULL))
@@ -2033,8 +2041,9 @@ get_single_entry_for_holder (GdauiBasicForm *form, GdaHolder *param)
/* multiple parameters */
GSList *params;
- for (params = sentry->group->group->nodes; params; params = params->next) {
- if (GDA_SET_NODE (params->data)->holder == (gpointer) param)
+ for (params = gda_set_group_get_nodes (gdaui_set_group_get_group (sentry->group));
params;
+ params = params->next) {
+ if (gda_set_node_get_holder (GDA_SET_NODE (params->data)) == (gpointer) param)
return sentry;
}
}
diff --git a/libgda-ui/gdaui-data-entry.c b/libgda-ui/gdaui-data-entry.c
index 4981111..5425693 100644
--- a/libgda-ui/gdaui-data-entry.c
+++ b/libgda-ui/gdaui-data-entry.c
@@ -289,7 +289,7 @@ gdaui_data_entry_validate (GdauiDataEntry *de, GError **error)
g_return_val_if_fail (GDAUI_IS_DATA_ENTRY (de), FALSE);
if (GDAUI_DATA_ENTRY_GET_IFACE (de)->validate)
- (GDAUI_DATA_ENTRY_GET_IFACE (de)->validate) (de, error);
+ return (GDAUI_DATA_ENTRY_GET_IFACE (de)->validate) (de, error);
else
return TRUE;
}
diff --git a/libgda-ui/gdaui-raw-grid.c b/libgda-ui/gdaui-raw-grid.c
index 919b0d2..50d918f 100644
--- a/libgda-ui/gdaui-raw-grid.c
+++ b/libgda-ui/gdaui-raw-grid.c
@@ -739,9 +739,10 @@ create_columns_data (GdauiRawGrid *grid)
GdauiSetGroup *group;
GtkCellRenderer *renderer;
ColumnData *cdata;
+ GdaSetGroup *sg;
group = GDAUI_SET_GROUP (list->data);
-
+ sg = gdaui_set_group_get_group (group);
/* update the list of columns data */
cdata = get_column_data_for_group (grid, group);
if (!cdata) {
@@ -754,9 +755,9 @@ create_columns_data (GdauiRawGrid *grid)
}
/* create renderers */
- if (group->source) {
+ if (gdaui_set_group_get_source (group)) {
/* parameters depending on a GdaDataModel */
- gchar *title;
+ gchar *title;
/*
GSList *nodes;
@@ -769,11 +770,11 @@ create_columns_data (GdauiRawGrid *grid)
*/
/* determine title */
- if (g_slist_length (group->group->nodes) == 1)
- title = (gchar *) g_object_get_data (G_OBJECT (GDA_SET_NODE
(group->group->nodes->data)->holder),
+ if (gda_set_group_get_n_nodes (sg) == 1)
+ title = (gchar *) g_object_get_data (G_OBJECT (gda_set_node_get_holder
(gda_set_group_get_node (sg))),
"name");
else
- title = (gchar *) g_object_get_data (G_OBJECT
(group->group->nodes_source->data_model),
+ title = (gchar *) g_object_get_data (G_OBJECT (gda_set_source_get_data_model
(gda_set_group_get_source (sg))),
"name");
if (title)
@@ -784,7 +785,7 @@ create_columns_data (GdauiRawGrid *grid)
/* FIXME: if nullok is FALSE, then set the column title in bold */
cdata->tooltip_text = g_strdup (_("Can't be NULL"));
- renderer = gdaui_data_cell_renderer_combo_new (grid->priv->iter_info, group->source);
+ renderer = gdaui_data_cell_renderer_combo_new (grid->priv->iter_info,
gdaui_set_group_get_source (group));
cdata->data_cell = g_object_ref_sink ((GObject*) renderer);
g_hash_table_insert (grid->priv->columns_hash, renderer, cdata);
g_free (cdata->title);
@@ -801,7 +802,7 @@ create_columns_data (GdauiRawGrid *grid)
gchar *title;
gint model_col;
- param = GDA_HOLDER (GDA_SET_NODE (group->group->nodes->data)->holder);
+ param = gda_set_node_get_holder (gda_set_group_get_node (sg));
cdata->single_param = param;
g_type = gda_holder_get_g_type (param);
@@ -1084,7 +1085,8 @@ cell_value_set_attributes (G_GNUC_UNUSED GtkTreeViewColumn *tree_column,
GtkTreeIter *iter, GdauiRawGrid *grid)
{
GdauiSetGroup *group;
- guint attributes;
+ GdaSetGroup *sg;
+ guint attributes;
gboolean to_be_deleted = FALSE;
ColumnData *cdata;
@@ -1094,8 +1096,9 @@ cell_value_set_attributes (G_GNUC_UNUSED GtkTreeViewColumn *tree_column,
return;
}
group = cdata->group;
+ sg = gdaui_set_group_get_group (group);
- if (group->group->nodes_source) {
+ if (gda_set_group_get_source (sg)) {
/* parameters depending on a GdaDataModel */
GList *values = NULL;
@@ -1166,9 +1169,9 @@ cell_value_set_attributes (G_GNUC_UNUSED GtkTreeViewColumn *tree_column,
offset = gda_data_model_get_n_columns (gda_data_proxy_get_proxied_model (grid->priv->proxy));
- g_assert (g_slist_length (group->group->nodes) == 1);
+ g_assert (gda_set_group_get_n_nodes (sg) == 1);
col = g_slist_index (((GdaSet *)grid->priv->iter)->holders,
- GDA_SET_NODE (group->group->nodes->data)->holder);
+ gda_set_node_get_holder (gda_set_group_get_node (sg)));
gtk_tree_model_get (GTK_TREE_MODEL (grid->priv->store), iter,
GDAUI_DATA_STORE_COL_TO_DELETE, &to_be_deleted,
col, &value,
@@ -1211,6 +1214,7 @@ cell_info_set_attributes (GtkTreeViewColumn *tree_column,
GtkTreeIter *iter, GdauiRawGrid *grid)
{
GdauiSetGroup *group;
+ GdaSetGroup *sg;
guint attributes;
gboolean to_be_deleted = FALSE;
ColumnData *cdata;
@@ -1221,8 +1225,9 @@ cell_info_set_attributes (GtkTreeViewColumn *tree_column,
return;
}
group = cdata->group;
+ sg = gdaui_set_group_get_group (group);
- if (group->group->nodes_source) {
+ if (gda_set_group_get_source (sg)) {
/* parameters depending on a GdaDataModel */
attributes = _gdaui_utility_proxy_compute_attributes_for_group (group, grid->priv->store,
grid->priv->iter,
@@ -1244,9 +1249,9 @@ cell_info_set_attributes (GtkTreeViewColumn *tree_column,
offset = gda_data_model_get_n_columns (gda_data_proxy_get_proxied_model (grid->priv->proxy));
- g_assert (g_slist_length (group->group->nodes) == 1);
+ g_assert (gda_set_group_get_n_nodes (sg) == 1);
col = g_slist_index (((GdaSet *)grid->priv->iter)->holders,
- GDA_SET_NODE (group->group->nodes->data)->holder);
+ gda_set_node_get_holder (gda_set_group_get_node (sg)));
gtk_tree_model_get (GTK_TREE_MODEL (grid->priv->store), iter,
GDAUI_DATA_STORE_COL_TO_DELETE, &to_be_deleted,
GDAUI_DATA_STORE_COL_MODEL_ROW, &row,
@@ -1273,18 +1278,18 @@ static void
data_cell_value_changed (GtkCellRenderer *renderer, const gchar *path, const GValue *new_value, GdauiRawGrid
*grid)
{
GtkTreeIter iter;
- GdauiSetGroup *group;
+ GdaSetGroup *sg;
ColumnData *cdata;
cdata = g_hash_table_lookup (grid->priv->columns_hash, renderer);
g_assert (cdata);
- group = cdata->group;
- g_assert (g_slist_length (group->group->nodes) == 1);
+ sg = gdaui_set_group_get_group (cdata->group);
+ g_assert (gda_set_group_get_n_nodes (sg) == 1);
if (set_iter_from_path (grid, path, &iter)) {
gint col;
col = g_slist_index (((GdaSet *)grid->priv->iter)->holders,
- GDA_SET_NODE (group->group->nodes->data)->holder);
+ gda_set_node_get_holder (gda_set_group_get_node (sg)));
gdaui_data_store_set_value (grid->priv->store, &iter, col, new_value);
}
}
@@ -1301,15 +1306,17 @@ data_cell_values_changed (GtkCellRenderer *renderer, const gchar *path,
{
GtkTreeIter iter;
GdauiSetGroup *group;
+ GdaSetGroup *sg;
ColumnData *cdata;
cdata = g_hash_table_lookup (grid->priv->columns_hash, renderer);
g_assert (cdata);
group = cdata->group;
- g_assert (group->group->nodes_source);
+ sg = gdaui_set_group_get_group (group);
+ g_assert (gda_set_group_get_source (sg));
if (new_values)
- g_return_if_fail (g_slist_length (group->group->nodes) == g_slist_length (new_values));
+ g_return_if_fail (gda_set_group_get_n_nodes (sg) == g_slist_length (new_values));
else
/* the reason for not having any value is that the GdauiDataCellRendererCombo had no selected
item */
return;
@@ -1319,11 +1326,11 @@ data_cell_values_changed (GtkCellRenderer *renderer, const gchar *path,
gint col;
/* update the GdauiDataStore */
- for (params = group->group->nodes, list = new_values;
+ for (params = gda_set_group_get_nodes (sg), list = new_values;
list;
params = params->next, list = list->next) {
col = g_slist_index (((GdaSet *)grid->priv->iter)->holders,
- GDA_SET_NODE (params->data)->holder);
+ gda_set_node_get_holder (GDA_SET_NODE (params->data)));
gdaui_data_store_set_value (grid->priv->store, &iter, col, (GValue *)(list->data));
}
@@ -1333,13 +1340,13 @@ data_cell_values_changed (GtkCellRenderer *renderer, const gchar *path,
proxy_row = gdaui_data_store_get_row_from_iter (grid->priv->store, &iter);
gint i;
- for (i = 0; i < group->source->shown_n_cols; i++) {
+ for (i = 0; i < gdaui_set_source_get_shown_n_cols (gdaui_set_group_get_source (group)); i++) {
GValue *value;
col = group->nodes_source->shown_cols_index[i];
value = (GValue *) g_slist_nth_data (all_new_values, col);
gda_data_proxy_set_model_row_value (grid->priv->proxy,
- group->group->nodes_source->data_model,
+ gda_set_source_get_data_model
(gda_set_group_get_source (sg)),
proxy_row, col, value);
}
#endif
@@ -1368,13 +1375,15 @@ static void
treeview_column_clicked_cb (GtkTreeViewColumn *tree_column, GdauiRawGrid *grid)
{
GdauiSetGroup *group;
+ GdaSetGroup *sg;
GSList *nodes;
group = g_object_get_data (G_OBJECT (tree_column), "__gdaui_group");
g_assert (group);
+ sg = gdaui_set_group_get_group (group);
- for (nodes = group->group->nodes; nodes; nodes = nodes->next) {
- GdaHolder *param = ((GdaSetNode*) nodes->data)->holder;
+ for (nodes = gda_set_group_get_nodes (sg); nodes; nodes = nodes->next) {
+ GdaHolder *param = gda_set_node_get_holder (GDA_SET_NODE (nodes->data));
gint pos;
g_assert (param);
@@ -1396,6 +1405,7 @@ data_cell_status_changed (GtkCellRenderer *renderer, const gchar *path, GdaValue
GtkTreePath *treepath;
GtkTreeIter iter;
GdauiSetGroup *group;
+ GdaSetGroup *sg;
GtkTreeModel *tree_model;
gint col;
gint offset;
@@ -1405,6 +1415,7 @@ data_cell_status_changed (GtkCellRenderer *renderer, const gchar *path, GdaValue
cdata = g_hash_table_lookup (grid->priv->columns_hash, renderer);
g_assert (cdata);
group = cdata->group;
+ sg = gdaui_set_group_get_group (group);
offset = gda_data_model_get_n_columns (gda_data_proxy_get_proxied_model (grid->priv->proxy));
@@ -1419,13 +1430,13 @@ data_cell_status_changed (GtkCellRenderer *renderer, const gchar *path, GdaValue
gtk_tree_path_free (treepath);
g_value_set_uint (attribute = gda_value_new (G_TYPE_UINT), requested_action);
- if (group->group->nodes_source) {
+ if (gda_set_group_get_source (sg)) {
/* parameters depending on a GdaDataModel */
GSList *list;
- for (list = group->group->nodes; list; list = list->next) {
+ for (list = gda_set_group_get_nodes (sg); list; list = list->next) {
col = g_slist_index (((GdaSet *)grid->priv->iter)->holders,
- GDA_SET_NODE (list->data)->holder);
+ gda_set_node_get_holder (GDA_SET_NODE (list->data)));
gdaui_data_store_set_value (grid->priv->store, &iter, offset + col, attribute);
}
@@ -1435,8 +1446,10 @@ data_cell_status_changed (GtkCellRenderer *renderer, const gchar *path, GdaValue
/* call gda_data_proxy_set_model_row_value() */
gint i;
- for (i = 0; i < group->nodes_source->shown_n_cols; i++) {
- col = group->nodes_source->shown_cols_index[i];
+ GdauiSetSource gs;
+ gs = gdaui_set_group_get_source (group);
+ for (i = 0; i < gdaui_set_source_get_shown_n_cols (gs); i++) {
+ col = (gdaui_set_source_get_shown_columns (gs))[i];
if (requested_action & GDA_VALUE_ATTR_IS_NULL)
gda_data_proxy_set_model_row_value (grid->priv->proxy,
@@ -1462,9 +1475,9 @@ data_cell_status_changed (GtkCellRenderer *renderer, const gchar *path, GdaValue
/* single direct parameter */
gint col;
- g_assert (g_slist_length (group->group->nodes) == 1);
+ g_assert (gda_set_group_get_n_nodes (sg) == 1);
col = g_slist_index (((GdaSet *)grid->priv->iter)->holders,
- GDA_SET_NODE (group->group->nodes->data)->holder);
+ gda_set_node_get_holder (gda_set_group_get_node (sg)));
gdaui_data_store_set_value (grid->priv->store, &iter, offset + col, attribute);
}
gda_value_free (attribute);
@@ -2347,9 +2360,10 @@ save_as_response_cb (GtkDialog *dialog, gint response_id, GdauiRawGrid *grid)
GSList *params;
group = g_object_get_data (G_OBJECT (list->data), "__gdaui_group");
- for (params = group->group->nodes; params; nb_cols ++, params = params->next)
+ for (params = gda_set_group_get_nodes (gdaui_set_group_get_group (group))
+ ; params; nb_cols ++, params = params->next)
cols [nb_cols] = g_slist_index (((GdaSet *)grid->priv->iter)->holders,
- GDA_SET_NODE (params->data)->holder);
+ gda_set_node_get_holder (GDA_SET_NODE
(params->data)));
}
}
g_list_free (columns);
diff --git a/libgda-ui/gdaui-set.c b/libgda-ui/gdaui-set.c
index b4a5abb..453ee5e 100644
--- a/libgda-ui/gdaui-set.c
+++ b/libgda-ui/gdaui-set.c
@@ -25,6 +25,33 @@
#include "gdaui-set.h"
#include "marshallers/gdaui-marshal.h"
+#ifdef GSEAL_ENABLE
+/**
+ * GdauiSetGroup:
+ * @group:
+ * @source:
+ *
+ * The <structname>GdauiSetGroup</structname>.
+ *
+ * To create a new #GdauiSetGroup use #gdaiu_set_group_new.
+ *
+ * To free a #GdauiSetGroup, created by #gdaui_set_group_new, use #gda_set_group_free.
+ *
+ * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
+ * Don't try to use #gdaui_set_group_free on a struct that was created manually.
+ */
+struct _GdauiSetGroup {
+ GdaSetGroup *group;
+ GdauiSetSource *source; /* if NULL, then @group->nodes contains exactly one entry */
+
+ /*< private >*/
+ /* Padding for future expansion */
+ gpointer _gda_reserved1;
+ gpointer _gda_reserved2;
+};
+#else
+#endif
+
/*
Register GdauiSetGroup type
*/
@@ -165,6 +192,45 @@ gdaui_set_group_get_group (GdauiSetGroup *sg)
return sg->group;
}
+#ifdef GSEAL_ENABLE
+/**
+ * GdauiSetSource:
+ * @source: a #GdaSetSource
+ * @shown_cols_index: (array length=shown_n_cols): Array with the column number to be shown from
#GdaSetSource
+ * @shown_n_cols: number of elements of @shown_cols_index
+ * @ref_cols_index: (array length=ref_n_cols): Array with the number of columns as PRIMARY KEY in
#GdaSetSource
+ * @ref_n_cols: number of elements of @ref_cols_index
+ *
+ * The <structname>GdauiSetSource</structname> is a ...
+ *
+ * To create a new #GdauiSetSource use #gdaui_set_source_new.
+ *
+ * To free a #GdauiSetSource, created by #gdaui_set_source_new, use #gdaui_set_source_free.
+ *
+ * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
+ * Don't try to use #gdaui_set_source_free on a struct that was created manually.
+ */
+struct _GdauiSetSource {
+ GdaSetSource *source;
+
+ /* displayed columns in 'source->data_model' */
+ gint shown_n_cols;
+ gint *shown_cols_index;
+
+ /* columns used as a reference (corresponding to PK values) in 'source->data_model' */
+ gint ref_n_cols;
+ gint *ref_cols_index;
+
+ /*< private >*/
+ /* Padding for future expansion */
+ gpointer _gda_reserved1;
+ gpointer _gda_reserved2;
+ gpointer _gda_reserved3;
+ gpointer _gda_reserved4;
+};
+#else
+#endif
+
/*
Register GdauiSetSource type
*/
@@ -289,8 +355,38 @@ gdaui_set_source_get_source (GdauiSetSource *s)
}
/**
+ * gdaui_set_source_get_shown_n_cols:
+ * @s: a #GdauiSetSource
+ *
+ * Returns: number of columns to be shown.
+ *
+ * Since: 5.2
+ */
+gint
+gdaui_set_source_get_shown_n_cols (GdauiSetSource *s)
+{
+ g_return_val_if_fail (s, -1);
+ return s->shown_n_cols;
+}
+
+/**
+ * gdaui_set_source_get_shown_columns:
+ * @s: a #GdauiSetSource
+ *
+ * Returns: (array zero-terminated=1) (transfer none): array of of columns to be shown.
+ *
+ * Since: 5.2
+ */
+gint*
+gdaui_set_source_get_shown_columns (GdauiSetSource *s)
+{
+ g_return_val_if_fail (s, NULL);
+ return s->shown_cols_index;
+}
+
+/**
* gdaui_set_source_set_shown_columns:
- * @s: a #GdauiSetSource struct to free
+ * @s: a #GdauiSetSource
* @columns: (array length=n_columns): an array of with columns numbers to be shown from a #GdaSetSource
* @n_columns: number of columns of the array
*
@@ -307,12 +403,43 @@ gdaui_set_source_set_shown_columns (GdauiSetSource *s, gint *columns, gint n_col
if (s->shown_cols_index)
g_free (s->shown_cols_index);
s->shown_n_cols = n_columns;
+ s->shown_cols_index = g_new0 (gint, s->shown_n_cols+1); /* This adds a null terminated array */
for (i = 0; i < n_columns; i++) {
s->shown_cols_index[i] = columns[i];
}
}
/**
+ * gdaui_set_source_get_ref_n_cols:
+ * @s: a #GdauiSetSource
+ *
+ * Returns: number of columns to referenced.
+ *
+ * Since: 5.2
+ */
+gint
+gdaui_set_source_get_ref_n_cols (GdauiSetSource *s)
+{
+ g_return_val_if_fail (s, -1);
+ return s->ref_n_cols;
+}
+
+/**
+ * gdaui_set_source_get_ref_columns:
+ * @s: a #GdauiSetSource
+ *
+ * Returns: (array zero-terminated=1) (transfer none): array of of columns to be shown.
+ *
+ * Since: 5.2
+ */
+gint*
+gdaui_set_source_get_ref_columns (GdauiSetSource *s)
+{
+ g_return_val_if_fail (s, NULL);
+ return s->shown_cols_index;
+}
+
+/**
* gdaui_set_source_set_ref_columns:
* @s: a #GdauiSetSource struct to free
* @columns: (array length=n_columns): an array of with columns numbers of referen (Primary Key) at
#GdaSetSource
@@ -331,6 +458,7 @@ gdaui_set_source_set_ref_columns (GdauiSetSource *s, gint *columns, gint n_colum
if (s->ref_cols_index)
g_free (s->ref_cols_index);
s->ref_n_cols = n_columns;
+ s->ref_cols_index = g_new0 (gint, s->ref_n_cols+1); /* This creates a null terminated array */
for (i = 0; i < n_columns; i++) {
s->ref_cols_index[i] = columns[i];
}
diff --git a/libgda-ui/gdaui-set.h b/libgda-ui/gdaui-set.h
index 3d81647..8f2f1dc 100644
--- a/libgda-ui/gdaui-set.h
+++ b/libgda-ui/gdaui-set.h
@@ -39,69 +39,71 @@ typedef struct _GdauiSetPriv GdauiSetPriv;
typedef struct _GdauiSetGroup GdauiSetGroup;
typedef struct _GdauiSetSource GdauiSetSource;
-/**
- * GdauiSetGroup:
- * @group:
- * @source:
- *
- * The <structname>GdauiSetGroup</structname>.
- *
- * To create a new #GdauiSetGroup use #gdaiu_set_group_new.
- *
- * To free a #GdauiSetGroup, created by #gdaui_set_group_new, use #gda_set_group_free.
- *
- * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
- * Don't try to use #gdaui_set_group_free on a struct that was created manually.
- */
+#ifdef GSEAL_ENABLE
+#else
struct _GdauiSetGroup {
- GdaSetGroup *group;
- GdauiSetSource *source; /* if NULL, then @group->nodes contains exactly one entry */
+ GdaSetGroup* GSEAL(group);
+ GdauiSetSource* GSEAL(source); /* if NULL, then @group->nodes contains exactly one entry */
/*< private >*/
/* Padding for future expansion */
- gpointer _gda_reserved1;
- gpointer _gda_reserved2;
+ gpointer GSEAL(_gda_reserved1);
+ gpointer GSEAL(_gda_reserved2);
};
+#endif
-/**
- * GdauiSetSource:
- * @source: a #GdaSetSource
- * @shown_cols_index: (array length=shown_n_cols): Array with the column number to be shown from
#GdaSetSource
- * @shown_n_cols: number of elements of @shown_cols_index
- * @ref_cols_index: (array length=ref_n_cols): Array with the number of columns as PRIMARY KEY in
#GdaSetSource
- * @ref_n_cols: number of elements of @ref_cols_index
- *
- * The <structname>GdauiSetSource</structname> is a ...
- *
- * To create a new #GdauiSetSource use #gdaui_set_source_new.
- *
- * To free a #GdauiSetSource, created by #gdaui_set_source_new, use #gdaui_set_source_free.
- *
- * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
- * Don't try to use #gdaui_set_source_free on a struct that was created manually.
- */
+#define GDAUI_TYPE_SET_GROUP (gdaui_set_group_get_type ())
+#define GDAUI_SET_GROUP(x) ((GdauiSetGroup*)(x))
+
+GType gdaui_set_group_get_type (void) G_GNUC_CONST;
+GdauiSetGroup *gdaui_set_group_new (void);
+void gdaui_set_group_free (GdauiSetGroup *sg);
+GdauiSetGroup *gdaui_set_group_copy (GdauiSetGroup *sg);
+void gdaui_set_group_set_source (GdauiSetGroup *sg, GdauiSetSource *source);
+GdauiSetSource *gdaui_set_group_get_source (GdauiSetGroup *sg);
+void gdaui_set_group_set_group (GdauiSetGroup *sg, GdaSetGroup *group);
+GdaSetGroup *gdaui_set_group_get_group (GdauiSetGroup *sg);
+
+#ifdef GSEAL_ENABLE
+#else
struct _GdauiSetSource {
- GdaSetSource *source;
+ GdaSetSource* GSEAL(source);
/* displayed columns in 'source->data_model' */
- gint shown_n_cols;
- gint *shown_cols_index;
+ gint GSEAL(shown_n_cols);
+ gint* GSEAL(shown_cols_index);
/* columns used as a reference (corresponding to PK values) in 'source->data_model' */
- gint ref_n_cols;
- gint *ref_cols_index;
+ gint GSEAL(ref_n_cols);
+ gint* GSEAL(ref_cols_index);
/*< private >*/
/* Padding for future expansion */
- gpointer _gda_reserved1;
- gpointer _gda_reserved2;
- gpointer _gda_reserved3;
- gpointer _gda_reserved4;
+ gpointer GSEAL(_gda_reserved1);
+ gpointer GSEAL(_gda_reserved2);
+ gpointer GSEAL(_gda_reserved3);
+ gpointer GSEAL(_gda_reserved4);
};
+#endif
+#define GDAUI_TYPE_SET_SOURCE (gdaui_set_source_get_type ())
+#define GDAUI_SET_SOURCE(x) ((GdauiSetSource*)(x))
+GType gdaui_set_source_get_type (void) G_GNUC_CONST;
+GdauiSetSource *gdaui_set_source_new (void);
+void gdaui_set_source_free (GdauiSetSource *s);
+GdauiSetSource *gdaui_set_source_copy (GdauiSetSource *s);
+void gdaui_set_source_set_source (GdauiSetSource *s, GdaSetSource *source);
+GdaSetSource *gdaui_set_source_get_source (GdauiSetSource*s);
+gint gdaui_set_source_get_shown_n_cols (GdauiSetSource *s);
+gint* gdaui_set_source_get_shown_columns (GdauiSetSource *s);
+void gdaui_set_source_set_shown_columns (GdauiSetSource *s, gint *columns, gint n_columns);
+gint gdaui_set_source_get_ref_n_cols (GdauiSetSource *s);
+gint* gdaui_set_source_get_ref_columns (GdauiSetSource *s);
+void gdaui_set_source_set_ref_columns (GdauiSetSource *s, gint *columns, gint n_columns);
/* struct for the object's data */
+/* FIXME: public members of GdauiSet must be SEALED! */
/**
* GdauiSet:
* @sources_list: (element-type Gdaui.SetSource): list of #GdauiSetSource
@@ -132,28 +134,6 @@ GType gdaui_set_get_type (void) G_GNUC_CONST;
GdauiSet *gdaui_set_new (GdaSet *set);
GdauiSetGroup *gdaui_set_get_group (GdauiSet *dbset, GdaHolder *holder);
-#define GDAUI_TYPE_SET_GROUP (gdaui_set_group_get_type ())
-#define GDAUI_SET_GROUP(x) ((GdauiSetGroup*)(x))
-GType gdaui_set_group_get_type (void) G_GNUC_CONST;
-GdauiSetGroup *gdaui_set_group_new (void);
-void gdaui_set_group_free (GdauiSetGroup *sg);
-GdauiSetGroup *gdaui_set_group_copy (GdauiSetGroup *sg);
-void gdaui_set_group_set_source (GdauiSetGroup *sg, GdauiSetSource *source);
-GdauiSetSource *gdaui_set_group_get_source (GdauiSetGroup *sg);
-void gdaui_set_group_set_group (GdauiSetGroup *sg, GdaSetGroup *group);
-GdaSetGroup *gdaui_set_group_get_group (GdauiSetGroup *sg);
-
-#define GDAUI_TYPE_SET_SOURCE (gdaui_set_source_get_type ())
-#define GDAUI_SET_SOURCE(x) ((GdauiSetSource*)(x))
-GType gdaui_set_source_get_type (void) G_GNUC_CONST;
-GdauiSetSource *gdaui_set_source_new (void);
-void gdaui_set_source_free (GdauiSetSource *s);
-GdauiSetSource *gdaui_set_source_copy (GdauiSetSource *s);
-void gdaui_set_source_set_source (GdauiSetSource *s, GdaSetSource *source);
-GdaSetSource *gdaui_set_source_get_source (GdauiSetSource*s);
-void gdaui_set_source_set_shown_columns (GdauiSetSource *s, gint *columns, gint n_columns);
-void gdaui_set_source_set_ref_columns (GdauiSetSource *s, gint *columns, gint n_columns);
-
/* Deprecated functions */
GType _gdaui_set_get_type (void);
GdauiSet *_gdaui_set_new (GdaSet *set);
diff --git a/libgda-ui/internal/utility.c b/libgda-ui/internal/utility.c
index d030339..e527362 100644
--- a/libgda-ui/internal/utility.c
+++ b/libgda-ui/internal/utility.c
@@ -213,12 +213,12 @@ _gdaui_utility_proxy_compute_attributes_for_group (GdauiSetGroup *group, GdauiDa
/* list the values in proxy_model for each param in GDA_SET_NODE (group->group->nodes->data)->params
*/
attributes = 0;
- for (list = group->group->nodes; list; list = list->next) {
- col = g_slist_index (((GdaSet*)model_iter)->holders, GDA_SET_NODE (list->data)->holder);
+ for (list = gda_set_group_get_nodes (gdaui_set_group_get_group (group)); list; list = list->next) {
+ col = g_slist_index (((GdaSet*)model_iter)->holders, gda_set_node_get_holder (GDA_SET_NODE
(list->data)));
gtk_tree_model_get (GTK_TREE_MODEL (store), tree_iter,
GDAUI_DATA_STORE_COL_TO_DELETE, &local_to_del,
offset + col, &localattr, -1);
- if (list == group->group->nodes)
+ if (list == gda_set_group_get_nodes (gdaui_set_group_get_group (group)))
attributes = localattr;
else
attributes &= localattr;
@@ -260,10 +260,10 @@ _gdaui_utility_proxy_compute_values_for_group (GdauiSetGroup *group, GdauiDataSt
GSList *list;
GValue *value;
- for (list = group->group->nodes; list; list = list->next) {
+ for (list = gda_set_group_get_nodes (gdaui_set_group_get_group (group)); list; list =
list->next) {
gint col;
- col = g_slist_index (((GdaSet*)model_iter)->holders, GDA_SET_NODE
(list->data)->holder);
+ col = g_slist_index (((GdaSet*)model_iter)->holders, gda_set_node_get_holder
(GDA_SET_NODE (list->data)));
gtk_tree_model_get (GTK_TREE_MODEL (store), tree_iter, col, &value, -1);
retval = g_list_append (retval, value);
}
@@ -280,9 +280,9 @@ _gdaui_utility_proxy_compute_values_for_group (GdauiSetGroup *group, GdauiDataSt
#ifdef PROXY_STORE_EXTRA_VALUES
proxy_row = gdaui_data_store_get_row_from_iter (store, tree_iter);
#endif
- source = group->source;
- for (i = 0 ; (i < source->shown_n_cols) && !ret_null; i++) {
- col = source->shown_cols_index[i];
+ source = gdaui_set_group_get_source (group);
+ for (i = 0 ; (i < gdaui_set_source_get_shown_n_cols (source)) && !ret_null; i++) {
+ col = (gdaui_set_source_get_shown_columns (source))[i];
#ifdef PROXY_STORE_EXTRA_VALUES
if (!slow_way) {
value = gda_data_proxy_get_model_row_value (proxy, source->data_model,
proxy_row, col);
@@ -306,21 +306,21 @@ _gdaui_utility_proxy_compute_values_for_group (GdauiSetGroup *group, GdauiDataSt
GSList *list;
gint j;
- cols_index = g_new0 (gint, g_slist_length (group->group->nodes));
- for (list = group->group->nodes, j = 0; list; list = list->next, j++) {
+ cols_index = g_new0 (gint, gda_set_group_get_n_nodes
(gdaui_set_group_get_group (group)));
+ for (list = gda_set_group_get_nodes (gdaui_set_group_get_group (group)), j =
0; list; list = list->next, j++) {
gint colno;
colno = g_slist_index (((GdaSet*)model_iter)->holders,
- GDA_SET_NODE (list->data)->holder);
- cols_index [j] = GDA_SET_NODE (list->data)->source_column;
+ gda_set_node_get_holder (GDA_SET_NODE
(list->data)));
+ cols_index [j] = gda_set_node_get_source_column (GDA_SET_NODE
(list->data));
gtk_tree_model_get (GTK_TREE_MODEL (store), tree_iter,
colno, &value, -1);
key_values = g_slist_append (key_values, (GValue *) value);
}
- row = gda_data_model_get_row_from_values (GDA_DATA_MODEL
(source->source->data_model),
+ row = gda_data_model_get_row_from_values (gda_set_source_get_data_model
(gdaui_set_source_get_source (source)),
key_values, cols_index);
if (row >= 0) {
- value = gda_data_model_get_value_at (GDA_DATA_MODEL
(source->source->data_model),
+ value = gda_data_model_get_value_at (gda_set_source_get_data_model
(gdaui_set_source_get_source (source)),
col, row, NULL);
retval = g_list_append (retval, (GValue *) value);
}
diff --git a/libgda-ui/libgda-ui.symbols b/libgda-ui/libgda-ui.symbols
index 81d93ad..46f7f42 100644
--- a/libgda-ui/libgda-ui.symbols
+++ b/libgda-ui/libgda-ui.symbols
@@ -177,7 +177,30 @@
gdaui_server_operation_get_type
gdaui_server_operation_new
gdaui_server_operation_new_in_dialog
+ gdaui_set_get_type
+ gdaui_set_new
+ gdaui_set_get_group
gdaui_set_default_path
+ gdaui_set_group_get_type
+ gdaui_set_group_new
+ gdaui_set_group_free
+ gdaui_set_group_copy
+ gdaui_set_group_set_source
+ gdaui_set_group_get_source
+ gdaui_set_group_set_group
+ gdaui_set_group_get_group
+ gdaui_set_source_get_type
+ gdaui_set_source_new
+ gdaui_set_source_free
+ gdaui_set_source_copy
+ gdaui_set_source_set_source
+ gdaui_set_source_get_source
+ gdaui_set_source_get_shown_n_cols
+ gdaui_set_source_get_shown_columns
+ gdaui_set_source_set_shown_columns
+ gdaui_set_source_get_ref_n_cols
+ gdaui_set_source_get_ref_columns
+ gdaui_set_source_set_ref_columns
gdaui_tree_store_get_iter
gdaui_tree_store_get_node
gdaui_tree_store_get_type
diff --git a/libgda/gda-set.c b/libgda/gda-set.c
index f16a08d..375e2a9 100644
--- a/libgda/gda-set.c
+++ b/libgda/gda-set.c
@@ -44,6 +44,26 @@
extern xmlDtdPtr gda_paramlist_dtd;
extern gchar *gda_lang_locale;
+#ifdef GSEAL_ENABLE
+/**
+ * GdaSetGroup:
+ * @nodes: (element-type Gda.SetNode): list of GdaSetNode, at least one entry
+ * @nodes_source: (allow-none): if NULL, then @nodes contains exactly one entry
+ *
+ * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
+ * Don't try to use #gda_set_group_free on a struct that was created manually.
+ */
+struct _GdaSetGroup {
+ GSList *nodes; /* list of GdaSetNode, at least one entry */
+ GdaSetSource *nodes_source; /* if NULL, then @nodes contains exactly one entry */
+
+ /*< private >*/
+ /* Padding for future expansion */
+ gpointer _gda_reserved1;
+ gpointer _gda_reserved2;
+};
+#else
+#endif
/*
Register GdaSetGroup type
*/
@@ -132,19 +152,110 @@ void gda_set_group_set_source (GdaSetGroup *sg, GdaSetSource *source)
}
/**
+ * gda_set_group_get_source:
+ * @sg: a #GdaSetGroup
+ *
+ * Returns: a #GdaSetSource. If %NULL then @sg contains just one element.
+ *
+ * Since: 5.2
+ */
+GdaSetSource*
+gda_set_group_get_source (GdaSetGroup *sg)
+{
+ g_return_val_if_fail (sg, NULL);
+ return sg->nodes_source;
+}
+
+/**
* gda_set_group_add_node:
* @sg: a #GdaSetGroup
- * @source: a #GdaSetNode to set
+ * @node: a #GdaSetNode to set
*
* Since: 5.2
*/
-void gda_set_group_add_node (GdaSetGroup *sg, GdaSetNode *node)
+void
+gda_set_group_add_node (GdaSetGroup *sg, GdaSetNode *node)
{
g_return_if_fail (sg);
g_return_if_fail (node);
sg->nodes = g_slist_append (sg->nodes, node);
}
+/**
+ * gda_set_group_get_node:
+ * @sg: a #GdaSetGroup
+ *
+ * This method always return first #GdaSetNode in @sg.
+ *
+ * Returns: first #GdaSetNode in @sg.
+ *
+ * Since: 5.2
+ */
+GdaSetNode*
+gda_set_group_get_node (GdaSetGroup *sg)
+{
+ g_return_val_if_fail (sg, NULL);
+ g_return_val_if_fail (sg->nodes, NULL);
+ return (GdaSetNode*) sg->nodes->data;
+}
+
+/**
+ * gda_set_group_get_nodes:
+ * @sg: a #GdaSetGroup
+ *
+ * Returns a #GSList with the #GdaSetNode grouped by @sg. You must use
+ * #g_slist_free on returned list.
+ *
+ * Returns: (transfer none) (element-type Gda.SetNode): a #GSList with all nodes in @sg.
+ *
+ * Since: 5.2
+ */
+GSList*
+gda_set_group_get_nodes (GdaSetGroup *sg)
+{
+ g_return_val_if_fail (sg, NULL);
+ g_return_val_if_fail (sg->nodes, NULL);
+ return sg->nodes;
+}
+
+/**
+ * gda_set_group_get_n_nodes:
+ * @sg: a #GdaSetGroup
+ *
+ * Returns: number of nodes in @sg.
+ *
+ * Since: 5.2
+ */
+gint
+gda_set_group_get_n_nodes (GdaSetGroup *sg)
+{
+ g_return_val_if_fail (sg, -1);
+ return g_slist_length (sg->nodes);
+}
+
+#ifdef GSEAL_ENABLE
+/**
+ * GdaSetSource:
+ * @data_model: Can't be NULL
+ * @nodes: (element-type Gda.SetNode): list of #GdaSetNode for which source_model == @data_model
+ *
+ * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
+ * Don't try to use #gda_set_source_free on a struct that was created manually.
+ **/
+struct _GdaSetSource {
+ GdaDataModel *data_model; /* Can't be NULL */
+ GSList *nodes; /* list of #GdaSetNode for which source_model == @data_model */
+
+ /*< private >*/
+ /* Padding for future expansion */
+ gpointer _gda_reserved1;
+ gpointer _gda_reserved2;
+ gpointer _gda_reserved3;
+ gpointer _gda_reserved4;
+};
+#else
+#endif
+
/*
Register GdaSetSource type
*/
@@ -165,6 +276,7 @@ gda_set_source_get_type (void)
/**
* gda_set_source_new:
+ * @model: a #GdaDataModel
*
* Creates a new #GdaSetSource struct.
*
@@ -173,12 +285,12 @@ gda_set_source_get_type (void)
* Since: 5.2
*/
GdaSetSource*
-gda_set_source_new (void)
+gda_set_source_new (GdaDataModel *model)
{
GdaSetSource *s = g_new0 (GdaSetSource, 1);
s->nodes = NULL;
- s->data_model = NULL;
-
+ s->data_model = g_object_ref (model);
+
return s;
}
@@ -197,9 +309,8 @@ gda_set_source_copy (GdaSetSource *s)
{
GdaSetSource *n;
g_return_val_if_fail (s, NULL);
- n = gda_set_source_new ();
+ n = gda_set_source_new (gda_set_source_get_data_model (s));
n->nodes = g_slist_copy (s->nodes);
- n->data_model = g_object_ref (s->data_model);
return n;
}
@@ -216,13 +327,30 @@ gda_set_source_free (GdaSetSource *s)
{
g_return_if_fail(s);
g_object_unref (s->data_model);
- g_slist_free (s->nodes);
+ g_slist_free (s->nodes); /* FIXME: A source must own its nodes, then they must be freed here
+ this leaves to others
responsability free nodes BEFORE
+ to free this source */
g_free (s);
}
/**
+ * gda_set_source_get_data_model:
+ * @s: a #GdaSetSource
+ *
+ * Returns: (transfer none): a #GdaDataModel used by @s
+ *
+ * Since: 5.2
+ */
+GdaDataModel*
+gda_set_source_get_data_model (GdaSetSource *s)
+{
+ g_return_val_if_fail (s, NULL);
+ return s->data_model;
+}
+
+/**
* gda_set_source_set_data_model:
- * @s: (allow-none): a #GdaSetSource struct to free
+ * @s: a #GdaSetSource struct to free
* @model: a #GdaDataModel
*
* Set a #GdaDataModel
@@ -239,8 +367,8 @@ gda_set_source_set_data_model (GdaSetSource *s, GdaDataModel *model)
/**
* gda_set_source_add_node:
- * @s: (allow-none): a #GdaSetSource struct to free
- * @model: a #GdaDataModel
+ * @s: a #GdaSetSource
+ * @node: a #GdaSetNode to add
*
* Set a #GdaDataModel
*
@@ -254,6 +382,234 @@ gda_set_source_add_node (GdaSetSource *s, GdaSetNode *node)
s->nodes = g_slist_append (s->nodes, node);
}
+/**
+ * gda_set_source_get_nodes:
+ * @s: a #GdaSetSource
+ *
+ * Returns: (transfer none) (element-type Gda.SetNode): a list of #GdaSetNode structs
+ *
+ * Since: 5.2
+ */
+GSList*
+gda_set_source_get_nodes (GdaSetSource *s)
+{
+ g_return_val_if_fail (s, NULL);
+ g_return_val_if_fail (s->nodes, NULL);
+ return s->nodes;
+}
+
+#ifdef GSEAL_ENABLE
+/**
+ * GdaSetNode:
+ * @holder: a #GdaHolder. It can't be NULL
+ * @source_model: a #GdaDataModel. It could be NULL
+ * @source_column: a #gint with the number of column in @source_model
+ *
+ * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
+ * Don't try to use #gda_set_node_free on a struct that was created manually.
+ */
+struct _GdaSetNode {
+ GdaHolder *holder; /* Can't be NULL */
+ GdaDataModel *source_model; /* may be NULL */
+ gint source_column; /* unused if @source_model is NULL */
+
+ /*< private >*/
+ /* Padding for future expansion */
+ gpointer _gda_reserved1;
+ gpointer _gda_reserved2;
+};
+#endif
+/*
+ Register GdaSetNode type
+*/
+GType
+gda_set_node_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0)) {
+ if (type == 0)
+ type = g_boxed_type_register_static ("GdaSetNode",
+ (GBoxedCopyFunc) gda_set_node_copy,
+ (GBoxedFreeFunc) gda_set_node_free);
+ }
+
+ return type;
+}
+
+/**
+ * gda_set_node_new:
+ * @holder: a #GdaHolder to used by new #GdaSetNode
+ * @model: a #GdaDataModel used to get values from
+ *
+ * Creates a new #GdaSetNode struct.
+ *
+ * Return: (transfer full): a new #GdaSetNode struct.
+ *
+ * Since: 5.2
+ */
+GdaSetNode*
+gda_set_node_new (GdaHolder *holder, GdaDataModel *model)
+{
+ g_return_val_if_fail (GDA_IS_HOLDER (holder), NULL);
+ GdaSetNode *n = g_new0 (GdaSetNode, 1);
+ n->holder = holder;
+ if (GDA_IS_DATA_MODEL (model)) {
+ n->source_model = model;
+ n->source_column = 0;
+ }
+ else {
+ n->source_model = NULL;
+ n->source_column = -1;
+ }
+ return n;
+}
+
+/**
+ * gda_set_node_copy:
+ * @node: a #GdaSetNode to copy from
+ *
+ * Copy constructor.
+ *
+ * Returns: a new #GdaSetNode
+ *
+ * Since: 5.2
+ */
+GdaSetNode *
+gda_set_node_copy (GdaSetNode *node)
+{
+ g_return_val_if_fail (node, NULL);
+
+ GdaSetNode *n;
+ n = gda_set_node_new (gda_set_node_get_holder (node), gda_set_node_get_data_model (node));
+ gda_set_node_set_source_column (n, gda_set_node_get_source_column (node));
+ return n;
+}
+
+/**
+ * gda_set_node_free:
+ * @node: (allow-none): a #GdaSetNode struct to free
+ *
+ * Frees any resources taken by @node struct. If @node is %NULL, then nothing happens.
+ *
+ * Since: 5.2
+ */
+void
+gda_set_node_free (GdaSetNode *node)
+{
+ if (node == NULL)
+ return;
+ if (GDA_IS_HOLDER (node->holder))
+ g_object_unref (node->holder);
+ if (GDA_IS_DATA_MODEL (node->source_model))
+ g_object_unref (node->source_model);
+ g_free (node);
+}
+
+/**
+ * gda_set_node_get_holder:
+ * @node: a #GdaSetNode struct to get holder from
+ *
+ * Returns: (transfer none): the #GdaHolder used by @node
+ *
+ * Since: 5.2
+ */
+GdaHolder*
+gda_set_node_get_holder (GdaSetNode *node)
+{
+ g_return_val_if_fail (node, NULL);
+ return node->holder;
+}
+
+/**
+ * gda_set_node_set_holder:
+ * @node: a #GdaSetNode struct to set holder to
+ *
+ * Set a #GdaHolder to @node. @holder increment its referen counting when assigned.
+ *
+ * Since: 5.2
+ */
+void
+gda_set_node_set_holder (GdaSetNode *node, GdaHolder *holder)
+{
+ g_return_if_fail (GDA_IS_HOLDER (holder));
+ if (GDA_IS_HOLDER (node->holder))
+ g_object_unref (node->holder);
+ node->holder = g_object_ref (holder);
+}
+
+/**
+ * gda_set_node_get_data_model:
+ * @node: a #GdaSetNode struct to get holder from
+ *
+ * Returns: (transfer none): the #GdaDataModel used by @node
+ *
+ * Since: 5.2
+ */
+GdaDataModel*
+gda_set_node_get_data_model (GdaSetNode *node)
+{
+ g_return_val_if_fail (node, NULL);
+ return node->source_model;
+}
+
+/**
+ * gda_set_node_set_data_model:
+ * @node: a #GdaSetNode struct to set data model to
+ * @model: a #GdaDataModel to be used by @node
+ *
+ * Set a #GdaDataModel to be used by @node. @model increment its reference
+ * counting when set. Internally referenced column number is set to first column
+ * in @model.
+ *
+ * Since: 5.2
+ */
+void
+gda_set_node_set_data_model (GdaSetNode *node, GdaDataModel *model)
+{
+ g_return_if_fail (node);
+ g_return_if_fail (GDA_IS_DATA_MODEL (model));
+ if (GDA_IS_DATA_MODEL (node->source_model))
+ g_object_unref (node->source_model);
+ node->source_model = g_object_ref (model);
+ node->source_column = 0;
+}
+
+/**
+ * gda_set_node_get_source_column:
+ * @node: a #GdaSetNode struct to get column source from
+ *
+ * Returns: the number of column referenced in a given #GdaDataModel. If negative
+ * no column is referenced or no #GdaDataModel is used by @node.
+ *
+ * Since: 5.2
+ */
+gint
+gda_set_node_get_source_column (GdaSetNode *node)
+{
+ g_return_val_if_fail (node, -1);
+ return node->source_column;
+}
+
+/**
+ * gda_set_node_set_source_column:
+ * @node: a #GdaSetNode struct to set column source to, from an used data model
+ *
+ * Set column number in the #GdaDataModel used @node. If no #GdaDataModel is set
+ * then column is set to invalid (-1);
+ *
+ * Since: 5.2
+ */
+void
+gda_set_node_set_source_column (GdaSetNode *node, gint column)
+{
+ g_return_if_fail (column >= 0);
+ if (GDA_IS_DATA_MODEL (node->source_model)) {
+ if (column < gda_data_model_get_n_columns (node->source_model))
+ node->source_column = column;
+ }
+}
+
/*
* Main static functions
*/
@@ -1234,6 +1590,7 @@ void
gda_set_remove_holder (GdaSet *set, GdaHolder *holder)
{
GdaSetNode *node;
+ GdaDataModel *model;
g_return_if_fail (GDA_IS_SET (set));
g_return_if_fail (set->priv);
@@ -1256,13 +1613,16 @@ gda_set_remove_holder (GdaSet *set, GdaHolder *holder)
/* now destroy the GdaSetNode and the GdaSetSource if necessary */
node = gda_set_get_node (set, holder);
g_assert (node);
- if (node->source_model) {
+ model = gda_set_node_get_data_model (node);
+ if (GDA_IS_DATA_MODEL (model)) {
GdaSetSource *source;
+ GSList *nodes;
- source = gda_set_get_source_for_model (set, node->source_model);
+ source = gda_set_get_source_for_model (set, model);
g_assert (source);
- g_assert (source->nodes);
- if (! source->nodes->next)
+ nodes = gda_set_source_get_nodes (source);
+ g_assert (nodes);
+ if (! nodes->next)
set_remove_source (set, source);
}
set_remove_node (set, node);
@@ -1415,6 +1775,8 @@ compute_public_data (GdaSet *set)
GdaSetSource *source;
GdaSetGroup *group;
GHashTable *groups = NULL;
+ GdaHolder *holder;
+ GdaDataModel *node_model;
/*
* Get rid of all the previous structures
@@ -1432,14 +1794,14 @@ compute_public_data (GdaSet *set)
* Creation of the GdaSetNode structures
*/
for (list = set->holders; list; list = list->next) {
- node = g_new0 (GdaSetNode, 1);
- node->holder = GDA_HOLDER (list->data);
- node->source_model = gda_holder_get_source_model (node->holder,
- &(node->source_column));
- if (node->source_model)
- g_object_ref (node->source_model);
-
- set->nodes_list = g_slist_prepend (set->nodes_list, node);
+ holder = GDA_HOLDER (list->data);
+ if (GDA_IS_HOLDER (holder)) {
+ gint col;
+ node = gda_set_node_new (holder, gda_holder_get_source_model (holder, &col));
+ gda_set_node_set_source_column (node, col);
+ if (node)
+ set->nodes_list = g_slist_prepend (set->nodes_list, node);
+ }
}
set->nodes_list = g_slist_reverse (set->nodes_list);
@@ -1451,13 +1813,13 @@ compute_public_data (GdaSet *set)
/* source */
source = NULL;
- if (node->source_model) {
- source = gda_set_get_source_for_model (set, node->source_model);
+ node_model = gda_set_node_get_data_model (node);
+ if (GDA_IS_DATA_MODEL (node_model)) {
+ source = gda_set_get_source_for_model (set, node_model);
if (source)
gda_set_source_add_node (source, node);
else {
- source = gda_set_source_new ();
- gda_set_source_set_data_model (source, node->source_model);
+ source = gda_set_source_new (node_model);
gda_set_source_add_node (source, node);
set->sources_list = g_slist_prepend (set->sources_list, source);
}
@@ -1465,8 +1827,8 @@ compute_public_data (GdaSet *set)
/* group */
group = NULL;
- if (node->source_model && groups)
- group = g_hash_table_lookup (groups, node->source_model);
+ if (GDA_IS_DATA_MODEL (node_model) && groups)
+ group = g_hash_table_lookup (groups, node_model);
if (group)
gda_set_group_add_node (group, node);
else {
@@ -1474,11 +1836,11 @@ compute_public_data (GdaSet *set)
gda_set_group_add_node (group, node);
gda_set_group_set_source (group, source);
set->groups_list = g_slist_prepend (set->groups_list, group);
- if (node->source_model) {
+ if (GDA_IS_DATA_MODEL (node_model)) {
if (!groups)
groups = g_hash_table_new (NULL, NULL); /* key = source model,
value = GdaSetGroup */
- g_hash_table_insert (groups, node->source_model, group);
+ g_hash_table_insert (groups, node_model, group);
}
}
}
@@ -1570,7 +1932,7 @@ gda_set_real_add_holder (GdaSet *set, GdaHolder *holder)
}
similar = (GdaHolder*) g_hash_table_lookup (set->priv->holders_hash, hid);
- if (!similar) {
+ if (GDA_IS_HOLDER (similar)) {
/* really add @holder to the set */
set->holders = g_slist_append (set->holders, holder);
g_hash_table_insert (set->priv->holders_hash, (gchar*) hid, holder);
@@ -1635,24 +1997,16 @@ static void
set_remove_node (GdaSet *set, GdaSetNode *node)
{
g_return_if_fail (g_slist_find (set->nodes_list, node));
-
- if (node->source_model)
- g_object_unref (G_OBJECT (node->source_model));
-
+ gda_set_node_free (node);
set->nodes_list = g_slist_remove (set->nodes_list, node);
- g_free (node);
}
static void
set_remove_source (GdaSet *set, GdaSetSource *source)
{
g_return_if_fail (g_slist_find (set->sources_list, source));
-
- if (source->nodes)
- g_slist_free (source->nodes);
-
+ gda_set_source_free (source);
set->sources_list = g_slist_remove (set->sources_list, source);
- g_free (source);
}
/**
@@ -1773,13 +2127,18 @@ gda_set_get_node (GdaSet *set, GdaHolder *holder)
g_return_val_if_fail (GDA_IS_SET (set), NULL);
g_return_val_if_fail (set->priv, NULL);
g_return_val_if_fail (GDA_IS_HOLDER (holder), NULL);
+ /* FIXME: May is better to use holder's hash for better performance */
g_return_val_if_fail (g_slist_find (set->holders, holder), NULL);
for (list = set->nodes_list; list && !retval; list = list->next) {
- if (GDA_SET_NODE (list->data)->holder == holder)
- retval = GDA_SET_NODE (list->data);
+ GdaHolder *node_holder;
+ retval = GDA_SET_NODE (list->data);
+ node_holder = gda_set_node_get_holder (retval);
+ if (node_holder == holder) /* FIXME: May is better to compare holders ID */
+ break;
+ else
+ retval = NULL;
}
-
return retval;
}
@@ -1797,10 +2156,12 @@ GdaSetSource *
gda_set_get_source (GdaSet *set, GdaHolder *holder)
{
GdaSetNode *node;
-
+ GdaDataModel *node_model;
+
node = gda_set_get_node (set, holder);
- if (node && node->source_model)
- return gda_set_get_source_for_model (set, node->source_model);
+ node_model = gda_set_node_get_data_model (node);
+ if (node && GDA_IS_DATA_MODEL (node_model))
+ return gda_set_get_source_for_model (set, node_model);
else
return NULL;
}
@@ -1818,24 +2179,34 @@ gda_set_get_source (GdaSet *set, GdaHolder *holder)
GdaSetGroup *
gda_set_get_group (GdaSet *set, GdaHolder *holder)
{
+ GdaSetNode *node;
GdaSetGroup *retval = NULL;
GSList *list, *sublist;
+ GdaHolder *node_holder;
g_return_val_if_fail (GDA_IS_SET (set), NULL);
g_return_val_if_fail (set->priv, NULL);
g_return_val_if_fail (GDA_IS_HOLDER (holder), NULL);
+ /* FIXME: May is better to use holder's hash for better performance */
g_return_val_if_fail (g_slist_find (set->holders, holder), NULL);
for (list = set->groups_list; list && !retval; list = list->next) {
- sublist = GDA_SET_GROUP (list->data)->nodes;
+ GSList *l;
+ retval = GDA_SET_GROUP (list->data);
+ sublist = gda_set_group_get_nodes (retval);
while (sublist && !retval) {
- if (GDA_SET_NODE (sublist->data)->holder == holder)
- retval = GDA_SET_GROUP (list->data);
- else
- sublist = g_slist_next (sublist);
+ node = GDA_SET_NODE (sublist->data);
+ if (node) {
+ node_holder = gda_set_node_get_holder (node);
+ if (node_holder == holder) /* FIXME: May is better to compare holders ID */
+ break;
+ else {
+ sublist = g_slist_next (sublist);
+ retval = NULL;
+ }
+ }
}
}
-
return retval;
}
@@ -1854,6 +2225,7 @@ GdaSetSource *
gda_set_get_source_for_model (GdaSet *set, GdaDataModel *model)
{
GdaSetSource *retval = NULL;
+ GdaDataModel *source_model;
GSList *list;
g_return_val_if_fail (GDA_IS_SET (set), NULL);
@@ -1862,9 +2234,14 @@ gda_set_get_source_for_model (GdaSet *set, GdaDataModel *model)
list = set->sources_list;
while (list && !retval) {
- if (GDA_SET_SOURCE (list->data)->data_model == model)
- retval = GDA_SET_SOURCE (list->data);
-
+ retval = GDA_SET_SOURCE (list->data);
+ source_model = gda_set_source_get_data_model (retval);
+ if (GDA_IS_DATA_MODEL (source_model)) {
+ if (source_model == model)
+ break;
+ else
+ retval = NULL;
+ }
list = g_slist_next (list);
}
@@ -1889,6 +2266,8 @@ gda_set_get_source_for_model (GdaSet *set, GdaDataModel *model)
void
gda_set_replace_source_model (GdaSet *set, GdaSetSource *source, GdaDataModel *model)
{
+ GdaDataModel *source_model;
+
g_return_if_fail (GDA_IS_SET (set));
g_return_if_fail (source);
g_return_if_fail (g_slist_find (set->sources_list, source));
@@ -1896,34 +2275,40 @@ gda_set_replace_source_model (GdaSet *set, GdaSetSource *source, GdaDataModel *m
/* compare models */
gint ncols, i;
- ncols = gda_data_model_get_n_columns (source->data_model);
- if (ncols != gda_data_model_get_n_columns (model)) {
- g_warning (_("Replacing data model must have the same characteristics as the "
- "data model it replaces"));
- return;
- }
- for (i = 0; i < ncols; i++) {
- GdaColumn *c1, *c2;
- GType t1, t2;
- c1 = gda_data_model_describe_column (source->data_model, i);
- c2 = gda_data_model_describe_column (model, i);
- t1 = gda_column_get_g_type (c1);
- t2 = gda_column_get_g_type (c2);
-
- if ((t1 != GDA_TYPE_NULL) && (t2 != GDA_TYPE_NULL) && (t1 != t2)) {
+
+ source_model = gda_set_source_get_data_model (source);
+ if (GDA_IS_DATA_MODEL (source_model)) {
+ ncols = gda_data_model_get_n_columns (source_model);
+ /* FIXME: This way to compare two Data Models could be useful as a function
+ * gda_data_model_compare (GdaDataModel)
+ **/
+ if (ncols != gda_data_model_get_n_columns (model)) {
g_warning (_("Replacing data model must have the same characteristics as the "
- "data model it replaces"));
+ "data model it replaces"));
return;
}
+ for (i = 0; i < ncols; i++) {
+ GdaColumn *c1, *c2;
+ GType t1, t2;
+ c1 = gda_data_model_describe_column (source->data_model, i);
+ c2 = gda_data_model_describe_column (model, i);
+ t1 = gda_column_get_g_type (c1);
+ t2 = gda_column_get_g_type (c2);
+
+ if ((t1 != GDA_TYPE_NULL) && (t2 != GDA_TYPE_NULL) && (t1 != t2)) {
+ g_warning (_("Replacing data model must have the same characteristics as the "
+ "data model it replaces"));
+ return;
+ }
+ }
}
/* actually swap the models */
GSList *list;
- source->data_model = model;
- for (list = source->nodes; list; list = list->next) {
- GdaSetNode *node = (GdaSetNode*) list->data;
- g_object_unref (node->source_model);
- node->source_model = g_object_ref (model);
+ gda_set_source_set_data_model (source, model);
+ for (list = gda_set_source_get_nodes (source); list; list = list->next) {
+ GdaSetNode *node = GDA_SET_NODE (list->data);
+ gda_set_node_set_data_model (node, model);
g_signal_handlers_block_by_func (G_OBJECT (node->holder),
G_CALLBACK (source_changed_holder_cb), set);
gda_holder_set_source_model (GDA_HOLDER (node->holder), model, node->source_column,
@@ -1971,7 +2356,7 @@ set_group_dump (GdaSetGroup *group)
g_print (" GdaSetGroup %p\n", group);
if (group) {
GSList *list;
- for (list = group->nodes; list; list = list->next)
+ for (list = gda_set_group_get_nodes (group); list; list = list->next)
g_print (" - node: %p\n", list->data);
g_print (" - GdaSetSource: %p\n", group->nodes_source);
}
diff --git a/libgda/gda-set.h b/libgda/gda-set.h
index fe8ed8b..a6ff349 100644
--- a/libgda/gda-set.h
+++ b/libgda/gda-set.h
@@ -27,12 +27,6 @@
G_BEGIN_DECLS
-#define GDA_TYPE_SET (gda_set_get_type())
-#define GDA_SET(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, gda_set_get_type(), GdaSet)
-#define GDA_SET_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, gda_set_get_type (), GdaSetClass)
-#define GDA_IS_SET(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, gda_set_get_type ())
-
-
/* error reporting */
extern GQuark gda_set_error_quark (void);
#define GDA_SET_ERROR gda_set_error_quark ()
@@ -46,37 +40,45 @@ typedef enum
GDA_SET_IMPLEMENTATION_ERROR
} GdaSetError;
+#ifdef GSEAL_ENABLE
+#else
struct _GdaSetNode {
- GdaHolder *holder; /* Can't be NULL */
- GdaDataModel *source_model; /* may be NULL */
- gint source_column; /* unused if @source_model is NULL */
+ GdaHolder* GSEAL(holder);
+ GdaDataModel* GSEAL(source_model);
+ gint GSEAL(source_column);
/*< private >*/
/* Padding for future expansion */
- gpointer _gda_reserved1;
- gpointer _gda_reserved2;
+ gpointer GSEAL(_gda_reserved1);
+ gpointer GSEAL(_gda_reserved2);
};
+#endif
+#define GDA_TYPE_SET_NODE (gda_set_node_get_type ())
#define GDA_SET_NODE(x) ((GdaSetNode *)(x))
-
-
-/**
- * GdaSetGroup:
- * @nodes: (element-type Gda.SetNode): list of GdaSetNode, at least one entry
- * @nodes_source: (allow-none): if NULL, then @nodes contains exactly one entry
- *
- * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
- * Don't try to use #gda_meta_context_free on a struct that was created manually.
- */
+GType gda_set_node_get_type (void) G_GNUC_CONST;
+GdaSetNode *gda_set_node_new (GdaHolder *holder, GdaDataModel *model);
+void gda_set_node_free (GdaSetNode *node);
+GdaSetNode *gda_set_node_copy (GdaSetNode *node);
+GdaHolder *gda_set_node_get_holder (GdaSetNode *node);
+void gda_set_node_set_holder (GdaSetNode *node, GdaHolder *holder);
+GdaDataModel *gda_set_node_get_data_model (GdaSetNode *node);
+void gda_set_node_set_data_model (GdaSetNode *node, GdaDataModel *model);
+gint gda_set_node_get_source_column (GdaSetNode *node);
+void gda_set_node_set_source_column (GdaSetNode *node, gint column);
+
+#ifdef GSEAL_ENABLE
+#else
struct _GdaSetGroup {
- GSList *nodes; /* list of GdaSetNode, at least one entry */
- GdaSetSource *nodes_source; /* if NULL, then @nodes contains exactly one entry */
+ GSList* GSEAL(nodes); /* list of GdaSetNode, at least one entry */
+ GdaSetSource* GSEAL(nodes_source); /* if NULL, then @nodes contains exactly one entry */
/*< private >*/
/* Padding for future expansion */
- gpointer _gda_reserved1;
- gpointer _gda_reserved2;
+ gpointer GSEAL(_gda_reserved1);
+ gpointer GSEAL(_gda_reserved2);
};
+#endif
#define GDA_TYPE_SET_GROUP (gda_set_group_get_type ())
#define GDA_SET_GROUP(x) ((GdaSetGroup *)(x))
@@ -85,40 +87,46 @@ GdaSetGroup *gda_set_group_new (void);
void gda_set_group_free (GdaSetGroup *sg);
GdaSetGroup *gda_set_group_copy (GdaSetGroup *sg);
void gda_set_group_add_node (GdaSetGroup *sg, GdaSetNode *node);
+GdaSetNode *gda_set_group_get_node (GdaSetGroup *sg);
+GSList *gda_set_group_get_nodes (GdaSetGroup *sg);
+gint gda_set_group_get_n_nodes (GdaSetGroup *sg);
void gda_set_group_set_source (GdaSetGroup *sg, GdaSetSource *source);
+GdaSetSource *gda_set_group_get_source (GdaSetGroup *sg);
-
-/**
- * GdaSetSource:
- * @data_model: Can't be NULL
- * @nodes: (element-type Gda.SetNode): list of #GdaSetNode for which source_model == @data_model
- *
- * Since 5.2, you must consider this struct as opaque. Any access to its internal must use public API.
- * Don't try to use #gda_meta_context_free on a struct that was created manually.
- **/
+#ifdef GSEAL_ENABLE
+#else
struct _GdaSetSource {
- GdaDataModel *data_model; /* Can't be NULL */
- GSList *nodes; /* list of #GdaSetNode for which source_model == @data_model */
+ GdaDataModel* GSEAL(data_model); /* Can't be NULL */
+ GSList* GSEAL(nodes); /* list of #GdaSetNode for which source_model == @data_model */
/*< private >*/
/* Padding for future expansion */
- gpointer _gda_reserved1;
- gpointer _gda_reserved2;
- gpointer _gda_reserved3;
- gpointer _gda_reserved4;
+ gpointer GSEAL(_gda_reserved1);
+ gpointer GSEAL(_gda_reserved2);
+ gpointer GSEAL(_gda_reserved3);
+ gpointer GSEAL(_gda_reserved4);
};
+#endif
#define GDA_TYPE_SET_SOURCE (gda_set_source_get_type ())
#define GDA_SET_SOURCE(x) ((GdaSetSource *)(x))
GType gda_set_source_get_type (void) G_GNUC_CONST;
-GdaSetSource *gda_set_source_new (void);
+GdaSetSource *gda_set_source_new (GdaDataModel *model);
void gda_set_source_free (GdaSetSource *s);
GdaSetSource *gda_set_source_copy (GdaSetSource *s);
void gda_set_source_add_node (GdaSetSource *s, GdaSetNode *node);
+GSList *gda_set_source_get_nodes (GdaSetSource *s);
+GdaDataModel *gda_set_source_get_data_model (GdaSetSource *s);
void gda_set_source_set_data_model (GdaSetSource *s, GdaDataModel *model);
/* struct for the object's data */
+#define GDA_TYPE_SET (gda_set_get_type())
+#define GDA_SET(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, gda_set_get_type(), GdaSet)
+#define GDA_SET_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, gda_set_get_type (), GdaSetClass)
+#define GDA_IS_SET(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, gda_set_get_type ())
+
+/* FIXME: public members of GdaSet must be SEALED! */
/**
* GdaSet:
* @holders: (element-type Gda.Holder): list of GdaHolder objects
diff --git a/libgda/gda-value.h b/libgda/gda-value.h
index bf29b72..2d280fa 100644
--- a/libgda/gda-value.h
+++ b/libgda/gda-value.h
@@ -79,20 +79,6 @@ typedef struct {
typedef struct _GdaNumeric GdaNumeric;
# ifdef GSEAL_ENABLE
# else
-/**
- * GdaNumeric:
- * @number: a string representing a number
- * @precision: precision to use when @number is converted (not implemented jet)
- * @width: not implemented jet
- *
- * Holds numbers represented as strings.
- *
- * This struct must be considered as opaque. Any access to its members must use its
- * accessors added since version 5.0.2.
- *
- * Set value func: gda_value_set_numeric
- * Get value func: gda_value_get_numeric
- */
struct _GdaNumeric {
gchar* GSEAL(number);
glong GSEAL(precision);
diff --git a/libgda/libgda-5.0.vapi b/libgda/libgda-5.0.vapi
index ed55d9a..2caa362 100644
--- a/libgda/libgda-5.0.vapi
+++ b/libgda/libgda-5.0.vapi
@@ -834,7 +834,7 @@ namespace Gda {
public unowned Gda.SetGroup get_group (Gda.Holder holder);
public unowned Gda.Holder get_holder (string holder_id);
public unowned GLib.Value? get_holder_value (string holder_id);
- public Gda.SetNode get_node (Gda.Holder holder);
+ public unowned Gda.SetNode get_node (Gda.Holder holder);
public unowned Gda.Holder get_nth_holder (int pos);
public unowned Gda.SetSource get_source (Gda.Holder holder);
public unowned Gda.SetSource get_source_for_model (Gda.DataModel model);
@@ -871,18 +871,41 @@ namespace Gda {
public void add_node (Gda.SetNode node);
public Gda.SetGroup copy ();
public void free ();
+ public int get_n_nodes ();
+ public Gda.SetNode get_node ();
+ public unowned GLib.SList<Gda.SetNode> get_nodes ();
+ public Gda.SetSource get_source ();
public void set_source (Gda.SetSource source);
}
+ [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function =
"g_boxed_free", type_id = "gda_set_node_get_type ()")]
+ [Compact]
+ public class SetNode {
+ public weak Gda.Holder holder;
+ public int source_column;
+ public weak Gda.DataModel source_model;
+ [CCode (has_construct_function = false)]
+ public SetNode (Gda.Holder holder, Gda.DataModel model);
+ public Gda.SetNode copy ();
+ public void free ();
+ public unowned Gda.DataModel get_data_model ();
+ public unowned Gda.Holder get_holder ();
+ public int get_source_column ();
+ public void set_data_model (Gda.DataModel model);
+ public void set_holder (Gda.Holder holder);
+ public void set_source_column (int column);
+ }
[CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function =
"g_boxed_free", type_id = "gda_set_source_get_type ()")]
[Compact]
public class SetSource {
public weak Gda.DataModel data_model;
public GLib.List<Gda.SetNode> nodes;
[CCode (has_construct_function = false)]
- public SetSource ();
+ public SetSource (Gda.DataModel model);
public void add_node (Gda.SetNode node);
public Gda.SetSource copy ();
public void free ();
+ public unowned Gda.DataModel get_data_model ();
+ public unowned GLib.SList<Gda.SetNode> get_nodes ();
public void set_data_model (Gda.DataModel model);
}
[CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_short_get_type ()")]
@@ -1399,12 +1422,6 @@ namespace Gda {
public GLib.Type g_type;
public weak string dbms_type;
}
- [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)]
- public struct SetNode {
- public weak Gda.Holder holder;
- public weak Gda.DataModel source_model;
- public int source_column;
- }
[CCode (cheader_filename = "libgda/libgda.h")]
[SimpleType]
public struct SqlBuilderId : uint {
diff --git a/libgda/libgda.symbols b/libgda/libgda.symbols
index 47c686a..7bac4d3 100644
--- a/libgda/libgda.symbols
+++ b/libgda/libgda.symbols
@@ -635,6 +635,16 @@
gda_set_get_source
gda_set_get_source_for_model
gda_set_get_type
+ gda_set_group_get_type
+ gda_set_group_new
+ gda_set_group_free
+ gda_set_group_copy
+ gda_set_group_add_node
+ gda_set_group_get_node
+ gda_set_group_get_nodes
+ gda_set_group_get_n_nodes
+ gda_set_group_set_source
+ gda_set_group_get_source
gda_set_is_valid
gda_set_merge_with_set
gda_set_new
@@ -642,9 +652,27 @@
gda_set_new_from_spec_node
gda_set_new_from_spec_string
gda_set_new_inline
+ gda_set_node_get_type
+ gda_set_node_new
+ gda_set_node_free
+ gda_set_node_copy
+ gda_set_node_get_holder
+ gda_set_node_set_holder
+ gda_set_node_get_data_model
+ gda_set_node_set_data_model
+ gda_set_node_get_source_column
+ gda_set_node_set_source_column
gda_set_remove_holder
gda_set_replace_source_model
gda_set_set_holder_value
+ gda_set_source_get_type
+ gda_set_source_new
+ gda_set_source_free
+ gda_set_source_copy
+ gda_set_source_add_node
+ gda_set_source_get_nodes
+ gda_set_source_get_data_model
+ gda_set_source_set_data_model
gda_short_get_type
gda_sql_any_part_check_structure
gda_sql_any_part_foreach
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]