Change many %g format specifiers to %.*g with precision DBL_DIG + 1.
[pspp] / src / ui / gui / aggregate-dialog.c
index ebc47d401179c464e22ac9d3b7c69ff7d57bfbd2..e89943b6c4ad027f1c0362d6556ae1930780a9f8 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2010, 2011, 2012  Free Software Foundation
+   Copyright (C) 2010, 2011, 2012, 2013, 2014  Free Software Foundation
 
    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
@@ -18,6 +18,8 @@
 
 #include "dialog-common.h"
 
+#include <float.h>
+#include <gl/c-xvasprintf.h>
 #include <language/stats/aggregate.h>
 
 #include <ui/syntax-gen.h>
@@ -93,15 +95,6 @@ struct aggregate
 static char * generate_syntax (const struct aggregate *rd);
 
 
-/* Makes widget W's sensitivity follow the active state of TOGGLE */
-static void
-sensitive_if_active (GtkToggleButton *toggle, GtkWidget *w)
-{
-  gboolean active = gtk_toggle_button_get_active (toggle);
-
-  gtk_widget_set_sensitive (w, active);
-}
-
 static void update_arguments (struct aggregate *agg);
 
 
@@ -175,6 +168,11 @@ choose_filename (struct aggregate *fd)
   gtk_file_filter_add_mime_type (filter, "application/x-spss-sav");
   gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
 
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Compressed System Files (*.zsav)"));
+  gtk_file_filter_add_pattern (filter, "*.zsav");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
+
   filter = gtk_file_filter_new ();
   gtk_file_filter_set_name (filter, _("Portable Files (*.por) "));
   gtk_file_filter_add_mime_type (filter, "application/x-spss-por");
@@ -226,6 +224,7 @@ populate_combo_model (GtkComboBox *cb)
   gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (cb), renderer, "text", 0);
 
   gtk_combo_box_set_model (GTK_COMBO_BOX (cb), GTK_TREE_MODEL (list));
+  g_object_unref (list);
 }
 
 
@@ -434,15 +433,14 @@ on_acr_change (const struct aggregate *agg, GtkTreeView *tv)
   gtk_entry_set_text (GTK_ENTRY (agg->summary_var_label_entry), label);
   gtk_entry_set_text (GTK_ENTRY (agg->summary_sv_entry), srcvar);
   
-  text = g_strdup_printf ("%g", arg1);
+  text = c_xasprintf ("%.*g", DBL_DIG + 1, arg1);
   gtk_entry_set_text (GTK_ENTRY (agg->summary_arg1_entry), text);
   g_free (text);
 
-  text = g_strdup_printf ("%g", arg2);
+  text = c_xasprintf ("%.*g", DBL_DIG + 1, arg2);
   gtk_entry_set_text (GTK_ENTRY (agg->summary_arg2_entry), text);
   g_free (text);
 
-
   gtk_combo_box_set_active (GTK_COMBO_BOX (agg->function_combo), f_idx);
 }
 
@@ -468,8 +466,6 @@ aggregate_dialog (PsppireDataWindow *dw)
   struct aggregate fd;
   gint response;
 
-  PsppireVarStore *vs;
-
   GtkWidget *dialog ;
   GtkWidget *source ;
 
@@ -565,11 +561,9 @@ aggregate_dialog (PsppireDataWindow *dw)
 
   g_signal_connect_swapped (dialog, "refresh", G_CALLBACK (refresh),  &fd);
 
-  g_object_get (fd.de->data_editor, "var-store", &vs, NULL);
-
   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (fd.de));
 
-  g_object_get (vs, "dictionary", &fd.dict, NULL);
+  g_object_get (fd.de->data_editor, "dictionary", &fd.dict, NULL);
   g_object_set (source, "model", fd.dict, NULL);
 
 
@@ -580,7 +574,7 @@ aggregate_dialog (PsppireDataWindow *dw)
                                      dialog_state_valid, &fd);
 
   g_signal_connect (fd.filename_radiobutton, "toggled",
-                   G_CALLBACK (sensitive_if_active), fd.filename_box );
+                   G_CALLBACK (set_sensitivity_from_toggle), fd.filename_box );
 
   g_signal_connect_swapped (fd.filename_button, "clicked",
                    G_CALLBACK (choose_filename), &fd);
@@ -634,8 +628,8 @@ static void
 append_summary_spec (const struct aggregate *agg, GtkTreeIter *iter, GString *string)
 {
   GtkTreeIter combo_iter;
-  const char *varname;
-  const char *funcname;
+  char *varname = NULL;
+  char *funcname = NULL;
 
   GtkTreeModel *acr_model = GTK_TREE_MODEL (PSPPIRE_ACR (agg->summary_acr)->list_store);
   GtkTreeModel *combo_model = gtk_combo_box_get_model (GTK_COMBO_BOX (agg->function_combo));
@@ -646,8 +640,8 @@ append_summary_spec (const struct aggregate *agg, GtkTreeIter *iter, GString *st
   double arg1, arg2;
   int arity;
   enum agr_src_vars has_src_vars;
-    const gchar *label ;
-  const gchar *srcvar ;
+  gchar *label = NULL;
+  gchar *srcvar = NULL;
 
   gtk_tree_model_get (acr_model, iter,
                      SUMMARY_COL_VARNAME, &varname,
@@ -682,18 +676,28 @@ append_summary_spec (const struct aggregate *agg, GtkTreeIter *iter, GString *st
 
   if ( has_src_vars != AGR_SV_NO)
     {
-      g_string_append (string, " (");
+      struct string dss;
+      ds_init_cstr (&dss, " (");
       
-      g_string_append (string, srcvar);
+      ds_put_cstr (&dss, srcvar);
 
       if ( arity > 0)
-       g_string_append_printf (string, ", %g", arg1);
+       ds_put_c_format (&dss, ", %.*g", DBL_DIG + 1, arg1);
 
       if ( arity > 1)
-       g_string_append_printf (string, ", %g", arg2);
+       ds_put_c_format (&dss, ", %.*g", DBL_DIG + 1, arg2);
 
-      g_string_append (string, ")");
+      ds_put_cstr (&dss, ")");
+
+      g_string_append (string, ds_cstr (&dss));
+
+      ds_destroy (&dss);
     }
+
+   free (label);
+   free (srcvar);
+   free (varname);
+   free (funcname);
 }