[libgda] GdaSet: use 'set-default' signal from GdaHolder



commit 80ba9530c0381354d055d5a6e62cd509993a72a0
Author: Daniel Espinosa Ortiz <esodan gmail com>
Date:   Mon Mar 11 11:44:21 2019 -0600

    GdaSet: use 'set-default' signal from GdaHolder
    
    This is an effort to remove GdaAttributeManager

 libgda-ui/gdaui-basic-form.c    |  8 ++++----
 libgda-ui/gdaui-form.c          | 12 +++++++-----
 libgda-ui/gdaui-raw-form.c      |  2 +-
 libgda/gda-holder.c             | 18 ++++++++++++++++--
 libgda/gda-holder.h             |  2 +-
 libgda/gda-set.c                | 30 +++++++++++++++++++++++-------
 tests/value-holders/check_set.c |  2 +-
 7 files changed, 53 insertions(+), 21 deletions(-)
---
diff --git a/libgda-ui/gdaui-basic-form.c b/libgda-ui/gdaui-basic-form.c
index 7f2d65a1d..857c21b44 100644
--- a/libgda-ui/gdaui-basic-form.c
+++ b/libgda-ui/gdaui-basic-form.c
@@ -482,7 +482,7 @@ paramlist_param_attr_changed_cb (G_GNUC_UNUSED GdaSet *paramlist, GdaHolder *par
 
        sentry = get_single_entry_for_holder (form, param);
 
-       if (!strcmp (att_name, GDA_ATTRIBUTE_IS_DEFAULT)) {
+       if (!g_strcmp0 (att_name, "to-default")) {
                GtkWidget *entry = NULL;
                if (sentry)
                        entry = (GtkWidget*) sentry->entry;
@@ -511,7 +511,7 @@ paramlist_param_attr_changed_cb (G_GNUC_UNUSED GdaSet *paramlist, GdaHolder *par
                                                           G_CALLBACK (entry_contents_modified), sentry);
                }
        }
-       else if (!strcmp (att_name, GDAUI_ATTRIBUTE_PLUGIN)) {
+       else if (!g_strcmp0 (att_name, "plugin")) {
                if (sentry) {
                        /* recreate an entry widget */
                        create_entry_widget (sentry);
@@ -521,8 +521,8 @@ paramlist_param_attr_changed_cb (G_GNUC_UNUSED GdaSet *paramlist, GdaHolder *par
                else
                        paramlist_public_data_changed_cb (priv->set_info, form);
        }
-       else if (!strcmp (att_name, GDA_ATTRIBUTE_NAME) ||
-                !strcmp (att_name, GDA_ATTRIBUTE_DESCRIPTION)) {
+       else if (!g_strcmp0 (att_name, "name") ||
+                !g_strcmp0 (att_name, "description")) {
                if (sentry) {
                        gchar *str, *title;
                        GdaSetSource *ss;
diff --git a/libgda-ui/gdaui-form.c b/libgda-ui/gdaui-form.c
index 147e2a065..a5e4d578e 100644
--- a/libgda-ui/gdaui-form.c
+++ b/libgda-ui/gdaui-form.c
@@ -193,11 +193,13 @@ gdaui_form_dispose (GObject *object)
        form = GDAUI_FORM (object);
        GdauiFormPrivate *priv = gdaui_form_get_instance_private (form);
 
-       g_signal_handlers_disconnect_by_func (priv->raw_form,
-                                             G_CALLBACK (form_layout_changed_cb), form);
-       g_signal_handlers_disconnect_by_func (priv->raw_form,
-                                             G_CALLBACK (form_selection_changed_cb), form);
-
+       if (priv->raw_form != NULL) {
+               g_signal_handlers_disconnect_by_func (priv->raw_form,
+                                                    G_CALLBACK (form_layout_changed_cb), form);
+         g_signal_handlers_disconnect_by_func (priv->raw_form,
+                                                    G_CALLBACK (form_selection_changed_cb), form);
+               priv->raw_form = NULL;
+  }
        /* for the parent class */
        G_OBJECT_CLASS (gdaui_form_parent_class)->dispose (object);
 }
diff --git a/libgda-ui/gdaui-raw-form.c b/libgda-ui/gdaui-raw-form.c
index 08d9f86ac..dbac67325 100644
--- a/libgda-ui/gdaui-raw-form.c
+++ b/libgda-ui/gdaui-raw-form.c
@@ -488,7 +488,7 @@ gdaui_raw_form_set_property (GObject *object,
                                if (GDA_IS_DATA_PROXY (model)) {
                                        /* clean all */
                                        gdaui_raw_form_clean (form);
-                                       g_assert (!priv->proxy);
+                                       g_assert (priv->proxy == NULL);
                                }
                                else
                                        g_object_set (G_OBJECT (priv->proxy), "model", model, NULL);
diff --git a/libgda/gda-holder.c b/libgda/gda-holder.c
index 7e42bd79a..509dc702c 100644
--- a/libgda/gda-holder.c
+++ b/libgda/gda-holder.c
@@ -70,6 +70,7 @@ enum
        CHANGED,
        SOURCE_CHANGED,
        VALIDATE_CHANGE,
+       TO_DEFAULT,
        LAST_SIGNAL
 };
 
@@ -204,11 +205,24 @@ gda_holder_class_init (GdaHolderClass *class)
                               G_STRUCT_OFFSET (GdaHolderClass, validate_change),
                               validate_change_accumulator, NULL,
                               _gda_marshal_ERROR__VALUE, G_TYPE_ERROR, 1, G_TYPE_VALUE);
+       /**
+        * GdaHolder::to-default:
+        * @holder: the object which received the signal
+        *
+        * Gets emitted when @holder is set to its default value
+        */
+       gda_holder_signals[TO_DEFAULT] =
+                g_signal_new ("to-default",
+                              G_TYPE_FROM_CLASS (object_class),
+                              G_SIGNAL_RUN_FIRST,
+                              G_STRUCT_OFFSET (GdaHolderClass, to_default),
+                              NULL, NULL,
+                              NULL, G_TYPE_NONE, 0);
 
         class->changed = NULL;
         class->source_changed = NULL;
         class->validate_change = m_validate_change;
-       class->att_changed = NULL;
+       class->to_default = NULL;
 
        /* virtual functions */
        object_class->dispose = gda_holder_dispose;
@@ -1463,6 +1477,7 @@ gda_holder_set_value_to_default (GdaHolder *holder)
        }
 
        g_signal_emit (holder, gda_holder_signals[CHANGED], 0);
+       g_signal_emit (holder, gda_holder_signals[TO_DEFAULT], 0);
 
        gda_holder_unlock ((GdaLockable*) holder);
        return TRUE;
@@ -1549,7 +1564,6 @@ gda_holder_set_default_value (GdaHolder *holder, const GValue *value)
                }
 
                priv->default_value = gda_value_copy ((GValue *)value);
-               //g_signal_emit (holder, gda_holder_signals[CHANGED], 0);
        }
        
        /* don't emit the "changed" signal */
diff --git a/libgda/gda-holder.h b/libgda/gda-holder.h
index 72b531515..ff4ce3dc8 100644
--- a/libgda/gda-holder.h
+++ b/libgda/gda-holder.h
@@ -49,7 +49,7 @@ struct _GdaHolderClass
        void                     (*changed)          (GdaHolder *holder);
        void                     (*source_changed)   (GdaHolder *holder);
        GError                  *(*validate_change)  (GdaHolder *holder, const GValue *new_value);
-       void                     (*att_changed)      (GdaHolder *holder, const gchar *att_name, const GValue 
*att_value);
+       void                     (*to_default)      (GdaHolder *holder);
 
        /*< private >*/
        /* Padding for future expansion */
diff --git a/libgda/gda-set.c b/libgda/gda-set.c
index a1f36b021..216e23b77 100644
--- a/libgda/gda-set.c
+++ b/libgda/gda-set.c
@@ -647,7 +647,7 @@ static void gda_set_finalize (GObject *object);
 static void set_remove_node (GdaSet *set, GdaSetNode *node);
 static void set_remove_source (GdaSet *set, GdaSetSource *source);
 
-
+static void holder_to_default_cb (GdaHolder *holder, GdaSet *dataset);
 static void changed_holder_cb (GdaHolder *holder, GdaSet *dataset);
 static GError *validate_change_holder_cb (GdaHolder *holder, const GValue *value, GdaSet *dataset);
 static void source_changed_holder_cb (GdaHolder *holder, GdaSet *dataset);
@@ -785,12 +785,11 @@ GQuark gda_set_error_quark (void)
        return quark;
 }
 
-
 static gboolean
 validate_accumulator (G_GNUC_UNUSED GSignalInvocationHint *ihint,
-                     GValue *return_accu,
-                     const GValue *handler_return,
-                     G_GNUC_UNUSED gpointer data)
+                     GValue *return_accu,
+                     const GValue *handler_return,
+                     G_GNUC_UNUSED gpointer data)
 {
        GError *error;
 
@@ -807,7 +806,7 @@ m_validate_holder_change (G_GNUC_UNUSED GdaSet *set, G_GNUC_UNUSED GdaHolder *ho
        return NULL;
 }
 
-static GError *
+static GError*
 m_validate_set (G_GNUC_UNUSED GdaSet *set)
 {
        return NULL;
@@ -847,7 +846,7 @@ gda_set_class_init (GdaSetClass *class)
                              G_SIGNAL_RUN_LAST,
                              G_STRUCT_OFFSET (GdaSetClass, validate_holder_change),
                              validate_accumulator, NULL,
-                             _gda_marshal_ERROR__OBJECT_VALUE, G_TYPE_ERROR, 2,
+                            _gda_marshal_ERROR__OBJECT_VALUE, G_TYPE_ERROR, 2,
                              GDA_TYPE_HOLDER, G_TYPE_VALUE);
        /**
         * GdaSet::validate-set:
@@ -1604,6 +1603,8 @@ gda_set_remove_holder (GdaSet *set, GdaHolder *holder)
        }
        g_signal_handlers_disconnect_by_func (holder,
                                              G_CALLBACK (holder_notify_cb), set);
+       g_signal_handlers_disconnect_by_func (holder,
+                                             G_CALLBACK (holder_to_default_cb), set);
 
        /* now destroy the GdaSetNode and the GdaSetSource if necessary */
        node = gda_set_get_node (set, holder);
@@ -1869,6 +1870,12 @@ gda_set_add_holder (GdaSet *set, GdaHolder *holder)
        return added;
 }
 
+static void
+holder_to_default_cb (GdaHolder *holder, GdaSet *dataset) {
+       g_signal_emit (G_OBJECT (dataset), gda_set_signals[HOLDER_ATTR_CHANGED], 0, holder,
+                     "to-default", gda_holder_get_value (holder));
+}
+
 static void
 holder_notify_cb (GdaHolder *holder, GParamSpec *pspec, GdaSet *dataset)
 {
@@ -1895,6 +1902,13 @@ holder_notify_cb (GdaHolder *holder, GParamSpec *pspec, GdaSet *dataset)
                                     "description", desc);
                gda_value_free (desc);
        }
+       else if (!strcmp (pspec->name, "plugin")) {
+               GValue *plugin = gda_value_new (G_TYPE_STRING);
+               g_object_get_property (G_OBJECT (holder), "plugin", plugin);
+               g_signal_emit (G_OBJECT (dataset), gda_set_signals[HOLDER_ATTR_CHANGED], 0, holder,
+                                    "plugin", plugin);
+               gda_value_free (plugin);
+       }
 }
 
 static gboolean
@@ -1937,6 +1951,8 @@ gda_set_real_add_holder (GdaSet *set, GdaHolder *holder)
                }
                g_signal_connect (G_OBJECT (holder), "notify",
                                  G_CALLBACK (holder_notify_cb), set);
+               g_signal_connect (G_OBJECT (holder), "to-default",
+                                 G_CALLBACK (holder_to_default_cb), set);
                return TRUE;
        }
        else if (similar == holder)
diff --git a/tests/value-holders/check_set.c b/tests/value-holders/check_set.c
index 05f45d770..8272cf78d 100644
--- a/tests/value-holders/check_set.c
+++ b/tests/value-holders/check_set.c
@@ -184,7 +184,7 @@ static GError *
 t3_validate_holder_change (GdaSet *set, GdaHolder *h, const GValue *value, gchar *token)
 {
        /* only accept GDA_VALUE_NULL or 444 value */
-       g_assert (!strcmp (token, "MyToken"));
+       g_assert (!g_strcmp0 (token, "MyToken"));
 
        if (!strcmp (gda_holder_get_id (h), "H2")) {
                if (gda_value_is_null (value) || (g_value_get_int (value) == 444)) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]