From c0b652c6931a1f223348a5f1e921d6a7e7f03720 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sat, 12 Jan 2013 15:36:29 +0100 Subject: [PATCH] Use convert cell range instead of doing it ourselves --- src/data/gnumeric-reader.c | 2 - src/ui/gui/page-file.c | 55 +++++++++++++++------------- src/ui/gui/page-sheet-spec.c | 38 ++++++++++++++----- src/ui/gui/text-data-import-dialog.c | 2 - 4 files changed, 57 insertions(+), 40 deletions(-) diff --git a/src/data/gnumeric-reader.c b/src/data/gnumeric-reader.c index 9a059b8546..6cc7b3e1c2 100644 --- a/src/data/gnumeric-reader.c +++ b/src/data/gnumeric-reader.c @@ -169,7 +169,6 @@ process_node (struct gnumeric_reader *r) { if ( r->target_sheet != NULL) { - printf ("%s:%d\n", __FILE__, __LINE__); xmlChar *value = xmlTextReaderValue (r->xtr); if ( 0 == xmlStrcmp (value, r->target_sheet)) r->state = STATE_SHEET_FOUND; @@ -177,7 +176,6 @@ process_node (struct gnumeric_reader *r) } else if (r->target_sheet_index == r->sheet_index) { - printf ("%s:%d %d\n", __FILE__, __LINE__, r->sheet_index); r->state = STATE_SHEET_FOUND; } } diff --git a/src/ui/gui/page-file.c b/src/ui/gui/page-file.c index 6422fa6ab4..a3aaf03749 100644 --- a/src/ui/gui/page-file.c +++ b/src/ui/gui/page-file.c @@ -80,43 +80,46 @@ update_assistant (struct import_assistant *ia) struct file *file = &ia->file; struct separators_page *sepp = &ia->separators; - int col; int rows = 0; - struct ccase *c; - - sepp->column_cnt = dict_get_var_cnt (ssp->dict); - sepp->columns = xcalloc (sepp->column_cnt, sizeof (*sepp->columns)); - for (col = 0; col < sepp->column_cnt ; ++col) + if (ssp->dict) { - const struct variable *var = dict_get_var (ssp->dict, col); - sepp->columns[col].name = xstrdup (var_get_name (var)); - sepp->columns[col].contents = NULL; - } + struct ccase *c; + int col; - for (; (c = casereader_read (ssp->reader)) != NULL; case_unref (c)) - { - rows++; + sepp->column_cnt = dict_get_var_cnt (ssp->dict); + sepp->columns = xcalloc (sepp->column_cnt, sizeof (*sepp->columns)); for (col = 0; col < sepp->column_cnt ; ++col) { - char *ss; const struct variable *var = dict_get_var (ssp->dict, col); + sepp->columns[col].name = xstrdup (var_get_name (var)); + sepp->columns[col].contents = NULL; + } - sepp->columns[col].contents = xrealloc (sepp->columns[col].contents, - sizeof (struct substring) * rows); + for (; (c = casereader_read (ssp->reader)) != NULL; case_unref (c)) + { + rows++; + for (col = 0; col < sepp->column_cnt ; ++col) + { + char *ss; + const struct variable *var = dict_get_var (ssp->dict, col); - ss = data_out (case_data (c, var), dict_get_encoding (ssp->dict), - var_get_print_format (var)); + sepp->columns[col].contents = xrealloc (sepp->columns[col].contents, + sizeof (struct substring) * rows); - sepp->columns[col].contents[rows - 1] = ss_cstr (ss); - } + ss = data_out (case_data (c, var), dict_get_encoding (ssp->dict), + var_get_print_format (var)); - if (rows > MAX_PREVIEW_LINES) - { - case_unref (c); - break; + sepp->columns[col].contents[rows - 1] = ss_cstr (ss); + } + + if (rows > MAX_PREVIEW_LINES) + { + case_unref (c); + break; + } } } - + file->line_cnt = rows; casereader_destroy (ssp->reader); ssp->reader = NULL; @@ -164,7 +167,7 @@ init_file (struct import_assistant *ia, GtkWindow *parent_window) ia->file.type = FTYPE_ODS; } - if (creader) + if (creader && dict) { struct sheet_spec_page *ssp = &ia->sheet_spec; ssp->dict = dict; diff --git a/src/ui/gui/page-sheet-spec.c b/src/ui/gui/page-sheet-spec.c index dc31dec5ae..1c72e830e0 100644 --- a/src/ui/gui/page-sheet-spec.c +++ b/src/ui/gui/page-sheet-spec.c @@ -93,17 +93,17 @@ reset_sheet_spec_page (struct import_assistant *ia) void post_sheet_spec_page (struct import_assistant *ia) { - char col_start[10]; - char col_stop[10]; int row_start = -1; int row_stop = -1; + int col_start = -1; + int col_stop = -1; GtkBuilder *builder = ia->asst.builder; struct file *file = &ia->file; struct sheet_spec_page *ssp = &ia->sheet_spec; - struct casereader *creader; - struct dictionary *dict; + struct casereader *creader = NULL; + struct dictionary *dict = NULL; GtkWidget *sheet_entry = get_widget_assert (builder, "sheet-entry"); GtkWidget *range_entry = get_widget_assert (builder, "cell-range-entry"); @@ -112,15 +112,19 @@ post_sheet_spec_page (struct import_assistant *ia) gint num = atoi (gtk_entry_get_text (GTK_ENTRY (sheet_entry))); const gchar *range = gtk_entry_get_text (GTK_ENTRY (range_entry)); - - sscanf (range, "%[a-zA-Z]%d:%[a-zA-Z]%d", col_start, &row_start, col_stop, &row_stop); + + + if ( num < 1 ) + num = 1; ssp->opts.sheet_name = NULL; - ssp->opts.cell_range = NULL; + ssp->opts.cell_range = range; ssp->opts.sheet_index = num; - if ( row_start > 0 && row_stop > 0) - ssp->opts.cell_range = xasprintf ("%s%d:%s%d", col_start, row_start, col_stop, row_stop); + if ( convert_cell_ref (range, &col_start, &row_start, &col_stop, &row_stop)) + { + ssp->opts.cell_range = range; + } ssp->sri.file_name = file->file_name; ssp->sri.read_names = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (readnames_checkbox)); @@ -142,6 +146,20 @@ post_sheet_spec_page (struct import_assistant *ia) ssp->dict = dict; ssp->reader = creader; - update_assistant (ia); + if (creader && dict) + { + update_assistant (ia); + } + else + { + GtkWidget * dialog = gtk_message_dialog_new (NULL, + GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("An error occurred reading the spreadsheet file.")); + + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + } } diff --git a/src/ui/gui/text-data-import-dialog.c b/src/ui/gui/text-data-import-dialog.c index ea7d6da219..df6e5ec995 100644 --- a/src/ui/gui/text-data-import-dialog.c +++ b/src/ui/gui/text-data-import-dialog.c @@ -80,8 +80,6 @@ text_data_import_assistant (PsppireDataWindow *dw) return; } - printf ("%s:%d %s\n", __FILE__, __LINE__, ia->file.file_name); - init_assistant (ia, parent_window); if ( ia->file.type == FTYPE_TEXT) { -- 2.30.2