#include <errno.h>
#include <fcntl.h>
-#include <gtk-contrib/psppire-sheet.h>
#include <gtk/gtk.h>
#include <limits.h>
#include <stdlib.h>
#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"
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.
bool
init_file (struct import_assistant *ia, GtkWindow *parent_window)
{
- enum { MAX_PREVIEW_LINES = 1000 }; /* Max number of lines to read. */
enum { MAX_LINE_LEN = 16384 }; /* Max length of an acceptable line. */
struct file *file = &ia->file;
- struct separators_page *sepp = &ia->separators;
- struct casereader *creader = NULL;
- struct dictionary *dict = NULL;
- struct spreadsheet_read_info sri;
- struct spreadsheet_read_options opts;
file->lines = NULL;
file->file_name = choose_file (parent_window, &file->encoding);
if (file->file_name == NULL)
return false;
- opts.sheet_name = NULL;
- opts.cell_range = NULL;
- opts.sheet_index = 1;
+ if (ia->spreadsheet == NULL)
+ ia->spreadsheet = gnumeric_probe (file->file_name, false);
- sri.file_name = file->file_name;
- sri.read_names = true;
- sri.asw = -1;
+ if (ia->spreadsheet == NULL)
+ ia->spreadsheet = ods_probe (file->file_name, false);
- if (!creader)
- {
- creader = gnumeric_open_reader (&sri, &opts, &dict);
- ia->file.type = FTYPE_GNUMERIC;
- }
-
- if (!creader)
- {
- creader = ods_open_reader (&sri, &opts, &dict);
- ia->file.type = FTYPE_ODS;
- }
-
- if (creader)
- {
- int col;
- int rows = 0;
- struct ccase *c;
-
- sepp->column_cnt = dict_get_var_cnt (dict);
- sepp->columns = xcalloc (sepp->column_cnt, sizeof (*sepp->columns));
- for (col = 0; col < sepp->column_cnt ; ++col)
- {
- const struct variable *var = dict_get_var (dict, col);
- sepp->columns[col].name = xstrdup (var_get_name (var));
- sepp->columns[col].contents = NULL;
- }
-
- for (; (c = casereader_read (creader)) != NULL; case_unref (c))
- {
- rows++;
- for (col = 0; col < sepp->column_cnt ; ++col)
- {
- char *ss;
- const struct variable *var = dict_get_var (dict, col);
-
- sepp->columns[col].contents = xrealloc (sepp->columns[col].contents,
- sizeof (struct substring) * rows);
-
- ss = data_out (case_data (c, var), dict_get_encoding (dict),
- var_get_print_format (var));
-
- sepp->columns[col].contents[rows - 1] = ss_cstr (ss);
- }
-
- if (rows > MAX_PREVIEW_LINES)
- {
- case_unref (c);
- break;
- }
- }
-
- file->line_cnt = rows;
- casereader_destroy (creader);
- }
- else
+ if (ia->spreadsheet == NULL)
{
struct string input;
struct line_reader *reader = line_reader_for_file (file->encoding, file->file_name, O_RDONLY);
}
line_reader_close (reader);
- ia->file.type = FTYPE_TEXT;
}
return true;
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);
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);
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));