From 597549b89be293ebae929e8bd7b1af5062e5a013 Mon Sep 17 00:00:00 2001
From: Andrea Zagli <azagli@libero.it>
Date: Fri, 4 Sep 2009 20:03:18 +0200
Subject: [PATCH] Bugfixes and added function
 GtkFormFieldDateTime::get_str_from_tm.

---
 docs/reference/libgtkform-decl-list.txt    |  13 ++-
 docs/reference/libgtkform-decl.txt         |  62 ++++++++++++-
 docs/reference/libgtkform-undeclared.txt   |   1 +
 docs/reference/libgtkform-undocumented.txt |  19 +++-
 docs/reference/libgtkform-unused.txt       |  12 +++
 docs/reference/tmpl/field.sgml             |   9 --
 docs/reference/tmpl/form.sgml              |   5 +
 docs/reference/tmpl/key.sgml               |   1 +
 docs/reference/tmpl/libgtkform-unused.sgml |   8 ++
 src/fielddatetime.c                        | 102 +++++++++++++++++----
 src/fielddatetime.h                        |   1 +
 11 files changed, 197 insertions(+), 36 deletions(-)

diff --git a/docs/reference/libgtkform-decl-list.txt b/docs/reference/libgtkform-decl-list.txt
index 7be037d..3811719 100644
--- a/docs/reference/libgtkform-decl-list.txt
+++ b/docs/reference/libgtkform-decl-list.txt
@@ -50,6 +50,7 @@ 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_as_origin
 gtk_form_field_boolean_set_from_datamodel
 gtk_form_field_boolean_str_to_boolean
 </SECTION>
@@ -69,6 +70,8 @@ gtk_form_widget_new
 gtk_form_widget_set_from_gtkbuilder
 gtk_form_widget_get_widget
 gtk_form_widget_get_widget_name
+gtk_form_widget_get_label
+gtk_form_widget_set_label
 gtk_form_widget_get_value_stringify
 gtk_form_widget_set_value_stringify
 gtk_form_widget_set_editable
@@ -92,6 +95,7 @@ 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_as_origin
 gtk_form_field_text_set_from_datamodel
 </SECTION>
 
@@ -113,8 +117,10 @@ 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_as_origin
 gtk_form_field_datetime_set_from_datamodel
 gtk_form_field_datetime_get_tm_from_str
+gtk_form_field_datetime_get_str_from_tm
 </SECTION>
 
 <SECTION>
@@ -151,6 +157,7 @@ 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_as_origin
 gtk_form_field_float_set_from_datamodel
 </SECTION>
 
@@ -205,13 +212,14 @@ gtk_form_field_get_type
 gtk_form_field_new
 gtk_form_field_new_from_gtk_form_widget
 gtk_form_field_get_field_name
-gtk_form_field_get_gtk_form_widget
+gtk_form_field_get_form_widget
 gtk_form_field_get_value_stringify
 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_as_origin
 gtk_form_field_set_from_datamodel
 </SECTION>
 
@@ -244,7 +252,9 @@ gtk_form_get_objects_by_name
 gtk_form_clear
 gtk_form_check
 gtk_form_is_changed
+gtk_form_set_as_origin
 gtk_form_set_sensitive
+gtk_form_set_sensitive_by_name
 gtk_form_set_editable
 GtkFormSqlType
 gtk_form_get_sql
@@ -303,6 +313,7 @@ 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_as_origin
 gtk_form_field_integer_set_from_datamodel
 </SECTION>
 
diff --git a/docs/reference/libgtkform-decl.txt b/docs/reference/libgtkform-decl.txt
index 49ca085..e418092 100644
--- a/docs/reference/libgtkform-decl.txt
+++ b/docs/reference/libgtkform-decl.txt
@@ -221,6 +221,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_boolean_set_as_origin</NAME>
+<RETURNS>void </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_boolean_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -306,6 +311,16 @@ GtkFormWidget *fwidget
 GtkFormWidget *fwidget
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_widget_get_label</NAME>
+<RETURNS>GtkWidget *</RETURNS>
+GtkFormWidget *fwidget
+</FUNCTION>
+<FUNCTION>
+<NAME>gtk_form_widget_set_label</NAME>
+<RETURNS>void </RETURNS>
+GtkFormWidget *fwidget, GtkLabel *label
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_widget_get_value_stringify</NAME>
 <RETURNS>const gchar *</RETURNS>
 GtkFormWidget *fwidget
@@ -405,6 +420,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_text_set_as_origin</NAME>
+<RETURNS>void </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_text_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -494,6 +514,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_datetime_set_as_origin</NAME>
+<RETURNS>void </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_datetime_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -503,6 +528,11 @@ GtkFormField *field, GdaDataModel *dm, gint row
 <RETURNS>struct tm *</RETURNS>
 const gchar *str
 </FUNCTION>
+<FUNCTION>
+<NAME>gtk_form_field_datetime_get_str_from_tm</NAME>
+<RETURNS>gchar *</RETURNS>
+struct tm *datetime, const gchar *format
+</FUNCTION>
 <MACRO>
 <NAME>TYPE_GTK_FORM_WIDGET_LABEL</NAME>
 #define TYPE_GTK_FORM_WIDGET_LABEL                 (gtk_form_widget_label_get_type ())
@@ -652,6 +682,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_float_set_as_origin</NAME>
+<RETURNS>void </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_float_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -728,7 +763,7 @@ GtkFormKey *gtk_form_key, ...
 <FUNCTION>
 <NAME>gtk_form_key_check</NAME>
 <RETURNS>gboolean </RETURNS>
-GtkFormKey *gtk_form_key
+GtkFormKey *gtk_form_key, GtkFormWidget **form_widget
 </FUNCTION>
 <FUNCTION>
 <NAME>gtk_form_key_get_sql</NAME>
@@ -859,6 +894,7 @@ struct _GtkFormFieldClass
 		gboolean (*clear) (GtkFormField *field);
 		gboolean (*is_empty) (GtkFormField *field);
 		gboolean (*is_changed) (GtkFormField *field);
+		void (*set_as_origin) (GtkFormField *field);
 		gboolean (*set_from_datamodel) (GtkFormField *field, GdaDataModel *dm, gint row);
 	};
 </STRUCT>
@@ -883,7 +919,7 @@ GtkFormWidget *fwidget
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
-<NAME>gtk_form_field_get_gtk_form_widget</NAME>
+<NAME>gtk_form_field_get_form_widget</NAME>
 <RETURNS>GtkFormWidget *</RETURNS>
 GtkFormField *field
 </FUNCTION>
@@ -918,6 +954,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_set_as_origin</NAME>
+<RETURNS>void </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
@@ -1054,7 +1095,7 @@ GtkForm *form
 <FUNCTION>
 <NAME>gtk_form_check</NAME>
 <RETURNS>gboolean </RETURNS>
-GtkForm *form
+GtkForm *form, gboolean with_key,GtkFormWidget **form_widget,gboolean show_error_dialog, GtkWidget *parent_window,gboolean set_focus
 </FUNCTION>
 <FUNCTION>
 <NAME>gtk_form_is_changed</NAME>
@@ -1062,11 +1103,21 @@ GtkForm *form
 GtkForm *form
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_set_as_origin</NAME>
+<RETURNS>void </RETURNS>
+GtkForm *form
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_set_sensitive</NAME>
 <RETURNS>void </RETURNS>
 GtkForm *form, gboolean sensitive
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_set_sensitive_by_name</NAME>
+<RETURNS>void </RETURNS>
+GtkForm *form, gboolean sensitive, ...
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_set_editable</NAME>
 <RETURNS>void </RETURNS>
 GtkForm *form, gboolean editable
@@ -1314,6 +1365,11 @@ GtkFormField *field
 GtkFormField *field
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_form_field_integer_set_as_origin</NAME>
+<RETURNS>void </RETURNS>
+GtkFormField *field
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_form_field_integer_set_from_datamodel</NAME>
 <RETURNS>gboolean </RETURNS>
 GtkFormField *field, GdaDataModel *dm, gint row
diff --git a/docs/reference/libgtkform-undeclared.txt b/docs/reference/libgtkform-undeclared.txt
index a47720b..fe0d0b1 100644
--- a/docs/reference/libgtkform-undeclared.txt
+++ b/docs/reference/libgtkform-undeclared.txt
@@ -1,2 +1,3 @@
+gtk_form_field_get_gtk_form_widget
 gtk_form_get_field_from_name
 gtk_form_get_widget_from_name
diff --git a/docs/reference/libgtkform-undocumented.txt b/docs/reference/libgtkform-undocumented.txt
index a85e31d..fcb0787 100644
--- a/docs/reference/libgtkform-undocumented.txt
+++ b/docs/reference/libgtkform-undocumented.txt
@@ -1,7 +1,7 @@
-6% symbol docs coverage.
-17 symbols documented.
-2 symbols incomplete.
-261 not documented.
+7% symbol docs coverage.
+19 symbols documented.
+1 symbols incomplete.
+271 not documented.
 
 
 GTK_FORM
@@ -121,10 +121,12 @@ gtk_form_field_boolean_get_value_sql
 gtk_form_field_boolean_get_value_stringify
 gtk_form_field_boolean_is_empty
 gtk_form_field_boolean_new
+gtk_form_field_boolean_set_as_origin
 gtk_form_field_boolean_set_from_datamodel
 gtk_form_field_boolean_str_to_boolean (value)
 gtk_form_field_clear
 gtk_form_field_datetime_clear
+gtk_form_field_datetime_get_str_from_tm
 gtk_form_field_datetime_get_tm_from_str
 gtk_form_field_datetime_get_type
 gtk_form_field_datetime_get_value
@@ -133,6 +135,8 @@ 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_replace_str
+gtk_form_field_datetime_set_as_origin
 gtk_form_field_datetime_set_from_datamodel
 gtk_form_field_float_clear
 gtk_form_field_float_get_type
@@ -142,9 +146,9 @@ 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_as_origin
 gtk_form_field_float_set_from_datamodel
 gtk_form_field_get_field_name
-gtk_form_field_get_gtk_form_widget (Returns)
 gtk_form_field_get_str_format
 gtk_form_field_get_type
 gtk_form_field_get_value
@@ -158,6 +162,7 @@ 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_as_origin
 gtk_form_field_integer_set_from_datamodel
 gtk_form_field_is_changed
 gtk_form_field_is_empty
@@ -172,6 +177,7 @@ 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_as_origin
 gtk_form_field_text_set_from_datamodel
 gtk_form_filed_boolean_is_changed
 gtk_form_fill_from_datamodel
@@ -200,6 +206,7 @@ gtk_form_remove_field
 gtk_form_set_editable
 gtk_form_set_key
 gtk_form_set_sensitive
+gtk_form_set_sensitive_by_name
 gtk_form_set_table
 gtk_form_widget_check_get_type
 gtk_form_widget_check_get_value_stringify
@@ -216,6 +223,7 @@ gtk_form_widget_entry_get_value_stringify
 gtk_form_widget_entry_new
 gtk_form_widget_entry_set_editable
 gtk_form_widget_entry_set_value_stringify
+gtk_form_widget_get_label
 gtk_form_widget_get_type
 gtk_form_widget_get_value_stringify
 gtk_form_widget_get_widget
@@ -227,6 +235,7 @@ gtk_form_widget_label_set_value_stringify
 gtk_form_widget_new
 gtk_form_widget_set_editable
 gtk_form_widget_set_from_gtkbuilder
+gtk_form_widget_set_label
 gtk_form_widget_set_value_stringify
 gtk_form_widget_spin_get_type
 gtk_form_widget_spin_get_value_stringify
diff --git a/docs/reference/libgtkform-unused.txt b/docs/reference/libgtkform-unused.txt
index bac144f..ba1e695 100644
--- a/docs/reference/libgtkform-unused.txt
+++ b/docs/reference/libgtkform-unused.txt
@@ -13,13 +13,21 @@ GtkFormWidgetEntryClass
 GtkFormWidgetLabelClass
 GtkFormWidgetSpinClass
 GtkFormWidgetTextviewClass
+gtk_form_field_boolean_set_as_origin
 gtk_form_field_boolean_str_to_boolean
+gtk_form_field_datetime_get_str_from_tm
 gtk_form_field_datetime_get_tm_from_str
 gtk_form_field_datetime_is_changed
+gtk_form_field_datetime_set_as_origin
 gtk_form_field_float_is_changed
+gtk_form_field_float_set_as_origin
+gtk_form_field_get_form_widget
 gtk_form_field_integer_is_changed
+gtk_form_field_integer_set_as_origin
 gtk_form_field_is_changed
+gtk_form_field_set_as_origin
 gtk_form_field_text_is_changed
+gtk_form_field_text_set_as_origin
 gtk_form_filed_boolean_is_changed
 gtk_form_get_form_field_from_name
 gtk_form_get_form_widget_from_name
@@ -31,5 +39,9 @@ gtk_form_get_widgets
 gtk_form_is_changed
 gtk_form_new_from_file
 gtk_form_new_from_xml
+gtk_form_set_as_origin
 gtk_form_set_key
+gtk_form_set_sensitive_by_name
 gtk_form_set_table
+gtk_form_widget_get_label
+gtk_form_widget_set_label
diff --git a/docs/reference/tmpl/field.sgml b/docs/reference/tmpl/field.sgml
index a14e282..88dbc6c 100644
--- a/docs/reference/tmpl/field.sgml
+++ b/docs/reference/tmpl/field.sgml
@@ -119,15 +119,6 @@ FormField
 @Returns: 
 
 
-<!-- ##### FUNCTION gtk_form_field_get_gtk_form_widget ##### -->
-<para>
-
-</para>
-
-@field: 
-@Returns: 
-
-
 <!-- ##### FUNCTION gtk_form_field_get_value_stringify ##### -->
 <para>
 
diff --git a/docs/reference/tmpl/form.sgml b/docs/reference/tmpl/form.sgml
index 9871812..5f05ef9 100644
--- a/docs/reference/tmpl/form.sgml
+++ b/docs/reference/tmpl/form.sgml
@@ -141,6 +141,11 @@ Form
 </para>
 
 @form: 
+@with_key: 
+@form_widget: 
+@show_error_dialog: 
+@parent_window: 
+@set_focus: 
 @Returns: 
 
 
diff --git a/docs/reference/tmpl/key.sgml b/docs/reference/tmpl/key.sgml
index af9f081..f16cbd3 100644
--- a/docs/reference/tmpl/key.sgml
+++ b/docs/reference/tmpl/key.sgml
@@ -122,6 +122,7 @@ FormKey
 </para>
 
 @gtk_form_key: 
+@form_widget: 
 @Returns: 
 
 
diff --git a/docs/reference/tmpl/libgtkform-unused.sgml b/docs/reference/tmpl/libgtkform-unused.sgml
index 6d3df27..c3b0b85 100644
--- a/docs/reference/tmpl/libgtkform-unused.sgml
+++ b/docs/reference/tmpl/libgtkform-unused.sgml
@@ -908,6 +908,14 @@
 @value: 
 @Returns: 
 
+<!-- ##### FUNCTION gtk_form_field_get_gtk_form_widget ##### -->
+<para>
+
+</para>
+
+@field: 
+@Returns: 
+
 <!-- ##### FUNCTION gtk_form_get_field_from_name ##### -->
 <para>
 
diff --git a/src/fielddatetime.c b/src/fielddatetime.c
index e63ad50..5af6a41 100644
--- a/src/fielddatetime.c
+++ b/src/fielddatetime.c
@@ -46,6 +46,10 @@ static gboolean gtk_form_field_datetime_set_value_stringify (GtkFormField *field
 
 static gchar *gtk_form_field_get_str_format (GtkFormField *field);
 
+static gchar *gtk_form_field_datetime_str_replace (const gchar *string,
+                                      const gchar *origin,
+                                      const gchar *replace);
+
 #define GTK_FORM_FIELD_DATETIME_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_GTK_FORM_FIELD_DATETIME, GtkFormFieldDateTimePrivate))
 
 typedef struct _GtkFormFieldDateTimePrivate GtkFormFieldDateTimePrivate;
@@ -53,6 +57,7 @@ struct _GtkFormFieldDateTimePrivate
 	{
 		struct tm *default_value;
 		struct tm *original_value;
+
 		gint type;
 	};
 
@@ -149,15 +154,12 @@ const GValue
 {
 	struct tm *datetime;
 	GValue *ret;
-	const gchar *format;
 	const gchar *value;
 
 	g_return_val_if_fail (IS_GTK_FORM_FIELD_DATETIME (field), NULL);
 
 	ret = NULL;
 
-	format = gtk_form_field_get_str_format (field);
-
 	value = gtk_form_field_datetime_get_value_stringify (field);
 
 	datetime = gtk_form_field_datetime_get_tm_from_str (value);
@@ -196,15 +198,13 @@ const gchar
 			datetime = gtk_form_field_datetime_get_tm_from_str (value);
 			if (datetime != NULL)
 				{
-					char *buf;
-
-					buf = g_malloc (20);
+					gchar *value;
 
-					if (strftime (buf, 20, format, datetime) != 0)
+					value = gtk_form_field_datetime_get_str_from_tm (datetime, format);
+					if (value != NULL)
 						{
-							ret = g_strconcat ("'", buf, "'", NULL);
+							ret = g_strconcat ("'", value, "'", NULL);
 						}
-					g_free (buf);
 				}
 		}
 
@@ -232,13 +232,12 @@ gtk_form_field_datetime_clear (GtkFormField *field)
 
 	if (priv->default_value != NULL)
 		{
-			char *buf;
+			gchar *value;
 
-			buf = malloc (30);
-
-			if (strftime (buf, 30, format, priv->default_value) != '\0')
+			value = gtk_form_field_datetime_get_str_from_tm (priv->default_value, format);
+			if (value != NULL)
 				{
-					ret = gtk_form_field_datetime_set_value_stringify (field, buf);
+					ret = gtk_form_field_datetime_set_value_stringify (field, value);
 				}
 		}
 	else
@@ -359,7 +358,6 @@ gtk_form_field_datetime_set_from_datamodel (GtkFormField *field, GdaDataModel *d
 struct tm
 *gtk_form_field_datetime_get_tm_from_str (const gchar *str)
 {
-
 	/* TO DO
 	 * check if it is a valid date/time
      */
@@ -412,6 +410,44 @@ struct tm
 	return tm;
 }
 
+/**
+ * gtk_form_field_datetime_get_str_from_tm:
+ * @datetime: a tm struct.
+ * @format:
+ *
+ * Returns: a string representation of @datetime based on the format in @format.
+ * It interprets a very little subset of format identifier from strftime.
+ * %Y: the year with 4 digits.
+ * %m: the month with 2 digits.
+ * %d: the day with 2 digits.
+ * %H: the hours with 2 digits 00-24.
+ * %M: the minutes with 2 digits 00-59.
+ * %S: the seconds with 2 digits 00-59.
+ */
+gchar
+*gtk_form_field_datetime_get_str_from_tm (struct tm *datetime,
+                                          const gchar *format)
+{
+	gchar *ret;
+
+	g_return_val_if_fail (datetime != NULL, "");
+
+	ret = gtk_form_field_datetime_str_replace (format, "%Y",
+	                                           g_strdup_printf ("%04u", datetime->tm_year + 1900));
+	ret = gtk_form_field_datetime_str_replace (ret, "%m",
+	                                           g_strdup_printf ("%02u", datetime->tm_mon + 1));
+	ret = gtk_form_field_datetime_str_replace (ret, "%d",
+	                                           g_strdup_printf ("%02u", datetime->tm_mday));
+	ret = gtk_form_field_datetime_str_replace (ret, "%H",
+	                                           g_strdup_printf ("%02u", datetime->tm_hour));
+	ret = gtk_form_field_datetime_str_replace (ret, "%M",
+	                                           g_strdup_printf ("%02u", datetime->tm_min));
+	ret = gtk_form_field_datetime_str_replace (ret, "%S",
+	                                           g_strdup_printf ("%02u", datetime->tm_sec));
+
+	return ret;
+}
+
 /* PRIVATE */
 static void
 gtk_form_field_datetime_set_property (GObject *object,
@@ -495,17 +531,47 @@ static gchar
 	switch (priv->type)
 		{
 			case GTK_FORM_FIELD_DATETIME_TYPE_DATETIME:
-				format = g_strdup ("%F %T");
+				format = g_strdup ("%Y-%m-%d %H-%M-%S");
 				break;
 
 			case GTK_FORM_FIELD_DATETIME_TYPE_DATE:
-				format = g_strdup ("%F");
+				format = g_strdup ("%Y-%m-%d");
 				break;
 
 			case GTK_FORM_FIELD_DATETIME_TYPE_TIME:
-				format = g_strdup ("%T");
+				format = g_strdup ("%H-%M-%S");
 				break;
 		}
 
 	return format;
 }
+
+/**
+ * gtk_form_field_datetime_replace_str:
+ * @string: the string where make the replace.
+ * @origin: the string to replace.
+ * @replace: the string to insert.
+ *
+ * Returns: a string with replaced string.
+ */
+static gchar
+*gtk_form_field_datetime_str_replace (const gchar *string,
+                                      const gchar *origin,
+                                      const gchar *replace)
+{
+	gchar *ret;
+	gchar *p;
+
+	p = g_strstr_len (string, -1, origin);
+
+	if (p == NULL)
+		{
+			return (gchar *)string;
+		}
+
+	ret = g_strndup (string, p - string);
+
+	ret = g_strdup_printf ("%s%s%s", ret, replace, p + strlen (origin));
+
+	return ret;
+}
diff --git a/src/fielddatetime.h b/src/fielddatetime.h
index b2007da..f56f5b5 100644
--- a/src/fielddatetime.h
+++ b/src/fielddatetime.h
@@ -73,6 +73,7 @@ void gtk_form_field_datetime_set_as_origin (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);
+gchar *gtk_form_field_datetime_get_str_from_tm (struct tm *datetime, const gchar *format);
 
 
 G_END_DECLS
-- 
2.49.0