From 9ba72dc3a4d7c9677c29ad64d078b48ffa6f6b6e Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Thu, 30 Jul 2009 19:07:55 +0200 Subject: [PATCH] Finished to implement definition load from xml file. --- Makefile.am | 21 +++++++++++++ data/gtkform.dtd | 4 +-- src/fielddatetime.c | 49 ++++++++++++++++++++---------- src/form.c | 73 +++++++++++++++++++++++++++++++++++++++++---- test/test.gui | 4 +-- test/test.xml | 17 +++++++++++ 6 files changed, 143 insertions(+), 25 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6fb292a..0e206f1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,3 +8,24 @@ EXTRA_DIST = libgtkform.pc.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libgtkform.pc + +distclean-local: + if test "$(srcdir)" = "."; then :; else \ + rm -f ChangeLog; \ + fi + +ChangeLog: + @echo Creating $@ + @if test -d "$(srcdir)/.git"; then \ + (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat -M -C --name-status --date=short --no-color) | fmt --split-only > $@.tmp \ + && mv -f $@.tmp $@ \ + || ($(RM) $@.tmp; \ + echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ + (test -f $@ || echo git-log is required to generate this file >> $@)); \ + else \ + test -f $@ || \ + (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ + echo A git checkout and git-log is required to generate this file >> $@); \ + fi + +.PHONY: ChangeLog diff --git a/data/gtkform.dtd b/data/gtkform.dtd index cd38f83..daff593 100644 --- a/data/gtkform.dtd +++ b/data/gtkform.dtd @@ -13,7 +13,7 @@ - + - + diff --git a/src/fielddatetime.c b/src/fielddatetime.c index 452fa11..b167549 100644 --- a/src/fielddatetime.c +++ b/src/fielddatetime.c @@ -109,7 +109,7 @@ GtkFormField /** * gtk_form_field_datetime_get_value_stringify: - * @field: + * @field: a #GtkFormField object. * */ const gchar @@ -133,7 +133,7 @@ const gchar /** * gtk_form_field_datetime_get_value: - * @field: + * @field: a #GtkFormField object. * */ const GValue @@ -141,6 +141,9 @@ const GValue { struct tm datetime; GValue *ret = NULL; + + g_return_val_if_fail (IS_GTK_FORM_FIELD_DATETIME (field), NULL); + const gchar *format = gtk_form_field_get_str_format (field); const gchar *value = gtk_form_field_datetime_get_value_stringify (field); @@ -157,15 +160,21 @@ const GValue /** * gtk_form_field_datetime_get_value_sql: - * @field: + * @field: a #GtkFormField object. * */ const gchar *gtk_form_field_datetime_get_value_sql (GtkFormField *field) { - const gchar *ret = NULL; - const gchar *value = gtk_form_field_datetime_get_value_stringify (field); - const gchar *format = gtk_form_field_get_str_format (field); + const gchar *ret; + const gchar *value; + const gchar *format; + + g_return_val_if_fail (IS_GTK_FORM_FIELD_DATETIME (field), NULL); + + ret = NULL; + value = gtk_form_field_datetime_get_value_stringify (field); + format = gtk_form_field_get_str_format (field); if (value != NULL) { @@ -175,12 +184,13 @@ const gchar { char *buf; - buf = malloc (100); + buf = g_malloc (20); - if (strftime (buf, 100, format, &datetime) != 0) + if (strftime (buf, 20, format, &datetime) != 0) { ret = g_strconcat ("'", buf, "'", NULL); } + g_free (buf); } } @@ -189,16 +199,22 @@ const gchar /** * gtk_form_field_datetime_clear: - * @field: + * @field: a #GtkFormField object. * */ gboolean gtk_form_field_datetime_clear (GtkFormField *field) { - gboolean ret = FALSE; - gchar *format = gtk_form_field_get_str_format (field); + gboolean ret; + GtkFormFieldDateTimePrivate *priv; + gchar *format; - GtkFormFieldDateTimePrivate *priv = GTK_FORM_FIELD_DATETIME_GET_PRIVATE (field); + g_return_val_if_fail (IS_GTK_FORM_FIELD_DATETIME (field), FALSE); + + format = gtk_form_field_get_str_format (field); + + priv = GTK_FORM_FIELD_DATETIME_GET_PRIVATE (field); + ret = FALSE; if (priv->default_value != NULL) { @@ -217,7 +233,7 @@ gtk_form_field_datetime_clear (GtkFormField *field) /** * gtk_form_field_datetime_is_empty: - * @field: + * @field: a #GtkFormField object. * */ gboolean @@ -230,7 +246,7 @@ gtk_form_field_datetime_is_empty (GtkFormField *field) /** * gtk_form_field_datetime_set_from_datamodel: - * @field: + * @field: a #GtkFormField object. * @dm: * @row: * @@ -239,6 +255,9 @@ gboolean gtk_form_field_datetime_set_from_datamodel (GtkFormField *field, GdaDataModel *dm, gint row) { gboolean ret = FALSE; + + g_return_val_if_fail (IS_GTK_FORM_FIELD_DATETIME (field), FALSE); + const gchar *field_name = gtk_form_field_get_field_name (field); if (dm != NULL) @@ -320,7 +339,7 @@ gtk_form_field_datetime_set_value_stringify (GtkFormField *field, const gchar *v /** * gtk_form_field_get_str_format: - * @field: + * @field: a #GtkFormField object. * */ static gchar diff --git a/src/form.c b/src/form.c index d4e4423..8885636 100644 --- a/src/form.c +++ b/src/form.c @@ -21,6 +21,7 @@ #endif #include +#include #include @@ -289,21 +290,83 @@ GtkForm node_field = node_widget->children; while (node_field != NULL) { + prop = (gchar *)xmlNodeGetContent (node_field); if (xmlStrcmp (node_field->name, (const xmlChar *)"obligatory") == 0) { - prop = (gchar *)xmlNodeGetContent (node_field); g_object_set (G_OBJECT (field), "obligatory", gtk_form_field_boolean_str_to_boolean (prop), NULL); } - else if (xmlStrcmp (node_field->name, (const xmlChar *)"default-value") == 0) + else if (xmlStrcmp (node_field->name, (const xmlChar *)"default") == 0) { - /*g_object_set (G_OBJECT (field), - "default-value", name, - NULL);*/ + if (strcmp (type, "boolean") == 0) + { + gboolean value = gtk_form_field_boolean_str_to_boolean (prop); + g_object_set (G_OBJECT (field), "default", value, NULL); + } + else if (strcmp (type, "datetime") == 0) + { + struct tm *datetime; + + if (strcmp (prop, "now") == 0) + { + time_t time_now; + + time (&time_now); + datetime = localtime (&time_now); + g_object_set (G_OBJECT (field), "default", datetime, NULL); + } + else + { + datetime = g_malloc (sizeof (struct tm)); + if (strptime (prop, "%F %T", datetime) != NULL) + { + g_object_set (G_OBJECT (field), "default", datetime, NULL); + } + else + { + datetime = g_malloc0 (sizeof (struct tm)); + if (strptime (prop, "%F", datetime) != NULL) + { + g_object_set (G_OBJECT (field), "default", datetime, NULL); + } + else + { + datetime = g_malloc0 (sizeof (struct tm)); + if (strptime (prop, "%T", datetime) != NULL) + { + g_object_set (G_OBJECT (field), "default", datetime, NULL); + } + } + } + } + } + else if (strcmp (type, "float") == 0) + { + gfloat value = g_strtod (prop, NULL); + g_object_set (G_OBJECT (field), "default", value, NULL); + } + else if (strcmp (type, "integer") == 0) + { + gint value = strtol (prop, NULL, 10); + g_object_set (G_OBJECT (field), "default", value, NULL); + } + else if (strcmp (type, "text") == 0) + { + g_object_set (G_OBJECT (field), "default", prop, NULL); + } } else if (xmlStrcmp (node_field->name, (const xmlChar *)"is-key") == 0) { + if (gtk_form_field_boolean_str_to_boolean (prop)) + { + if (!IS_GTK_FORM_KEY (priv->key)) + { + priv->key = gtk_form_key_new (); + } + + gtk_form_key_add_field (priv->key, field); + } } node_field = node_field->next; diff --git a/test/test.gui b/test/test.gui index 7f28f99..7b33d21 100644 --- a/test/test.gui +++ b/test/test.gui @@ -470,14 +470,12 @@ 1 100 1 - 10 - 10 + 1 1 100 1 10 - 10 diff --git a/test/test.xml b/test/test.xml index 82d046c..757b853 100644 --- a/test/test.xml +++ b/test/test.xml @@ -6,33 +6,40 @@ + 15 + t + default value TRUE + entry default value + 23 + 12.45 0 + 3 @@ -43,6 +50,16 @@ + the default value +for this text view +with also line feed +and t a b + + + + + + 13:20:44 -- 2.49.0