[libgda] Added the GdauiSet::source-model-changed signal
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Added the GdauiSet::source-model-changed signal
- Date: Wed, 28 Jul 2010 15:48:04 +0000 (UTC)
commit 590bb5067d1ee94799c97d7465584aba0c900833
Author: Vivien Malerba <malerba gnome-db org>
Date: Wed Jul 28 17:37:00 2010 +0200
Added the GdauiSet::source-model-changed signal
the only visible user visible change there is in the GdauiEntryCombo
widget
libgda-ui/data-entries/gdaui-entry-combo.c | 27 ++++++++++++++++-
libgda-ui/gdaui-set.c | 44 ++++++++++++++++++++++++++-
libgda-ui/gdaui-set.h | 3 +-
3 files changed, 70 insertions(+), 4 deletions(-)
---
diff --git a/libgda-ui/data-entries/gdaui-entry-combo.c b/libgda-ui/data-entries/gdaui-entry-combo.c
index 6ec77a2..1bd1799 100644
--- a/libgda-ui/data-entries/gdaui-entry-combo.c
+++ b/libgda-ui/data-entries/gdaui-entry-combo.c
@@ -238,6 +238,25 @@ gdaui_entry_combo_new (GdauiSet *paramlist, GdauiSetSource *source)
return GTK_WIDGET (obj);
}
+static void
+uiset_source_model_changed_cb (GdauiSet *paramlist, GdauiSetSource *source, GdauiEntryCombo* combo)
+{
+ if (source == combo->priv->source) {
+ GSList *list, *values = NULL;
+ for (list = source->source->nodes; list; list = list->next) {
+ const GValue *cvalue;
+ cvalue = gda_holder_get_value (GDA_SET_NODE (list->data)->holder);
+ 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);
+ _gdaui_combo_set_selected_ext (GDAUI_COMBO (combo->priv->combo_entry), values, NULL);
+ g_slist_free (values);
+ }
+}
+
/*
* _gdaui_entry_combo_construct
* @combo: a #GdauiEntryCombo object to be construced
@@ -262,6 +281,8 @@ void _gdaui_entry_combo_construct (GdauiEntryCombo* combo, GdauiSet *paramlist,
combo->priv->paramlist = paramlist;
combo->priv->source = source;
g_object_ref (G_OBJECT (paramlist));
+ g_signal_connect (paramlist, "source-model-changed",
+ G_CALLBACK (uiset_source_model_changed_cb), combo);
/* create the ComboNode structures,
* and use the values provided by the parameters to display the correct row */
@@ -318,8 +339,12 @@ gdaui_entry_combo_dispose (GObject *object)
combo = GDAUI_ENTRY_COMBO (object);
if (combo->priv) {
- if (combo->priv->paramlist)
+ if (combo->priv->paramlist) {
+ g_signal_handlers_disconnect_by_func (combo->priv->paramlist,
+ G_CALLBACK (uiset_source_model_changed_cb),
+ combo);
g_object_unref (combo->priv->paramlist);
+ }
if (combo->priv->combo_nodes) {
GSList *list;
diff --git a/libgda-ui/gdaui-set.c b/libgda-ui/gdaui-set.c
index 7b65a0b..2a353c8 100644
--- a/libgda-ui/gdaui-set.c
+++ b/libgda-ui/gdaui-set.c
@@ -1,6 +1,6 @@
/* gdaui-set.c
*
- * Copyright (C) 2009 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2009 - 2010 Vivien Malerba <malerba gnome-db org>
*
* This Library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
@@ -38,6 +38,7 @@ static void gdaui_set_get_property (GObject *object,
GParamSpec *pspec);
static void wrapped_set_public_data_changed_cb (GdaSet *wset, GdauiSet *set);
+static void wrapped_set_source_model_changed_cb (GdaSet *wset, GdaSetSource *source, GdauiSet *set);
static void clean_public_data (GdauiSet *set);
static void compute_public_data (GdauiSet *set);
static void compute_shown_columns_index (GdauiSetSource *dsource);
@@ -61,10 +62,11 @@ enum {
/* signals */
enum {
PUBLIC_DATA_CHANGED,
+ SOURCE_MODEL_CHANGED,
LAST_SIGNAL
};
-static gint gdaui_set_signals[LAST_SIGNAL] = { 0 };
+static gint gdaui_set_signals[LAST_SIGNAL] = { 0, 0 };
GType
_gdaui_set_get_type (void)
@@ -103,6 +105,8 @@ gdaui_set_class_init (GdauiSetClass *class)
* @set: the #GdauiSet
*
* Gets emitted when @set's public data (#GdauiSetGroup or #GdauiSetSource values) have changed
+ *
+ * Since: 4.2
*/
gdaui_set_signals[PUBLIC_DATA_CHANGED] =
g_signal_new ("public-data-changed",
@@ -111,8 +115,24 @@ gdaui_set_class_init (GdauiSetClass *class)
G_STRUCT_OFFSET (GdauiSetClass, public_data_changed),
NULL, NULL,
_gdaui_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ /**
+ * GdauiSet::source-model-changed
+ * @set: the #GdauiSet
+ *
+ * Gets emitted when the data model used in @set's #GdauiSetSource has changed
+ *
+ * Since: 4.2
+ */
+ gdaui_set_signals[SOURCE_MODEL_CHANGED] =
+ g_signal_new ("source-model-changed",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdauiSetClass, public_data_changed),
+ NULL, NULL,
+ _gdaui_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER);
class->public_data_changed = NULL;
+ class->source_model_changed = NULL;
/* Properties */
object_class->set_property = gdaui_set_set_property;
@@ -160,6 +180,9 @@ gdaui_set_dispose (GObject *object)
if (set->priv->set) {
g_signal_handlers_disconnect_by_func (G_OBJECT (set->priv->set),
G_CALLBACK (wrapped_set_public_data_changed_cb), set);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (set->priv->set),
+ G_CALLBACK (wrapped_set_source_model_changed_cb), set);
+
g_object_unref (set->priv->set);
set->priv->set = NULL;
}
@@ -192,6 +215,8 @@ gdaui_set_set_property (GObject *object,
compute_public_data (set);
g_signal_connect (set->priv->set, "public-data-changed",
G_CALLBACK (wrapped_set_public_data_changed_cb), set);
+ g_signal_connect (set->priv->set, "source-model-changed",
+ G_CALLBACK (wrapped_set_source_model_changed_cb), set);
}
break;
default:
@@ -209,6 +234,21 @@ wrapped_set_public_data_changed_cb (GdaSet *wset, GdauiSet *set)
}
static void
+wrapped_set_source_model_changed_cb (GdaSet *wset, GdaSetSource *source, GdauiSet *set)
+{
+ GdauiSetSource *uisource;
+ GSList *list;
+ for (list = set->sources_list; list; list = list->next) {
+ if (((GdauiSetSource*) list->data)->source == source) {
+ uisource = (GdauiSetSource*) list->data;
+ break;
+ }
+ }
+ if (uisource)
+ g_signal_emit (set, gdaui_set_signals[SOURCE_MODEL_CHANGED], 0, uisource);
+}
+
+static void
clean_public_data (GdauiSet *set)
{
GSList *list;
diff --git a/libgda-ui/gdaui-set.h b/libgda-ui/gdaui-set.h
index 705e7e9..7fa86c1 100644
--- a/libgda-ui/gdaui-set.h
+++ b/libgda-ui/gdaui-set.h
@@ -88,6 +88,7 @@ struct _GdauiSetClass
{
GObjectClass parent_class;
void (*public_data_changed) (GdauiSet *set);
+ void (*source_model_changed) (GdauiSet *set, GdauiSetSource *source);
};
/*
@@ -96,7 +97,7 @@ struct _GdauiSetClass
GType _gdaui_set_get_type (void) G_GNUC_CONST;
GdauiSet *_gdaui_set_new (GdaSet *set);
-GdauiSetGroup *_gdaui_set_get_group (GdauiSet *dbset, GdaHolder *holder);
+GdauiSetGroup *_gdaui_set_get_group (GdauiSet *dbset, GdaHolder *holder);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]