Change many %g format specifiers to %.*g with precision DBL_DIG + 1.
[pspp] / src / ui / gui / spreadsheet-test.c
index 2e88402b527804d7b747ac33c885f77b642bb900..af0d18c81c8f6e4b082ff5092aa684198b529ceb 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2013  Free Software Foundation
+   Copyright (C) 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
@@ -19,6 +19,7 @@
 
 #include <config.h>
 
+#include <float.h>
 #include <gtk/gtk.h>
 
 #include "psppire-spreadsheet-model.h"
 #include "data/spreadsheet-reader.h"
 #include "data/casereader.h"
 #include "data/case.h"
+#include "data/settings.h"
+#include "libpspp/message.h"
+#include "libpspp/i18n.h"
 
-#if 0
-#define N 10
-
-
-static GtkListStore *
-make_store ()
-  {
-    int i;
-    GtkTreeIter iter;
-    
-    GtkListStore * list_store  = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING);
-
-    for (i = 0; i < N; ++i)
-      {
-       gtk_list_store_append (list_store, &iter);
-       gtk_list_store_set (list_store, &iter,
-                           0, N - i,
-                           1, "xxx", 
-                           -1);
-      }
-    return list_store;
-  }
-#endif
+#include "gl/xalloc.h"
 
 
 struct xxx
@@ -72,28 +54,40 @@ on_clicked (GtkButton *button, struct xxx *stuff)
   struct casereader *reader ;
   struct spreadsheet_read_options opts;
 
-  g_print( "%s %d\n", __FUNCTION__, x);
-
-  opts.sheet_index = x + 1;
-  opts.cell_range = NULL;
-  opts.sheet_name = NULL;
+  opts.sheet_index = -1;
+  opts.cell_range = spreadsheet_get_sheet_range (stuff->sp, x);
+  opts.sheet_name = CONST_CAST (char *,
+                                spreadsheet_get_sheet_name (stuff->sp, x));
   opts.read_names = TRUE;
   opts.asw = -1;
 
-  reader = ods_make_reader (stuff->sp, &opts);
+  reader = spreadsheet_make_reader (stuff->sp, &opts);
+
+  if (reader == NULL)
+    return;
+
   proto = casereader_get_proto (reader);
 
   nvals = caseproto_get_n_widths (proto);
   
-  for (;
-           (c = casereader_read (reader)) != NULL; case_unref (c))
+  for (; (c = casereader_read (reader)) != NULL; case_unref (c))
     {
       int i;
 
       for (i = 0; i < nvals ; ++i)
       {
-       const double val = case_data_idx (c, i)->f;
-       printf ("%g ", val);
+       const int width = caseproto_get_width (proto, i);
+       const union value *val = case_data_idx (c, i);
+       if (0 == width)
+         printf ("%.*g ", DBL_DIG + 1, val->f);
+       else
+         {
+           char *ss = xzalloc (width + 1);
+            memcpy (ss, value_str (val, width), width);
+           
+           printf ("%s ", ss);
+           free (ss);
+         }
       }
       printf ("\n");
     }
@@ -101,6 +95,12 @@ on_clicked (GtkButton *button, struct xxx *stuff)
   casereader_destroy (reader);
 }
 
+static void 
+print_msg (const struct msg *m, void *aux UNUSED)
+{
+  fprintf (stderr, "%s\n", m->text);
+}
+
 
 int
 main (int argc, char *argv[] )
@@ -114,17 +114,20 @@ main (int argc, char *argv[] )
   GtkWidget *button;
   struct xxx stuff;
 
+  i18n_init ();
+  settings_init ();
+
   gtk_init (&argc, &argv);
     
   if ( argc < 2)
     g_error ("Usage: prog file\n");
 
+  msg_set_handler (print_msg, 0);
+
   stuff.sp = NULL;
 
-#if 0
-  if (sp == NULL)
-    sp = gnumeric_probe (argv[1], false);
-#endif
+  if (stuff.sp == NULL)
+    stuff.sp = gnumeric_probe (argv[1], false);
 
   if (stuff.sp == NULL)
     stuff.sp = ods_probe (argv[1], false);
@@ -189,7 +192,7 @@ main (int argc, char *argv[] )
 
   gtk_main ();
 
-  //  gnumeric_destroy (sp);
-    
+  spreadsheet_destroy (stuff.sp);
+
   return 0;
 }