Cleaned up GUI, by objectifying the data editor. Removed a number of global variables.
[pspp-builds.git] / src / ui / gui / var-type-dialog.c
index 121804331b84afb5c842b4dff24869143ddffc06..7433b93e4b0237d3a07cc9dd5bb3e1fb32a2f2cf 100644 (file)
@@ -1,7 +1,6 @@
 /* 
     PSPPIRE --- A Graphical User Interface for PSPP
     Copyright (C) 2005, 2006  Free Software Foundation
-    Written by John Darrington
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -32,7 +31,6 @@
 
 #include "var-type-dialog.h"
 
-#include "psppire-variable.h"
 #include "helper.h"
 
 #include <data/variable.h>
@@ -130,7 +128,7 @@ static void update_width_decimals(const struct var_type_dialog *dialog);
 static void
 set_local_width_decimals(struct var_type_dialog *dialog)
 {
-  dialog->fmt_l = * psppire_variable_get_write_spec(dialog->pv);
+  dialog->fmt_l = * var_get_write_format (dialog->pv);
 
   switch (dialog->active_button) 
     {
@@ -212,44 +210,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)
 {
@@ -365,7 +325,7 @@ set_format_type_from_treeview(GtkTreeView *treeview, gpointer data)
 
 /* Create the structure from the XML definitions */
 struct var_type_dialog *
-var_type_dialog_create(GladeXML *xml)
+var_type_dialog_create (GladeXML *xml)
 {
   gint i;
   struct var_type_dialog *dialog = g_malloc(sizeof(struct var_type_dialog));
@@ -504,11 +464,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), 
@@ -701,7 +663,7 @@ var_type_dialog_set_state(struct var_type_dialog *dialog)
   g_assert(dialog->pv);
 
   /* Populate width and decimals */
-  write_spec = psppire_variable_get_write_spec(dialog->pv);
+  write_spec = var_get_write_format (dialog->pv);
 
   g_string_printf(str, "%d", write_spec->d);
 
@@ -819,14 +781,14 @@ on_var_type_ok_clicked(GtkWidget *w, gpointer data)
     gint decimals = atoi(gtk_entry_get_text
                         (GTK_ENTRY(dialog->entry_decimals)));
 
-    gint new_type = NUMERIC;
+    gint new_type = VAR_NUMERIC;
     gint new_width = 0;
     bool result = false;
     struct fmt_spec spec;
     switch (dialog->active_button) 
       {
       case BUTTON_STRING:
-       new_type = ALPHA;
+       new_type = VAR_STRING;
        new_width = width;
        result = make_output_format_try(&spec, FMT_A, width, 0);
        break;
@@ -856,12 +818,10 @@ on_var_type_ok_clicked(GtkWidget *w, gpointer data)
        break;
       }
 
-    if ( result == true ) 
+    if ( result == true )
       {
-       psppire_variable_set_type(dialog->pv, new_type);
-       psppire_variable_set_width(dialog->pv, new_width);
-       psppire_variable_set_write_spec(dialog->pv, spec);
-       psppire_variable_set_print_spec(dialog->pv, spec);
+       var_set_width (dialog->pv, new_width);
+       var_set_both_formats (dialog->pv, &spec);
       }
 
   }