From f376315969cac73ce50aab6b27199a991e594366 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Sun, 1 Nov 2015 17:11:35 +0100 Subject: [PATCH] Added property message to ZakFormElementValidator. --- src/formelement.c | 30 +++++++++++++- src/formelement.h | 2 + src/formelementvalidator.c | 64 ++++++++++++++++++++++++++---- src/formelementvalidator.h | 4 ++ src/formelementvalidatornotempty.h | 2 +- src/formelementvalidatorregex.h | 2 +- 6 files changed, 93 insertions(+), 11 deletions(-) diff --git a/src/formelement.c b/src/formelement.c index 53e9785..5b31dcf 100644 --- a/src/formelement.c +++ b/src/formelement.c @@ -46,11 +46,14 @@ static void zak_form_element_get_property (GObject *object, static void zak_form_element_dispose (GObject *gobject); static void zak_form_element_finalize (GObject *gobject); +static GPtrArray *zak_form_element_get_messages (ZakFormElement *element); + typedef struct { gchar *value; GPtrArray *pa_filters; GPtrArray *pa_validators; + GPtrArray *pa_messages; } ZakFormElementPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ZakFormElement, zak_form_element, G_TYPE_OBJECT) @@ -64,6 +67,8 @@ zak_form_element_class_init (ZakFormElementClass *class) object_class->get_property = zak_form_element_get_property; object_class->dispose = zak_form_element_dispose; object_class->finalize = zak_form_element_finalize; + + class->get_messages = zak_form_element_get_messages; } static void @@ -74,6 +79,7 @@ zak_form_element_init (ZakFormElement *zak_form_element) priv->value = NULL; priv->pa_filters = NULL; priv->pa_validators = NULL; + priv->pa_messages = NULL; } /** @@ -202,15 +208,27 @@ zak_form_element_is_valid (ZakFormElement *element) zak_form_element_filter (element); + if (priv->pa_messages != NULL) + { + g_ptr_array_unref (priv->pa_messages); + priv->pa_messages = NULL; + } + if (priv->pa_validators != NULL) { value = zak_form_element_get_value (element); for (i = 0; i < priv->pa_validators->len; i++) { - if (!zak_form_element_validator_validate ((ZakFormElementValidator *)g_ptr_array_index (priv->pa_validators, i), - value)) + ZakFormElementValidator *validator = (ZakFormElementValidator *)g_ptr_array_index (priv->pa_validators, i); + if (!zak_form_element_validator_validate (validator, value)) { + if (priv->pa_messages == NULL) + { + priv->pa_messages = g_ptr_array_new (); + } + g_ptr_array_add (priv->pa_messages, (gpointer)g_strdup (zak_form_element_validator_get_message (validator))); + ret = FALSE; } } @@ -277,3 +295,11 @@ zak_form_element_finalize (GObject *gobject) GObjectClass *parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (gobject)); parent_class->finalize (gobject); } + +static GPtrArray +*zak_form_element_get_messages (ZakFormElement *element) +{ + ZakFormElementPrivate *priv = zak_form_element_get_instance_private (element); + + return priv->pa_messages; +} diff --git a/src/formelement.h b/src/formelement.h index cb3594c..ffe0ff1 100644 --- a/src/formelement.h +++ b/src/formelement.h @@ -35,6 +35,8 @@ G_DECLARE_DERIVABLE_TYPE (ZakFormElement, zak_form_element, ZAK_FORM, ELEMENT, G struct _ZakFormElementClass { GObjectClass parent_class; + + GPtrArray *(*get_messages) (ZakFormElement *element); }; diff --git a/src/formelementvalidator.c b/src/formelementvalidator.c index e2c9b0e..00705b4 100644 --- a/src/formelementvalidator.c +++ b/src/formelementvalidator.c @@ -22,6 +22,12 @@ #include "formelementvalidator.h" +enum + { + PROP_0, + PROP_MESSAGE + }; + static void zak_form_element_validator_class_init (ZakFormElementValidatorClass *class); static void zak_form_element_validator_init (ZakFormElementValidator *zak_form_element_validator); @@ -39,7 +45,7 @@ static void zak_form_element_validator_finalize (GObject *gobject); typedef struct { - gpointer nothing; + gchar *message; } ZakFormElementValidatorPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ZakFormElementValidator, zak_form_element_validator, G_TYPE_OBJECT) @@ -53,6 +59,13 @@ zak_form_element_validator_class_init (ZakFormElementValidatorClass *class) object_class->get_property = zak_form_element_validator_get_property; object_class->dispose = zak_form_element_validator_dispose; object_class->finalize = zak_form_element_validator_finalize; + + g_object_class_install_property (object_class, PROP_MESSAGE, + g_param_spec_string ("message", + "Message", + "Message", + "Invalid value", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); } static void @@ -76,6 +89,35 @@ zak_form_element_validator_validate (ZakFormElementValidator *self, const gchar return ret; } +/** + * zak_form_element_validator_set_message: + * @validator: + * @message: + * + */ +void +zak_form_element_validator_set_message (ZakFormElementValidator *validator, + const gchar *message) +{ + ZakFormElementValidatorPrivate *priv = zak_form_element_validator_get_instance_private (validator); + + priv->message = g_strdup (message); +} + +/** + * zak_form_element_validator_get_message: + * @validator: + * + * Returns: + */ +gchar +*zak_form_element_validator_get_message (ZakFormElementValidator *validator) +{ + ZakFormElementValidatorPrivate *priv = zak_form_element_validator_get_instance_private (validator); + + return g_strdup (priv->message); +} + /* PRIVATE */ static void zak_form_element_validator_set_property (GObject *object, @@ -88,9 +130,13 @@ zak_form_element_validator_set_property (GObject *object, switch (property_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; + case PROP_MESSAGE: + zak_form_element_validator_set_message (zak_form_element_validator, g_value_dup_string (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; } } @@ -105,9 +151,13 @@ zak_form_element_validator_get_property (GObject *object, switch (property_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; + case PROP_MESSAGE: + g_value_set_string (value, zak_form_element_validator_get_message (zak_form_element_validator)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; } } diff --git a/src/formelementvalidator.h b/src/formelementvalidator.h index b1b8145..06ab451 100644 --- a/src/formelementvalidator.h +++ b/src/formelementvalidator.h @@ -37,6 +37,10 @@ struct _ZakFormElementValidatorClass gboolean zak_form_element_validator_validate (ZakFormElementValidator *self, const gchar *value); +void zak_form_element_validator_set_message (ZakFormElementValidator *validator, + const gchar *message); +gchar *zak_form_element_validator_get_message (ZakFormElementValidator *validator); + G_END_DECLS diff --git a/src/formelementvalidatornotempty.h b/src/formelementvalidatornotempty.h index 4ee42e1..8d82bf7 100644 --- a/src/formelementvalidatornotempty.h +++ b/src/formelementvalidatornotempty.h @@ -22,7 +22,7 @@ #include -#include +#include "formelementvalidator.h" G_BEGIN_DECLS diff --git a/src/formelementvalidatorregex.h b/src/formelementvalidatorregex.h index 7add429..627deab 100644 --- a/src/formelementvalidatorregex.h +++ b/src/formelementvalidatorregex.h @@ -22,7 +22,7 @@ #include -#include +#include "formelementvalidator.h" G_BEGIN_DECLS -- 2.49.0