X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpage-file.c;h=fdbda325f8ffdc0771cfb647a108a6124865874d;hb=e339b2ca72d77a076566856e9357781d49cd983c;hp=e4cb781559b7cdc8a39307a5e4c8eb11102ba85b;hpb=e4902aff3ef2f8865a2d304ce0979d7aed1c35c0;p=pspp diff --git a/src/ui/gui/page-file.c b/src/ui/gui/page-file.c index e4cb781559..fdbda325f8 100644 --- a/src/ui/gui/page-file.c +++ b/src/ui/gui/page-file.c @@ -20,7 +20,6 @@ #include #include -#include #include #include #include @@ -29,7 +28,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" @@ -48,7 +49,6 @@ #include "ui/gui/psppire-encoding-selector.h" #include "ui/gui/psppire-empty-list-store.h" #include "ui/gui/psppire-var-sheet.h" -#include "ui/gui/psppire-var-store.h" #include "ui/gui/psppire-scanf.h" #include "ui/syntax-gen.h" @@ -62,10 +62,12 @@ 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 +77,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 +154,6 @@ init_file (struct import_assistant *ia, GtkWindow *parent_window) } line_reader_close (reader); - ia->file.type = FTYPE_TEXT; } return true; @@ -173,9 +166,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); } @@ -204,7 +201,7 @@ choose_file (GtkWindow *parent_window, gchar **encodingp) g_object_set (dialog, "local-only", FALSE, NULL); filter = gtk_file_filter_new (); - gtk_file_filter_set_name (filter, _("Text files")); + gtk_file_filter_set_name (filter, _("Text Files")); gtk_file_filter_add_mime_type (filter, "text/*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); @@ -237,7 +234,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 +244,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));