New function fmt_dollar_template based on pspp-dev discussion.
authorBen Pfaff <blp@gnu.org>
Sun, 10 Dec 2006 04:03:34 +0000 (04:03 +0000)
committerBen Pfaff <blp@gnu.org>
Sun, 10 Dec 2006 04:03:34 +0000 (04:03 +0000)
src/data/ChangeLog
src/data/format.c
src/data/format.h
src/ui/gui/ChangeLog
src/ui/gui/var-type-dialog.c

index e4306829c42d15e51328d2ac63470f8a7f223da3..44cd03eef9ded68572e429c183c56902ff9c24c7 100644 (file)
@@ -1,3 +1,8 @@
+Sat Dec  9 20:02:25 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c (fmt_dollar_template): New function, based on
+       dollar_format_template from var-type-dialog.c.
+
 Sat Dec  9 18:05:59 2006  Ben Pfaff  <blp@gnu.org>
 
        * data-out.c (output_scientific): Fix bad assumption that "buf" is
index 60c1d0a9133b98fc33e4411e6b1b7d39e73824db..e2b163a5097549625637954087e1688a740f56ca 100644 (file)
@@ -587,6 +587,34 @@ fmt_date_template (enum fmt_type type)
       NOT_REACHED ();
     }
 }
+
+/* Returns a string of the form "$#,###.##" according to FMT,
+   which must be of type FMT_DOLLAR.  The caller must free the
+   string. */
+char *
+fmt_dollar_template (const struct fmt_spec *fmt)
+{
+  struct string s = DS_EMPTY_INITIALIZER;
+  int c;
+
+  ds_put_char (&s, '$');
+  for (c = MAX (fmt->w - fmt->d - 1, 0); c > 0; )
+    {
+      ds_put_char (&s, '#');
+      if (--c % 4 == 0 && c > 0) 
+        {
+          ds_put_char (&s, fmt_grouping_char (fmt->type));
+          --c;
+        }
+    }
+  if (fmt->d > 0) 
+    {
+      ds_put_char (&s, '.');
+      ds_put_char_multiple (&s, '#', fmt->d);
+    }
+
+  return ds_cstr (&s);
+}
 \f
 /* Returns true if TYPE is a valid format type,
    false otherwise. */
index 089f1ed3d1638d8e940614c32943928313bc0cee..51484a3b1f1b260c1d02088888c2c56cf884a640 100644 (file)
@@ -116,6 +116,7 @@ bool fmt_from_io (int io, enum fmt_type *);
 
 bool fmt_usable_for_input (enum fmt_type) PURE_FUNCTION;
 const char *fmt_date_template (enum fmt_type) PURE_FUNCTION;
+char *fmt_dollar_template (const struct fmt_spec *);
 \f
 /* Maximum length of prefix or suffix string in
    struct fmt_number_style. */
index 0b8aee88500806a5dab61ecde7a2613c37c817e5..1fbddc3e5ebc2d6d74d6e4cc195e47e44eaf2477 100644 (file)
@@ -1,3 +1,9 @@
+Sat Dec  9 20:03:04 2006  Ben Pfaff  <blp@gnu.org>
+
+       * var-type-dialog.c (var_type_dialog_create): Use
+       fmt_dollar_template from data/format.c.
+       (dollar_format_template) Removed.
+
 Sat Dec  9 07:19:53 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
        * syntax-editor.c : New file.
index a4b66cc2917d61c43e244721b53568da7d4146de..d4262872e044eb6b61f9c0e2e55a893a99ce10b9 100644 (file)
@@ -212,44 +212,6 @@ static gint on_var_type_ok_clicked(GtkWidget *w, gpointer data);
 
 #define LEN 20
 
-/* return a string of the form "$#,###.##" according to FMT. 
-   FMT must be of type FMT_DOLLAR
- */
-static const gchar *
-dollar_format_template(const struct fmt_spec *fmt)
-{
-  static gchar buf[LEN];
-  g_assert( fmt->type == FMT_DOLLAR);
-
-  {
-    gint c ;
-    gint int_part = fmt->w - fmt->d;
-    if ( fmt->d > 0 ) --int_part;
-    g_assert(int_part > 0);
-
-    g_strlcpy(buf, "$", LEN);
-
-    c = int_part - 1;
-    while(c > 0)
-      {
-       g_strlcat(buf, "#", LEN);
-       if(--c % 4 == 0 && c > 0 ) 
-         {
-           g_strlcat(buf, ",", LEN);
-           --c;
-         }
-      }
-    if ( fmt->d > 0 ) 
-      {
-       g_strlcat(buf, ".", LEN);
-       for ( c = 0 ; c < fmt->d ; ++c ) 
-         g_strlcat(buf, "#", LEN);
-      }
-  }
-
-  return buf;
-}
-
 static void
 add_to_group(GtkWidget *w, gpointer data)
 {
@@ -504,11 +466,13 @@ var_type_dialog_create(GladeXML *xml)
 
   for ( i = 0 ; i < sizeof(dollar_format)/sizeof(dollar_format[0]) ; ++i ) 
     {
+      char *template = fmt_dollar_template (&dollar_format[i]);
       gtk_list_store_append (list_store, &iter);
       gtk_list_store_set (list_store, &iter,
-                          0, dollar_format_template(&dollar_format[i]),
+                          0, template,
                          1, &dollar_format[i],
                          -1);
+      free (template);
     }
 
   gtk_tree_view_set_model(GTK_TREE_VIEW(dialog->dollar_treeview),