[PATCH] Helpers: move some date related function to qt-gui.cpp

Lubomir I. Ivanov neolit123 at gmail.com
Wed Oct 16 14:13:58 UTC 2013


bump.

lubomir
--

On 15 October 2013 16:14, Lubomir I. Ivanov <neolit123 at gmail.com> wrote:
> From: "Lubomir I. Ivanov" <neolit123 at gmail.com>
>
> divelist.c:
> get_dive_date_string()
> get_short_dive_date_string()
> get_trip_date_string()
>
> MinGW support for *printf and parameter positions (e.g. %1$d)
> is horribly broken. Instead of implementing *proper* support
> for this feature Microsoft decide to ignore the standard (again)
> and they implement new functions with the '_p' suffix,
> such as 'sprintf_p', which seem to be available from a 2003 runtime.
> To top that 'sprintf_p' is not really a 'sprintf' but rather
> a 'snprintf'.
>
> It seems that the MinGW people ignore the issue and do not provide
> wrappers of any sort, or at least for the current recommended compiler
> for Qt 4.8.5 on Windows - which is a 4.4.0. A note of warning;
> inspecting how MinGW does certain things in headers such as stdio.h,
> can ensue bad dreams or other negative effects on to the viewer.
>
> This forces us to move the following functions from the 'back-end'
> (divelist.c) to the 'front-end' (qt-gui.cpp) and use QString.
>
> Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
> ---
>  divelist.c       | 64 --------------------------------------------------------
>  divelist.h       |  3 ---
>  helpers.h        |  3 +++
>  qt-gui.cpp       | 40 +++++++++++++++++++++++++++++++++++
>  qt-ui/models.cpp |  7 ++-----
>  5 files changed, 45 insertions(+), 72 deletions(-)
>
> diff --git a/divelist.c b/divelist.c
> index 6df9618..858d615 100644
> --- a/divelist.c
> +++ b/divelist.c
> @@ -460,70 +460,6 @@ void update_cylinder_related_info(struct dive *dive)
>         }
>  }
>
> -#define MAX_DATE_STRING 256
> -/* caller needs to free the string */
> -char *get_dive_date_string(timestamp_t when)
> -{
> -       char *buffer = malloc(MAX_DATE_STRING);
> -       if (buffer) {
> -               struct tm tm;
> -               utc_mkdate(when, &tm);
> -               snprintf(buffer, MAX_DATE_STRING,
> -                       /*++GETTEXT 60 char buffer weekday, monthname, day of month, year, hour:min */
> -                       translate("gettextFromC","%1$s, %2$s %3$d, %4$d %5$02d:%6$02d"),
> -                       weekday(tm.tm_wday),
> -                       monthname(tm.tm_mon),
> -                       tm.tm_mday, tm.tm_year + 1900,
> -                       tm.tm_hour, tm.tm_min);
> -       }
> -       return buffer;
> -}
> -
> -char *get_short_dive_date_string(timestamp_t when)
> -{
> -       char *buffer = malloc(MAX_DATE_STRING);
> -       if (buffer) {
> -               struct tm tm;
> -               utc_mkdate(when, &tm);
> -               snprintf(buffer, MAX_DATE_STRING,
> -                       /*++GETTEXT 40 char buffer monthname, day of month, year, hour:min */
> -                       translate("gettextFromC","%1$s %2$d, %3$d\n%4$02d:%5$02d"),
> -                       monthname(tm.tm_mon),
> -                       tm.tm_mday, tm.tm_year +1900,
> -                       tm.tm_hour, tm.tm_min);
> -       }
> -       return buffer;
> -}
> -
> -/* caller needs to free the string */
> -char *get_trip_date_string(timestamp_t when, int nr)
> -{
> -       char *buffer = malloc(MAX_DATE_STRING);
> -       if (buffer) {
> -               struct tm tm;
> -               utc_mkdate(when, &tm);
> -               if (nr != 1) {
> -                       snprintf(buffer, MAX_DATE_STRING,
> -#if PLURAL_HANDLING_IN_TRANLATION
> -                                /*++GETTEXT 60 char buffer monthname, year, nr dives */
> -                                ngettext("%1$s %2$d (%3$d dive)",
> -                                         "%1$s %2$d (%3$d dives)", nr),
> -#else
> -                                translate("gettextFromC","%1$s %2$d (%3$d dives)"),
> -#endif
> -                                monthname(tm.tm_mon),
> -                                tm.tm_year + 1900,
> -                                nr);
> -               } else {
> -                       snprintf(buffer, MAX_DATE_STRING,
> -                                translate("gettextFromC","%1$s %2$d (1 dive)"),
> -                                monthname(tm.tm_mon),
> -                                tm.tm_year + 1900);
> -               }
> -       }
> -       return buffer;
> -}
> -
>  #define MAX_NITROX_STRING 80
>  #define UTF8_ELLIPSIS "\xE2\x80\xA6"
>
> diff --git a/divelist.h b/divelist.h
> index 83a48fb..627cb57 100644
> --- a/divelist.h
> +++ b/divelist.h
> @@ -15,9 +15,6 @@ extern double init_decompression(struct dive * dive);
>
>  /* divelist core logic functions */
>  extern void process_dives(bool imported, bool prefer_imported);
> -extern char *get_dive_date_string(timestamp_t when);
> -extern char *get_short_dive_date_string(timestamp_t when);
> -extern char *get_trip_date_string(timestamp_t when, int nr);
>  extern char *get_nitrox_string(struct dive *dive);
>
>  extern dive_trip_t *find_trip_by_idx(int idx);
> diff --git a/helpers.h b/helpers.h
> index c9e7053..fb0bbd7 100644
> --- a/helpers.h
> +++ b/helpers.h
> @@ -29,6 +29,9 @@ QString getSubsurfaceDataPath(QString folderToFind);
>  extern const QString get_dc_nickname(const char *model, uint32_t deviceid);
>  int gettimezoneoffset();
>  int parseTemperatureToMkelvin(const QString& text);
> +QString get_dive_date_string(timestamp_t when);
> +QString get_short_dive_date_string(timestamp_t when);
> +QString get_trip_date_string(timestamp_t when, int nr);
>
>  extern DiveComputerList dcList;
>
> diff --git a/qt-gui.cpp b/qt-gui.cpp
> index 8d67890..78baa15 100644
> --- a/qt-gui.cpp
> +++ b/qt-gui.cpp
> @@ -454,3 +454,43 @@ int parseTemperatureToMkelvin(const QString& text)
>         return mkelvin;
>
>  }
> +
> +QString get_dive_date_string(timestamp_t when)
> +{
> +       struct tm tm;
> +       utc_mkdate(when, &tm);
> +       return translate("gettextFromC", "%1, %2 %3, %4 %5:%6")
> +               .arg(weekday(tm.tm_wday))
> +               .arg(monthname(tm.tm_mon))
> +               .arg(tm.tm_mday)
> +               .arg(tm.tm_year + 1900)
> +               .arg(tm.tm_hour, 2, 10, QChar('0'))
> +               .arg(tm.tm_min, 2, 10, QChar('0'));
> +}
> +
> +QString get_short_dive_date_string(timestamp_t when)
> +{
> +       struct tm tm;
> +       utc_mkdate(when, &tm);
> +       return translate("gettextFromC", "%1 %2, %3\n%4:%5")
> +               .arg(monthname(tm.tm_mon))
> +               .arg(tm.tm_mday)
> +               .arg(tm.tm_year + 1900)
> +               .arg(tm.tm_hour, 2, 10, QChar('0'))
> +               .arg(tm.tm_min, 2, 10, QChar('0'));
> +}
> +
> +QString get_trip_date_string(timestamp_t when, int nr)
> +{
> +       struct tm tm;
> +       utc_mkdate(when, &tm);
> +       if (nr != 1)
> +               return translate("gettextFromC", "%1 %2 (%3 dives)")
> +                       .arg(monthname(tm.tm_mon))
> +                       .arg(tm.tm_year + 1900)
> +                       .arg(nr);
> +       else
> +               return translate("gettextFromC", "%1 %2 (1 dive)")
> +                       .arg(monthname(tm.tm_mon))
> +                       .arg(tm.tm_year + 1900);
> +}
> diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
> index df2732c..a8b8271 100644
> --- a/qt-ui/models.cpp
> +++ b/qt-ui/models.cpp
> @@ -873,7 +873,7 @@ QVariant TripItem::data(int column, int role) const
>         if (role == Qt::DisplayRole) {
>                 switch (column) {
>                         case DiveTripModel::NR:
> -                       ret = QString(trip->location) + ", " + QString(get_trip_date_string(trip->when, trip->nrdives));
> +                       ret = QString(trip->location) + ", " + get_trip_date_string(trip->when, trip->nrdives);
>                         break;
>                 }
>         }
> @@ -953,10 +953,7 @@ QVariant DiveItem::data(int column, int role) const
>
>  QString DiveItem::displayDate() const
>  {
> -       char *buf = get_dive_date_string(dive->when);
> -       QString date(buf);
> -       free(buf);
> -       return date;
> +       return get_dive_date_string(dive->when);
>  }
>
>  QString DiveItem::displayDepth() const
> --
> 1.7.11.msysgit.0
>


More information about the subsurface mailing list