Merge remote branch 'origin/master' into import-gui
[pspp] / src / ui / gui / page-file.c
index e4cb781559b7cdc8a39307a5e4c8eb11102ba85b..84b7928a27645689afc37a04a6268edbb1de33ff 100644 (file)
@@ -29,7 +29,9 @@
 #include "data/data-in.h"
 #include "data/data-out.h"
 #include "data/format-guesser.h"
+#include "data/casereader.h"
 #include "data/gnumeric-reader.h"
+#include "data/ods-reader.h"
 #include "data/spreadsheet-reader.h"
 #include "data/value-labels.h"
 #include "language/data-io/data-parser.h"
 
 struct import_assistant;
 
-/* Choosing a file and reading it. */
-
+/* Choose a file */
 static char *choose_file (GtkWindow *parent_window, gchar **encodingp);
 
+
+
+
 /* Obtains the file to import from the user and initializes IA's
    file substructure.  PARENT_WINDOW must be the window to use
    as the file chooser window's parent.
@@ -75,30 +79,22 @@ static char *choose_file (GtkWindow *parent_window, gchar **encodingp);
 bool
 init_file (struct import_assistant *ia, GtkWindow *parent_window)
 {
+  enum { MAX_LINE_LEN = 16384 }; /* Max length of an acceptable line. */
   struct file *file = &ia->file;
+
+  file->lines = NULL;
   file->file_name = choose_file (parent_window, &file->encoding);
   if (file->file_name == NULL)
     return false;
 
-  struct dictionary *dict = NULL;
-  struct spreadsheet_read_info sri;
-
-  sri.sheet_name = NULL;
-  sri.file_name = file->file_name;
-  sri.cell_range = NULL;
-  sri.sheet_index = 1;
-  sri.read_names = true;
-  sri.asw = 0;
+  if (ia->spreadsheet == NULL)
+    ia->spreadsheet = gnumeric_probe (file->file_name, false);
 
-  struct casereader *creader = gnumeric_open_reader (&sri, &dict);
-  printf ("%s:%d %s\n", __FILE__, __LINE__, sri.file_name);
-  ia->file.type = FTYPE_SPREADSHEET;
-
-  if (creader == NULL)
-  {
-    enum { MAX_PREVIEW_LINES = 1000 }; /* Max number of lines to read. */
-    enum { MAX_LINE_LEN = 16384 }; /* Max length of an acceptable line. */
+  if (ia->spreadsheet == NULL)
+    ia->spreadsheet = ods_probe (file->file_name, false);
 
+  if (ia->spreadsheet == NULL)
+    {
     struct string input;
     struct line_reader *reader = line_reader_for_file (file->encoding, file->file_name, O_RDONLY);
     if (reader == NULL)
@@ -160,7 +156,6 @@ init_file (struct import_assistant *ia, GtkWindow *parent_window)
       }
 
     line_reader_close (reader);
-    ia->file.type = FTYPE_TEXT;
   }
 
   return true;
@@ -173,9 +168,13 @@ destroy_file (struct import_assistant *ia)
   struct file *f = &ia->file;
   size_t i;
 
-  for (i = 0; i < f->line_cnt; i++)
-    ds_destroy (&f->lines[i]);
-  free (f->lines);
+  if (f->lines)
+    {
+      for (i = 0; i < f->line_cnt; i++)
+       ds_destroy (&f->lines[i]);
+      free (f->lines);
+    }
+
   g_free (f->file_name);
   g_free (f->encoding);
 }
@@ -237,7 +236,7 @@ choose_file (GtkWindow *parent_window, gchar **encodingp)
   gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
 
   filter = gtk_file_filter_new ();
-  gtk_file_filter_set_name (filter, _("OpenOffice.Org Spreadsheet Files"));
+  gtk_file_filter_set_name (filter, _("OpenDocument Spreadsheet Files"));
   gtk_file_filter_add_mime_type (filter, "application/vnd.oasis.opendocument.spreadsheet");
   gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
 
@@ -247,7 +246,6 @@ choose_file (GtkWindow *parent_window, gchar **encodingp)
   gtk_file_filter_add_mime_type (filter, "application/vnd.oasis.opendocument.spreadsheet");
   gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
 
-
   gtk_file_chooser_set_extra_widget (
     GTK_FILE_CHOOSER (dialog), psppire_encoding_selector_new ("Auto", true));