From: Andrea Zagli Date: Tue, 15 Feb 2011 15:12:58 +0000 (+0100) Subject: Aggiunte le funzioni Solipa::gtk_tree_model:get:value*, X-Git-Tag: Pre_EvolutionDataServer_2.32~3 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=19d19d6d0012905b5114ded0748ba065e4fed949;p=solipa%2Flibsolipa Aggiunte le funzioni Solipa::gtk_tree_model:get:value*, Solipa::unformat_money e Solipa::tm_to_sql. --- diff --git a/src/utils.c b/src/utils.c index cdfb92e..7b52839 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Andrea Zagli + * Copyright (C) 2010-2011 Andrea Zagli * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,12 +20,17 @@ #include #endif +#include + #include #include #include #include +#include +#include + #include "solipa.h" #include "utils.h" @@ -543,6 +548,52 @@ gchar } } + if (with_currency_symbol) + { + ret = g_strconcat ("€ ", ret, NULL); + } + + g_regex_unref (regex); + + return ret; +} + +gdouble +solipa_unformat_money (const gchar *value) +{ + gdouble ret; + + GRegex *regex; + GError *error; + + gchar *str; + + ret = 0.0; + + error = NULL; + regex = g_regex_new ("[€ .]", 0, 0, &error); + if (error != NULL) + { + g_warning ("Error on creating regex: %s.", + error->message != NULL ? error->message : "no details"); + return ret; + } + + error = NULL; + str = g_regex_replace ((const GRegex *)regex, + value, -1, 0, + "", 0, + &error); + if (error != NULL) + { + g_warning ("Error on regex replacing: %s.", + error->message != NULL ? error->message : "no details"); + g_regex_unref (regex); + return ret; + } + + ret = g_strtod (str, NULL); + g_regex_unref (regex); return ret; @@ -585,6 +636,144 @@ solipa_round (gdouble value, guint n_decimals) return ret; } +const gchar +*solipa_gtk_tree_model_get_value_string (GtkTreeModel *model, GtkTreeIter *iter, gint column) +{ + const gchar *ret; + GValue *gval; + + ret = NULL; + + gval = g_new0 (GValue, 1); + gtk_tree_model_get_value (model, iter, column, gval); + + ret = g_value_get_string (gval); + g_value_unset (gval); + + return ret; +} + +gint +solipa_gtk_tree_model_get_value_integer (GtkTreeModel *model, GtkTreeIter *iter, gint column) +{ + gint ret; + GValue *gval; + + ret = 0; + + gval = g_new0 (GValue, 1); + gtk_tree_model_get_value (model, iter, column, gval); + + if (G_VALUE_HOLDS_STRING (gval)) + { + /* try conversion */ + ret = (gint)trunc ((gfloat)solipa_unformat_money (g_value_get_string (gval))); + } + else if (G_VALUE_HOLDS_INT (gval)) + { + ret = g_value_get_int (gval); + } + else if (G_VALUE_HOLDS_UINT (gval)) + { + ret = (gint)g_value_get_uint (gval); + } + g_value_unset (gval); + + return ret; +} + +gdouble +solipa_gtk_tree_model_get_value_double (GtkTreeModel *model, GtkTreeIter *iter, gint column) +{ + gdouble ret; + GValue *gval; + + ret = 0.0; + + gval = g_new0 (GValue, 1); + gtk_tree_model_get_value (model, iter, column, gval); + + if (G_VALUE_HOLDS_STRING (gval)) + { + /* try conversion */ + ret = solipa_unformat_money (g_value_get_string (gval)); + } + else + { + ret = g_value_get_double (gval); + } + g_value_unset (gval); + + return ret; +} + +const gchar +*solipa_gtk_tree_model_get_value_double_sql (GtkTreeModel *model, GtkTreeIter *iter, gint column) +{ + char *cur; + + const gchar *ret; + gdouble res; + + res = solipa_gtk_tree_model_get_value_double (model, iter, column); + + cur = g_strdup (setlocale (LC_NUMERIC, NULL)); + setlocale (LC_NUMERIC, "C"); + gda_locale_changed (); + + ret = g_strdup_printf ("%f", res); + + setlocale (LC_NUMERIC, cur); + gda_locale_changed (); + g_free (cur); + + return ret; +} + +struct tm +*solipa_gtk_tree_model_get_value_tm (GtkTreeModel *model, GtkTreeIter *iter, gint column, const gchar *format) +{ + struct tm *ret; + const gchar *value; + + ret = NULL; + + value = solipa_gtk_tree_model_get_value_string (model, iter, column); + + ret = gtk_form_field_datetime_get_tm_from_str (value, format); + + return ret; +} + +const gchar +*solipa_tm_to_sql (struct tm *tm_data, const gchar *format) +{ + const gchar *ret; + gchar *_format; + + ret = g_strdup ("NULL"); + + if (tm_data != NULL) + { + if (format == NULL) + { + _format = g_strdup ("%Y-%m-%d %H:%M"); + } + else + { + _format = g_strdup (format); + g_strstrip (_format); + if (g_strcmp0 (_format, "") == 0) + { + _format = g_strdup ("%Y-%m-%d %H:%M"); + } + } + ret = g_strdup_printf ("'%s'", gtk_form_field_datetime_get_str_from_tm (tm_data, _format)); + } + + return ret; +} + /** * This function is copied from * http://bugzilla.gnome.org/show_bug.cgi?id=524831. diff --git a/src/utils.h b/src/utils.h index 3062590..e88e1a8 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Andrea Zagli + * Copyright (C) 2010-2011 Andrea Zagli * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -45,12 +45,21 @@ guint solipa_gtktreemodel_to_csv_gui (Solipa *solipa, guint n_columns); gchar *solipa_format_money (gdouble number, gint decimals, gboolean with_currency_symbol); +gdouble solipa_unformat_money (const gchar *value); struct tm *solipa_get_now_tm (void); GDate *solipa_get_today_gdate (void); gdouble solipa_round (gdouble value, guint n_decimals); +const gchar *solipa_gtk_tree_model_get_value_string (GtkTreeModel *model, GtkTreeIter *iter, gint column); +gint solipa_gtk_tree_model_get_value_integer (GtkTreeModel *model, GtkTreeIter *iter, gint column); +gdouble solipa_gtk_tree_model_get_value_double (GtkTreeModel *model, GtkTreeIter *iter, gint column); +const gchar *solipa_gtk_tree_model_get_value_double_sql (GtkTreeModel *model, GtkTreeIter *iter, gint column); +struct tm *solipa_gtk_tree_model_get_value_tm (GtkTreeModel *model, GtkTreeIter *iter, gint column, const gchar *format); + +const gchar *solipa_tm_to_sql (struct tm *tm_data, const gchar *format); + gchar *g_mkdtemp (gchar *tmpl); diff --git a/tests/utils_format_money.c b/tests/utils_format_money.c index 7c357ca..be8a7ae 100644 --- a/tests/utils_format_money.c +++ b/tests/utils_format_money.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Andrea Zagli + * Copyright (C) 2010-2011 Andrea Zagli * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,9 +22,14 @@ int main (int argc, char *argv[]) { + gchar *str; + gtk_init (&argc, &argv); - g_message ("%s", solipa_format_money (g_strtod (argv[1], NULL), 3, FALSE)); + str = solipa_format_money (g_strtod (argv[1], NULL), 3, FALSE); + g_message ("FORMAT %s", str); + + g_message ("UNFORMAT %f", solipa_unformat_money (str)); return 0; }