]> saetta.ns0.it Git - libgtkform/commitdiff
Added GtkForm::is_changed.
authorAndrea Zagli <azagli@libero.it>
Mon, 24 Aug 2009 13:46:13 +0000 (15:46 +0200)
committerAndrea Zagli <azagli@libero.it>
Mon, 24 Aug 2009 13:46:13 +0000 (15:46 +0200)
Changed libgtkform.pc.in to return include path without libgtkform (so
now in source files need to use <libgtkform/form.h>).

19 files changed:
docs/reference/libgtkform-decl-list.txt
docs/reference/libgtkform-decl.txt
docs/reference/libgtkform-undocumented.txt
docs/reference/libgtkform-unused.txt
libgtkform.pc.in
src/field.c
src/field.h
src/fieldboolean.c
src/fieldboolean.h
src/fielddatetime.c
src/fielddatetime.h
src/fieldfloat.c
src/fieldfloat.h
src/fieldinteger.c
src/fieldinteger.h
src/fieldtext.c
src/fieldtext.h
src/form.c
src/form.h

index 524733019481e70ac402cd5799eec470441b1d77..25538b6c67d005eaef19be6eac2f001b7dd6532d 100644 (file)
@@ -49,6 +49,7 @@ gtk_form_field_boolean_get_value
 gtk_form_field_boolean_get_value_sql
 gtk_form_field_boolean_clear
 gtk_form_field_boolean_is_empty
+gtk_form_filed_boolean_is_changed
 gtk_form_field_boolean_set_from_datamodel
 gtk_form_field_boolean_str_to_boolean
 </SECTION>
@@ -90,6 +91,7 @@ gtk_form_field_text_get_value
 gtk_form_field_text_get_value_sql
 gtk_form_field_text_clear
 gtk_form_field_text_is_empty
+gtk_form_field_text_is_changed
 gtk_form_field_text_set_from_datamodel
 </SECTION>
 
@@ -110,6 +112,7 @@ gtk_form_field_datetime_get_value
 gtk_form_field_datetime_get_value_sql
 gtk_form_field_datetime_clear
 gtk_form_field_datetime_is_empty
+gtk_form_field_datetime_is_changed
 gtk_form_field_datetime_set_from_datamodel
 gtk_form_field_datetime_get_tm_from_str
 </SECTION>
@@ -147,6 +150,7 @@ gtk_form_field_float_get_value
 gtk_form_field_float_get_value_sql
 gtk_form_field_float_clear
 gtk_form_field_float_is_empty
+gtk_form_field_float_is_changed
 gtk_form_field_float_set_from_datamodel
 </SECTION>
 
@@ -207,6 +211,7 @@ gtk_form_field_get_value
 gtk_form_field_get_value_sql
 gtk_form_field_clear
 gtk_form_field_is_empty
+gtk_form_field_is_changed
 gtk_form_field_set_from_datamodel
 </SECTION>
 
@@ -236,6 +241,7 @@ gtk_form_get_field_from_name
 gtk_form_get_widget_from_name
 gtk_form_clear
 gtk_form_check
+gtk_form_is_changed
 gtk_form_set_sensitive
 gtk_form_set_editable
 GtkFormSqlType
@@ -294,6 +300,7 @@ gtk_form_field_integer_get_value
 gtk_form_field_integer_get_value_sql
 gtk_form_field_integer_clear
 gtk_form_field_integer_is_empty
+gtk_form_field_integer_is_changed
 gtk_form_field_integer_set_from_datamodel
 </SECTION>
 
index 61fc34127cfc6b62a7b0f12fb782e098fd638b0e..5714eac279b25f43ebcd3ef10e0ca20a0ab02f9d 100644 (file)
@@ -216,6 +216,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_filed_boolean_is_changed</NAME>
+<RETURNS>gboolean </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_boolean_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -395,6 +400,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_text_is_changed</NAME>
+<RETURNS>gboolean </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_text_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -479,6 +489,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_datetime_is_changed</NAME>
+<RETURNS>gboolean </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_datetime_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -632,6 +647,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_float_is_changed</NAME>
+<RETURNS>gboolean </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_float_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -838,6 +858,7 @@ struct _GtkFormFieldClass
 
                gboolean (*clear) (GtkFormField *field);
                gboolean (*is_empty) (GtkFormField *field);
+               gboolean (*is_changed) (GtkFormField *field);
                gboolean (*set_from_datamodel) (GtkFormField *field, GdaDataModel *dm, gint row);
        };
 </STRUCT>
@@ -892,6 +913,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_is_changed</NAME>
+<RETURNS>gboolean </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -1021,6 +1047,11 @@ GtkForm *form
 GtkForm *form
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_is_changed</NAME>
+<RETURNS>gboolean </RETURNS>
+GtkForm *form
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_set_sensitive</NAME>
 <RETURNS>void </RETURNS>
 GtkForm *form, gboolean sensitive
@@ -1268,6 +1299,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_integer_is_changed</NAME>
+<RETURNS>gboolean </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_integer_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
index c6d093359d41394f8a328c0e7511ebeb67fe1f2d..cafe887904d72966fcf0d9f9472c29777cc39798 100644 (file)
@@ -1,7 +1,7 @@
 6% symbol docs coverage.
 17 symbols documented.
 2 symbols incomplete.
-252 not documented.
+259 not documented.
 
 
 GTK_FORM
@@ -130,6 +130,7 @@ gtk_form_field_datetime_get_type
 gtk_form_field_datetime_get_value
 gtk_form_field_datetime_get_value_sql
 gtk_form_field_datetime_get_value_stringify
+gtk_form_field_datetime_is_changed
 gtk_form_field_datetime_is_empty
 gtk_form_field_datetime_new
 gtk_form_field_datetime_set_from_datamodel
@@ -138,11 +139,12 @@ gtk_form_field_float_get_type
 gtk_form_field_float_get_value
 gtk_form_field_float_get_value_sql
 gtk_form_field_float_get_value_stringify
+gtk_form_field_float_is_changed
 gtk_form_field_float_is_empty
 gtk_form_field_float_new
 gtk_form_field_float_set_from_datamodel
 gtk_form_field_get_field_name
-gtk_form_field_get_gtk_form_widget (field, field, Returns)
+gtk_form_field_get_gtk_form_widget (Returns)
 gtk_form_field_get_str_format
 gtk_form_field_get_type
 gtk_form_field_get_value
@@ -153,9 +155,11 @@ gtk_form_field_integer_get_type
 gtk_form_field_integer_get_value
 gtk_form_field_integer_get_value_sql
 gtk_form_field_integer_get_value_stringify
+gtk_form_field_integer_is_changed
 gtk_form_field_integer_is_empty
 gtk_form_field_integer_new
 gtk_form_field_integer_set_from_datamodel
+gtk_form_field_is_changed
 gtk_form_field_is_empty
 gtk_form_field_new
 gtk_form_field_new_from_gtk_form_widget
@@ -165,9 +169,11 @@ gtk_form_field_text_get_type
 gtk_form_field_text_get_value
 gtk_form_field_text_get_value_sql
 gtk_form_field_text_get_value_stringify
+gtk_form_field_text_is_changed
 gtk_form_field_text_is_empty
 gtk_form_field_text_new
 gtk_form_field_text_set_from_datamodel
+gtk_form_filed_boolean_is_changed
 gtk_form_fill_from_datamodel
 gtk_form_get_field_from_name
 gtk_form_get_gtkbuilder
@@ -176,6 +182,7 @@ gtk_form_get_sql
 gtk_form_get_table
 gtk_form_get_type
 gtk_form_get_widget_from_name
+gtk_form_is_changed
 gtk_form_key_add_field
 gtk_form_key_add_fields
 gtk_form_key_check
index d79e4ad7382112755e8b2063409884100fb2f009..183596d03165381119893fb34b6816d300a6ec49 100644 (file)
@@ -15,9 +15,16 @@ GtkFormWidgetSpinClass
 GtkFormWidgetTextviewClass
 gtk_form_field_boolean_str_to_boolean
 gtk_form_field_datetime_get_tm_from_str
+gtk_form_field_datetime_is_changed
+gtk_form_field_float_is_changed
+gtk_form_field_integer_is_changed
+gtk_form_field_is_changed
+gtk_form_field_text_is_changed
+gtk_form_filed_boolean_is_changed
 gtk_form_get_gtkbuilder
 gtk_form_get_key
 gtk_form_get_table
+gtk_form_is_changed
 gtk_form_new_from_file
 gtk_form_new_from_xml
 gtk_form_set_key
index 86fc5511ea1ce345b6cd9b7d7f241433fdaabfa7..4e513fa1434dfeefa437706f4cd0811094da5696 100644 (file)
@@ -4,8 +4,8 @@ libdir=@libdir@
 includedir=@includedir@
 
 Name: @PACKAGE_NAME@
-Description: Class for easly manage Gtk+ forms binded to db (or not).
+Description: Class to more easly manage Gtk+ forms binded to db (or not).
 Version: @PACKAGE_VERSION@
 Requires: gtk+-2.0, libxml-2.0, libgdaex
 Libs: -L${libdir} -lgtkform
-Cflags: -I${includedir}/libgtkform
+Cflags: -I${includedir}
index 10cf34c35f3922e44b289729d908591766491154..3b4925e0f0436d63851c2efb18d2bcff0ac433fd 100644 (file)
@@ -87,7 +87,7 @@ gtk_form_field_class_init (GtkFormFieldClass *klass)
                                         g_param_spec_object ("form-widget",
                                                              "GtkFormWidget",
                                                              "The GtkFormWidget",
-                                                                                                                                                                                                                               TYPE_GTK_FORM_WIDGET,
+                                                             TYPE_GTK_FORM_WIDGET,
                                                              G_PARAM_READWRITE));
 
        g_type_class_add_private (object_class, sizeof (GtkFormFieldPrivate));
@@ -111,7 +111,7 @@ GtkFormField
 
 /**
  * gtk_form_field_new_from_gtk_form_widget:
- * @fwidget:
+ * @fwidget: a #GtkFormWidget object.
  *
  * Returns: the newly created #GtkFormField.
  */
@@ -129,7 +129,7 @@ GtkFormField
 
 /**
  * gtk_form_field_get_field_name:
- * @field:
+ * @field: a #GtkFormField object.
  *
  * Returns: the field's name.
  */
@@ -143,7 +143,7 @@ const gchar
 
 /**
  * gtk_form_field_get_gtk_form_widget:
- * @field:
+ * @field: a #GtkFormField object.
  *
  * Return: the associated #GtkFormWidget.
  */
@@ -157,75 +157,136 @@ GtkFormWidget
 
 /**
  * gtk_form_field_get_value_stringify:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
 *gtk_form_field_get_value_stringify (GtkFormField *field)
 {
-       GTK_FORM_FIELD_GET_CLASS (field)->get_value_stringify (field);
+       const gchar *ret;
+
+       if (IS_GTK_FORM_FIELD (field) && GTK_FORM_FIELD_GET_CLASS (field)->get_value_stringify != NULL)
+               {
+                       ret = GTK_FORM_FIELD_GET_CLASS (field)->get_value_stringify (field);
+               }
+
+       return ret;
 }
 
 /**
  * gtk_form_field_get_value:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const GValue
 *gtk_form_field_get_value (GtkFormField *field)
 {
-       GTK_FORM_FIELD_GET_CLASS (field)->get_value (field);
+       const GValue *ret;
+
+       if (IS_GTK_FORM_FIELD (field) && GTK_FORM_FIELD_GET_CLASS (field)->get_value != NULL)
+               {
+                       ret = GTK_FORM_FIELD_GET_CLASS (field)->get_value (field);
+               }
+
+       return ret;
 }
 
 /**
  * gtk_form_field_get_value_sql:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
 *gtk_form_field_get_value_sql (GtkFormField *field)
 {
-       GTK_FORM_FIELD_GET_CLASS (field)->get_value_sql (field);
+       const gchar *ret;
+
+       if (IS_GTK_FORM_FIELD (field) && GTK_FORM_FIELD_GET_CLASS (field)->get_value_sql != NULL)
+               {
+                       ret = GTK_FORM_FIELD_GET_CLASS (field)->get_value_sql (field);
+               }
+
+       return ret;
 }
 
 /**
  * gtk_form_field_clear:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
 gtk_form_field_clear (GtkFormField *field)
 {
-       GTK_FORM_FIELD_GET_CLASS (field)->clear (field);
+       gboolean ret;
+
+       if (IS_GTK_FORM_FIELD (field) && GTK_FORM_FIELD_GET_CLASS (field)->clear != NULL)
+               {
+                       ret = GTK_FORM_FIELD_GET_CLASS (field)->clear (field);
+               }
+
+       return ret;
 }
 
 /**
  * gtk_form_field_is_empty:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
 gtk_form_field_is_empty (GtkFormField *field)
 {
-       GTK_FORM_FIELD_GET_CLASS (field)->is_empty (field);
+       gboolean ret = FALSE;
+
+       if (IS_GTK_FORM_FIELD (field) && GTK_FORM_FIELD_GET_CLASS (field)->is_empty != NULL)
+               {
+                       ret = GTK_FORM_FIELD_GET_CLASS (field)->is_empty (field);
+               }
+
+       return ret;
+}
+
+/**
+ * gtk_form_field_is_changed:
+ * @field: a #GtkFormField object.
+ *
+ * Returns: TRUE if the values in the form are changed since last calling to
+ * gtk_form_field_clear() or gtk_form_field_set_from_datamodel().
+ */
+gboolean
+gtk_form_field_is_changed (GtkFormField *field)
+{
+       gboolean ret = FALSE;
+
+       if (IS_GTK_FORM_FIELD (field) && GTK_FORM_FIELD_GET_CLASS (field)->is_changed != NULL)
+               {
+                       ret = GTK_FORM_FIELD_GET_CLASS (field)->is_changed (field);
+               }
+
+       return ret;
 }
 
 /**
  * gtk_form_field_set_from_datamodel:
- * @field:
- * @dm:
- * @row:
+ * @field: a #GtkFormField object.
+ * @dm: a #GdaDataModel object.
+ * @row: the row number to return.
  *
  */
 gboolean
 gtk_form_field_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row)
 {
+       gboolean ret = FALSE;
+
        GtkFormFieldPrivate *priv = GTK_FORM_FIELD_GET_PRIVATE (field);
 
-       if (priv->field != NULL && strcmp (priv->field, "") != 0)
+       g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), FALSE);
+
+       if (IS_GTK_FORM_FIELD (field) && GTK_FORM_FIELD_GET_CLASS (field)->set_from_datamodel != NULL)
                {
-                       GTK_FORM_FIELD_GET_CLASS (field)->set_from_datamodel (field, dm, row);
+                       ret = GTK_FORM_FIELD_GET_CLASS (field)->set_from_datamodel (field, dm, row);
                }
+
+       return ret;
 }
 
 /* PRIVATE */
index d4c7027f161a5f3edba38a23bea5f7a8f2bef4e6..ece738c996b3dc789ac303593b34dd889c941ddd 100644 (file)
@@ -55,6 +55,7 @@ struct _GtkFormFieldClass
 
                gboolean (*clear) (GtkFormField *field);
                gboolean (*is_empty) (GtkFormField *field);
+               gboolean (*is_changed) (GtkFormField *field);
                gboolean (*set_from_datamodel) (GtkFormField *field, GdaDataModel *dm, gint row);
        };
 
@@ -74,6 +75,8 @@ gboolean gtk_form_field_clear (GtkFormField *field);
 
 gboolean gtk_form_field_is_empty (GtkFormField *field);
 
+gboolean gtk_form_field_is_changed (GtkFormField *field);
+
 gboolean gtk_form_field_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row);
 
 
index fb00e9ef817e04f52d652f24ac308c690a409fe1..d93cf800a515394211e37354f2bc8b6c3b112902 100644 (file)
@@ -47,6 +47,7 @@ typedef struct _GtkFormFieldBooleanPrivate GtkFormFieldBooleanPrivate;
 struct _GtkFormFieldBooleanPrivate
        {
                gboolean default_value;
+               gboolean original_value;
        };
 
 
@@ -66,6 +67,7 @@ gtk_form_field_boolean_class_init (GtkFormFieldBooleanClass *klass)
        field_class->get_value_sql = gtk_form_field_boolean_get_value_sql;
        field_class->clear = gtk_form_field_boolean_clear;
        field_class->is_empty = gtk_form_field_boolean_is_empty;
+       field_class->is_changed = gtk_form_filed_boolean_is_changed;
        field_class->set_from_datamodel = gtk_form_field_boolean_set_from_datamodel;
 
        g_object_class_install_property (object_class, PROP_DEFAULT,
@@ -129,10 +131,11 @@ const GValue
 *gtk_form_field_boolean_get_value (GtkFormField *field)
 {
        GValue *ret = NULL;
+       const gchar *value;
 
        g_return_val_if_fail (IS_GTK_FORM_FIELD_BOOLEAN (field), NULL);
 
-       const gchar *value = gtk_form_field_boolean_get_value_stringify (field);
+       value = gtk_form_field_boolean_get_value_stringify (field);
 
        if (value != NULL)
                {
@@ -186,6 +189,8 @@ gtk_form_field_boolean_clear (GtkFormField *field)
 
        ret = gtk_form_field_boolean_set_value_stringify (field, g_strdup_printf ("%d", priv->default_value));
 
+       priv->original_value = priv->default_value;
+
        return ret;
 }
 
@@ -202,6 +207,29 @@ gtk_form_field_boolean_is_empty (GtkFormField *field)
        return ret;
 }
 
+/**
+ * gtk_form_filed_boolean_is_changed:
+ * @field: a #GtkFormField object.
+ *
+ */
+gboolean
+gtk_form_filed_boolean_is_changed (GtkFormField *field)
+{
+       gboolean ret = FALSE;
+       GtkFormFieldBooleanPrivate *priv;
+       const gchar *value;
+
+       g_return_val_if_fail (IS_GTK_FORM_FIELD_BOOLEAN (field), FALSE);
+
+       priv = GTK_FORM_FIELD_BOOLEAN_GET_PRIVATE (GTK_FORM_FIELD_BOOLEAN (field));
+
+       value = gtk_form_field_boolean_get_value_stringify (field);
+
+       ret = (priv->original_value != gtk_form_field_boolean_str_to_boolean (value));
+
+       return ret;
+}
+
 /**
  * gtk_form_field_boolean_set_from_datamodel:
  * @field: a #GtkFormField object.
@@ -213,12 +241,15 @@ gboolean
 gtk_form_field_boolean_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row)
 {
        gboolean ret = FALSE;
+       GtkFormFieldBooleanPrivate *priv;
        const gchar *field_name;
        gchar *value;
 
        g_return_val_if_fail (IS_GTK_FORM_FIELD_BOOLEAN (field), FALSE);
        g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), FALSE);
 
+       priv = GTK_FORM_FIELD_BOOLEAN_GET_PRIVATE (GTK_FORM_FIELD_BOOLEAN (field));
+
        field_name = gtk_form_field_get_field_name (field);
 
        if (gdaex_data_model_get_field_value_boolean_at (dm, row, field_name))
@@ -231,6 +262,8 @@ gtk_form_field_boolean_set_from_datamodel (GtkFormField *field, GdaDataModel *dm
                }
        ret = gtk_form_field_boolean_set_value_stringify (field, value);
 
+       priv->original_value = gtk_form_field_boolean_str_to_boolean (value);
+
        return ret;
 }
 
index a3dfe585c854bb1341179ff4264dda31a1cf36aa..89349db974c6a6e8589ed63f1b414a78a6fba761 100644 (file)
@@ -60,6 +60,8 @@ gboolean gtk_form_field_boolean_clear (GtkFormField *field);
 
 gboolean gtk_form_field_boolean_is_empty (GtkFormField *field);
 
+gboolean gtk_form_filed_boolean_is_changed (GtkFormField *field);
+
 gboolean gtk_form_field_boolean_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row);
 
 gboolean gtk_form_field_boolean_str_to_boolean (const gchar *value);
index 1a7be418b07f18874ae99e149310e69ad60b722d..0be7c6544bb4512550e9d1e20c7a91668b57d77e 100644 (file)
@@ -52,6 +52,7 @@ typedef struct _GtkFormFieldDateTimePrivate GtkFormFieldDateTimePrivate;
 struct _GtkFormFieldDateTimePrivate
        {
                struct tm *default_value;
+               struct tm *original_value;
                gint type;
        };
 
@@ -72,6 +73,7 @@ gtk_form_field_datetime_class_init (GtkFormFieldDateTimeClass *klass)
        field_class->get_value_sql = gtk_form_field_datetime_get_value_sql;
        field_class->clear = gtk_form_field_datetime_clear;
        field_class->is_empty = gtk_form_field_datetime_is_empty;
+       field_class->is_changed = gtk_form_field_datetime_is_changed;
        field_class->set_from_datamodel = gtk_form_field_datetime_set_from_datamodel;
 
        g_object_class_install_property (object_class, PROP_DEFAULT,
@@ -235,6 +237,8 @@ gtk_form_field_datetime_clear (GtkFormField *field)
                        ret = gtk_form_field_datetime_set_value_stringify (field, "");
                }
 
+       priv->original_value = g_memdup (priv->default_value, sizeof (struct tm));
+
        return ret;
 }
 
@@ -251,10 +255,38 @@ gtk_form_field_datetime_is_empty (GtkFormField *field)
        return ret;
 }
 
+/**
+ * gtk_form_field_datetime_is_changed:
+ * @field:
+ *
+ */
+gboolean
+gtk_form_field_datetime_is_changed (GtkFormField *field)
+{
+       gboolean ret = FALSE;
+       GtkFormFieldDateTimePrivate *priv;
+       struct tm *value;
+
+       g_return_val_if_fail (IS_GTK_FORM_FIELD_DATETIME (field), FALSE);
+
+       priv = GTK_FORM_FIELD_DATETIME_GET_PRIVATE (GTK_FORM_FIELD_DATETIME (field));
+
+       value = gtk_form_field_datetime_get_tm_from_str (gtk_form_field_datetime_get_value_stringify (field));
+
+       ret = (value->tm_year != priv->original_value->tm_year
+              || value->tm_mon != priv->original_value->tm_mon
+              || value->tm_mday != priv->original_value->tm_mday
+              || value->tm_hour != priv->original_value->tm_hour
+              || value->tm_min != priv->original_value->tm_min
+              || value->tm_sec != priv->original_value->tm_sec);
+
+       return ret;
+}
+
 /**
  * gtk_form_field_datetime_set_from_datamodel:
  * @field: a #GtkFormField object.
- * @dm:
+ * @dm: a #GdaDataModel object.
  * @row:
  *
  */
@@ -262,16 +294,22 @@ gboolean
 gtk_form_field_datetime_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row)
 {
        gboolean ret = FALSE;
+       GtkFormFieldDateTimePrivate *priv;
+       const gchar *field_name;
+       const gchar *value;
 
        g_return_val_if_fail (IS_GTK_FORM_FIELD_DATETIME (field), FALSE);
+       g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), FALSE);
 
-       const gchar *field_name = gtk_form_field_get_field_name (field);
+       priv = GTK_FORM_FIELD_DATETIME_GET_PRIVATE (GTK_FORM_FIELD_DATETIME (field));
 
-       if (dm != NULL)
-               {
-                       ret = gtk_form_field_datetime_set_value_stringify (field,
-                             gdaex_data_model_get_field_value_stringify_at (dm, row, field_name));
-               }
+       field_name = gtk_form_field_get_field_name (field);
+
+       value = gdaex_data_model_get_field_value_stringify_at (dm, row, field_name);
+
+       ret = gtk_form_field_datetime_set_value_stringify (field, value);
+
+       priv->original_value = gtk_form_field_datetime_get_tm_from_str (value);
 
        return ret;
 }
index c39d956ab7ffc78dd8dc5d233de48b832249d4a5..d28d867a517342cd7ed051586055d8d08fd82711 100644 (file)
@@ -67,6 +67,8 @@ gboolean gtk_form_field_datetime_clear (GtkFormField *field);
 
 gboolean gtk_form_field_datetime_is_empty (GtkFormField *field);
 
+gboolean gtk_form_field_datetime_is_changed (GtkFormField *field);
+
 gboolean gtk_form_field_datetime_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row);
 
 struct tm *gtk_form_field_datetime_get_tm_from_str (const gchar *str);
index 449bba02e6d6df1292351918bba7c69c9840da7b..36e4a43a8637c02d99a0f8591d52e408696a9e8a 100644 (file)
@@ -47,6 +47,7 @@ typedef struct _GtkFormFieldFloatPrivate GtkFormFieldFloatPrivate;
 struct _GtkFormFieldFloatPrivate
        {
                gfloat default_value;
+               gfloat original_value;
        };
 
 
@@ -66,6 +67,7 @@ gtk_form_field_float_class_init (GtkFormFieldFloatClass *klass)
        field_class->get_value_sql = gtk_form_field_float_get_value_sql;
        field_class->clear = gtk_form_field_float_clear;
        field_class->is_empty = gtk_form_field_float_is_empty;
+       field_class->is_changed = gtk_form_field_float_is_changed;
        field_class->set_from_datamodel = gtk_form_field_float_set_from_datamodel;
 
        g_object_class_install_property (object_class, PROP_DEFAULT,
@@ -96,7 +98,7 @@ GtkFormField
 
 /**
  * gtk_form_field_float_get_value_stringify:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
@@ -120,7 +122,7 @@ const gchar
 
 /**
  * gtk_form_field_float_get_value:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const GValue
@@ -142,7 +144,7 @@ const GValue
 
 /**
  * gtk_form_field_float_get_value_sql:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
@@ -168,7 +170,7 @@ const gchar
 
 /**
  * gtk_form_field_float_clear:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
@@ -180,12 +182,14 @@ gtk_form_field_float_clear (GtkFormField *field)
 
        ret = gtk_form_field_float_set_value_stringify (field, g_strdup_printf ("%f", priv->default_value));
 
+       priv->original_value = priv->default_value;
+
        return ret;
 }
 
 /**
  * gtk_form_field_float_is_empty:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
@@ -204,10 +208,33 @@ gtk_form_field_float_is_empty (GtkFormField *field)
        return ret;
 }
 
+/**
+ * gtk_form_field_float_is_changed:
+ * @field: a #GtkFormField object.
+ *
+ */
+gboolean
+gtk_form_field_float_is_changed (GtkFormField *field)
+{
+       gboolean ret = FALSE;
+       GtkFormFieldFloatPrivate *priv;
+       gfloat value;
+
+       g_return_val_if_fail (IS_GTK_FORM_FIELD_FLOAT (field), FALSE);
+
+       priv = GTK_FORM_FIELD_FLOAT_GET_PRIVATE (GTK_FORM_FIELD_FLOAT (field));
+
+       value = g_strtod (gtk_form_field_float_get_value_stringify (field), NULL);
+
+       ret = (priv->original_value != value);
+
+       return ret;
+}
+
 /**
  * gtk_form_field_float_set_from_datamodel:
- * @field:
- * @dm:
+ * @field: a #GtkFormField object.
+ * @dm: a #GdaDataModel object.
  * @row:
  *
  */
@@ -215,13 +242,22 @@ gboolean
 gtk_form_field_float_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row)
 {
        gboolean ret = FALSE;
-       const gchar *field_name = gtk_form_field_get_field_name (field);
+       GtkFormFieldFloatPrivate *priv;
+       const gchar *value;
+       const gchar *field_name;
 
-       if (dm != NULL)
-               {
-                       ret = gtk_form_field_float_set_value_stringify (field,
-                                                                               gdaex_data_model_get_field_value_stringify_at (dm, row, field_name));
-               }
+       g_return_val_if_fail (IS_GTK_FORM_FIELD_FLOAT (field), FALSE);
+       g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), FALSE);
+
+       priv = GTK_FORM_FIELD_FLOAT_GET_PRIVATE (GTK_FORM_FIELD_FLOAT (field));
+
+       field_name = gtk_form_field_get_field_name (field);
+
+       value = gdaex_data_model_get_field_value_stringify_at (dm, row, field_name);
+
+       ret = gtk_form_field_float_set_value_stringify (field, value);
+
+       priv->original_value = g_strtod (value, NULL);
 
        return ret;
 }
index efb1e1c2463e282926cd19da0446e4fe9f06e065..5f3ae5f720f7f8db5b2dc31949117e54b80f8e3f 100644 (file)
@@ -60,6 +60,8 @@ gboolean gtk_form_field_float_clear (GtkFormField *field);
 
 gboolean gtk_form_field_float_is_empty (GtkFormField *field);
 
+gboolean gtk_form_field_float_is_changed (GtkFormField *field);
+
 gboolean gtk_form_field_float_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row);
 
 
index bb4ca7d2ac7b7b999ab3bf8e0f6cca7693d9f1b4..3e896c22cf3587b494a44b48f8a6616b18cafe90 100644 (file)
@@ -45,6 +45,7 @@ typedef struct _GtkFormFieldIntegerPrivate GtkFormFieldIntegerPrivate;
 struct _GtkFormFieldIntegerPrivate
        {
                gint default_value;
+               gint original_value;
        };
 
 
@@ -64,6 +65,7 @@ gtk_form_field_integer_class_init (GtkFormFieldIntegerClass *klass)
        field_class->get_value_sql = gtk_form_field_integer_get_value_sql;
        field_class->clear = gtk_form_field_integer_clear;
        field_class->is_empty = gtk_form_field_integer_is_empty;
+       field_class->is_changed = gtk_form_field_integer_is_changed;
        field_class->set_from_datamodel = gtk_form_field_integer_set_from_datamodel;
 
        g_object_class_install_property (object_class, PROP_DEFAULT,
@@ -94,7 +96,7 @@ GtkFormField
 
 /**
  * gtk_form_field_integer_get_value_stringify:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
@@ -118,7 +120,7 @@ const gchar
 
 /**
  * gtk_form_field_integer_get_value:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const GValue
@@ -140,7 +142,7 @@ const GValue
 
 /**
  * gtk_form_field_integer_get_value_sql:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
@@ -159,7 +161,7 @@ const gchar
 
 /**
  * gtk_form_field_integer_clear:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
@@ -171,12 +173,14 @@ gtk_form_field_integer_clear (GtkFormField *field)
 
        ret = gtk_form_field_integer_set_value_stringify (field, g_strdup_printf ("%d", priv->default_value));
 
+       priv->original_value = priv->default_value;
+
        return ret;
 }
 
 /**
  * gtk_form_field_integer_is_empty:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
@@ -195,10 +199,33 @@ gtk_form_field_integer_is_empty (GtkFormField *field)
        return ret;
 }
 
+/**
+ * gtk_form_field_integer_is_changed:
+ * @field: a #GtkFormField object.
+ *
+ */
+gboolean
+gtk_form_field_integer_is_changed (GtkFormField *field)
+{
+       gboolean ret = FALSE;
+       GtkFormFieldIntegerPrivate *priv;
+       gint value;
+
+       g_return_val_if_fail (IS_GTK_FORM_FIELD_INTEGER (field), FALSE);
+
+       priv = GTK_FORM_FIELD_INTEGER_GET_PRIVATE (GTK_FORM_FIELD_INTEGER (field));
+
+       value = strtol (gtk_form_field_integer_get_value_stringify (field), NULL, 10);
+
+       ret = (priv->original_value != value);
+
+       return ret;
+}
+
 /**
  * gtk_form_field_integer_set_from_datamodel:
- * @field:
- * @dm:
+ * @field: a #GtkFormField object.
+ * @dm: a #GdaDataModel object.
  * @row:
  *
  */
@@ -206,13 +233,21 @@ gboolean
 gtk_form_field_integer_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row)
 {
        gboolean ret = FALSE;
-       const gchar *field_name = gtk_form_field_get_field_name (field);
+       GtkFormFieldIntegerPrivate *priv;
+       const gchar *value;
+       const gchar *field_name;
 
-       if (dm != NULL)
-               {
-                       ret = gtk_form_field_integer_set_value_stringify (field,
-                                                                                 gdaex_data_model_get_field_value_stringify_at (dm, row, field_name));
-               }
+       g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), FALSE);
+
+       priv = GTK_FORM_FIELD_INTEGER_GET_PRIVATE (GTK_FORM_FIELD_INTEGER (field));
+
+       field_name = gtk_form_field_get_field_name (field);
+
+       value = gdaex_data_model_get_field_value_stringify_at (dm, row, field_name);
+
+       ret = gtk_form_field_integer_set_value_stringify (field, value);
+
+       priv->original_value = strtol (value, NULL, 10);
 
        return ret;
 }
index 68ce8e08d0322ce3da3a3a41bcfeb9c06253a9ac..63a43ba356a2a494e3e7a86920f26895dfdb765d 100644 (file)
@@ -60,6 +60,8 @@ gboolean gtk_form_field_integer_clear (GtkFormField *field);
 
 gboolean gtk_form_field_integer_is_empty (GtkFormField *field);
 
+gboolean gtk_form_field_integer_is_changed (GtkFormField *field);
+
 gboolean gtk_form_field_integer_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row);
 
 
index 263e45897e3f09dd0ec422bd18af2f4fc1efe46d..23d467e4b580ebf7deaf4bea5b695ba4b144bebb 100644 (file)
@@ -45,6 +45,7 @@ typedef struct _GtkFormFieldTextPrivate GtkFormFieldTextPrivate;
 struct _GtkFormFieldTextPrivate
        {
                gchar *default_value;
+               gchar *original_value;
        };
 
 
@@ -64,6 +65,7 @@ gtk_form_field_text_class_init (GtkFormFieldTextClass *klass)
        field_class->get_value_sql = gtk_form_field_text_get_value_sql;
        field_class->clear = gtk_form_field_text_clear;
        field_class->is_empty = gtk_form_field_text_is_empty;
+       field_class->is_changed = gtk_form_field_text_is_changed;
        field_class->set_from_datamodel = gtk_form_field_text_set_from_datamodel;
 
        g_object_class_install_property (object_class, PROP_DEFAULT,
@@ -94,7 +96,7 @@ GtkFormField
 
 /**
  * gtk_form_field_text_get_value_stringify:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
@@ -118,7 +120,7 @@ const gchar
 
 /**
  * gtk_form_field_text_get_value:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const GValue
@@ -140,7 +142,7 @@ const GValue
 
 /**
  * gtk_form_field_text_get_value_sql:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 const gchar
@@ -159,7 +161,7 @@ const gchar
 
 /**
  * gtk_form_field_text_clear:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
@@ -171,12 +173,14 @@ gtk_form_field_text_clear (GtkFormField *field)
 
        ret = gtk_form_field_text_set_value_stringify (field, priv->default_value);
 
+       priv->original_value = g_strdup (priv->default_value);
+
        return ret;
 }
 
 /**
  * gtk_form_field_text_is_empty:
- * @field:
+ * @field: a #GtkFormField object.
  *
  */
 gboolean
@@ -195,10 +199,33 @@ gtk_form_field_text_is_empty (GtkFormField *field)
        return ret;
 }
 
+/**
+ * gtk_form_field_text_is_changed:
+ * @field: a #GtkFormField object.
+ *
+ */
+gboolean
+gtk_form_field_text_is_changed (GtkFormField *field)
+{
+       gboolean ret = FALSE;
+       GtkFormFieldTextPrivate *priv;
+       const gchar *value;
+
+       g_return_val_if_fail (IS_GTK_FORM_FIELD_TEXT (field), FALSE);
+
+       priv = GTK_FORM_FIELD_TEXT_GET_PRIVATE (GTK_FORM_FIELD_TEXT (field));
+
+       value = gtk_form_field_text_get_value_stringify (field);
+
+       ret = (g_strcmp0 (priv->original_value, value) != 0);
+
+       return ret;
+}
+
 /**
  * gtk_form_field_text_set_from_datamodel:
- * @field:
- * @dm:
+ * @field: a #GtkFormField object.
+ * @dm: a #GdaDataModel object.
  * @row:
  *
  */
@@ -206,19 +233,25 @@ gboolean
 gtk_form_field_text_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row)
 {
        gboolean ret = FALSE;
-       const gchar *field_name = gtk_form_field_get_field_name (field);
+       GtkFormFieldTextPrivate *priv;
+       gchar *strret;
+       const gchar *field_name;
+
+       g_return_val_if_fail (IS_GTK_FORM_FIELD_TEXT (field), FALSE);
+       g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), FALSE);
+
+       priv = GTK_FORM_FIELD_TEXT_GET_PRIVATE (GTK_FORM_FIELD_TEXT (field));
 
-       if (dm != NULL)
+       field_name = gtk_form_field_get_field_name (field);
+
+       strret = gdaex_data_model_get_field_value_stringify_at (dm, row, field_name);
+       if (strret == NULL)
                {
-                       gchar *strret;
-
-                       strret = gdaex_data_model_get_field_value_stringify_at (dm, row, field_name);
-                       if (strret == NULL)
-                               {
-                                       strret = g_strdup ("");
-                               }
-                       ret = gtk_form_field_text_set_value_stringify (field, strret);
+                       strret = g_strdup ("");
                }
+       ret = gtk_form_field_text_set_value_stringify (field, strret);
+
+       priv->original_value = g_strdup (strret);
 
        return ret;
 }
index 4ec5b4433f6b6a3da4faca6e6add4316996ac2c4..a31788995d20ba82579a70b9473cd53b6844ec54 100644 (file)
@@ -60,6 +60,8 @@ gboolean gtk_form_field_text_clear (GtkFormField *field);
 
 gboolean gtk_form_field_text_is_empty (GtkFormField *field);
 
+gboolean gtk_form_field_text_is_changed (GtkFormField *field);
+
 gboolean gtk_form_field_text_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row);
 
 
index db5034f38f5d44f81f31f8fc9a749270b19d9742..583c55ad02174c53db2c387ebbbf8fbc6d99b076 100644 (file)
@@ -678,15 +678,18 @@ gtk_form_clear (GtkForm *form)
 gboolean
 gtk_form_check (GtkForm *form)
 {
+       GtkFormPrivate *priv;
+       GSList *fields;
        GtkFormField *field;
+
        gboolean ret = TRUE;
        gboolean obl = FALSE;
 
        g_return_val_if_fail (IS_GTK_FORM (form), FALSE);
 
-       GtkFormPrivate *priv = GTK_FORM_GET_PRIVATE (form);
+       priv = GTK_FORM_GET_PRIVATE (form);
 
-       GSList *fields = priv->fields;
+       fields = priv->fields;
 
        while (fields != NULL)
                {
@@ -713,6 +716,43 @@ gtk_form_check (GtkForm *form)
        return ret;
 }
 
+/**
+ * gtk_form_is_changed:
+ * @form:
+ *
+ * Returns: TRUE if the values in the form are changed since last calling to
+ * gtk_form_clear() or gtk_form_fill_from_datamodel().
+ */
+gboolean
+gtk_form_is_changed (GtkForm *form)
+{
+       GtkFormPrivate *priv;
+       GSList *fields;
+       GtkFormField *field;
+
+       gboolean ret;
+
+       g_return_val_if_fail (IS_GTK_FORM (form), FALSE);
+
+       ret = FALSE;
+
+       priv = GTK_FORM_GET_PRIVATE (form);
+
+       fields = priv->fields;
+
+       while (fields != NULL)
+               {
+                       field = (GtkFormField *)fields->data;
+
+                       ret = gtk_form_field_is_changed (field);
+                       if (ret) break;
+
+                       fields = g_slist_next (fields);
+               }
+
+       return ret;
+}
+
 /**
  * gtk_form_set_sensitive:
  * @form: a #GtkForm object.
index 8c7c142ba3e1acd073cd46c2f2fd17c340995bf4..9bc1a8ee43b3b8aa9722107f44409f0afcc352e7 100644 (file)
@@ -22,7 +22,6 @@
 #include <glib.h>
 #include <libxml/tree.h>
 
-
 #include "field.h"
 #include "widget.h"
 #include "key.h"
@@ -79,6 +78,8 @@ gboolean gtk_form_clear (GtkForm *form);
 
 gboolean gtk_form_check (GtkForm *form);
 
+gboolean gtk_form_is_changed (GtkForm *form);
+
 void gtk_form_set_sensitive (GtkForm *form, gboolean sensitive);
 void gtk_form_set_editable (GtkForm *form, gboolean editable);