X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Ftext-data-import-dialog.c;h=412af5b8f4a1c0e1ac12f5de8c2ff2d55e90e1d8;hb=ddf35b11f8525281dd9e524a5d322a80bf56a24f;hp=c9cee751915f773f0b291fc285f23eee1eef5cfc;hpb=47324b542f10e961a72d711314f6abc7c83a59de;p=pspp diff --git a/src/ui/gui/text-data-import-dialog.c b/src/ui/gui/text-data-import-dialog.c index c9cee75191..412af5b8f4 100644 --- a/src/ui/gui/text-data-import-dialog.c +++ b/src/ui/gui/text-data-import-dialog.c @@ -18,6 +18,12 @@ #include "ui/gui/text-data-import-dialog.h" +#include "page-intro.h" +#include "page-sheet-spec.h" +#include "page-first-line.h" +#include "page-separators.h" +#include "page-formats.h" + #include #include #include @@ -81,10 +87,18 @@ text_data_import_assistant (PsppireDataWindow *dw) } ssp = ia->sheet_spec; - init_first_line_page (ia); - init_separators_page (ia); - init_formats_page (ia); + if (ia->spreadsheet) + { + ia->sheet_spec = sheet_spec_page_create (ia); + } + else + { + ia->intro = intro_page_create (ia); + ia->separators = separators_page_create (ia); + ia->first_line = first_line_page_create (ia); + } + ia->formats = formats_page_create (ia); gtk_widget_show_all (GTK_WIDGET (ia->asst.assistant)); @@ -104,8 +118,11 @@ text_data_import_assistant (PsppireDataWindow *dw) break; } - destroy_formats_page (ia); - destroy_separators_page (ia); + if (ssp) + { + destroy_formats_page (ia); + destroy_separators_page (ia); + } destroy_assistant (ia); destroy_file (ia); @@ -200,15 +217,10 @@ apply_dict (const struct dictionary *dict, struct string *s) static char * generate_syntax (const struct import_assistant *ia) { - struct sheet_spec_page *ssp = ia->sheet_spec; - struct string s = DS_EMPTY_INITIALIZER; -#if 0 - if (ssp->spreadsheet == NULL) + if (ia->spreadsheet == NULL) { - size_t var_cnt; - size_t i; syntax_gen_pspp (&s, "GET DATA" "\n /TYPE=TXT" @@ -217,11 +229,14 @@ generate_syntax (const struct import_assistant *ia) if (ia->file.encoding && strcmp (ia->file.encoding, "Auto")) syntax_gen_pspp (&s, " /ENCODING=%sq\n", ia->file.encoding); +#if 0 intro_append_syntax (ia->intro, &s); ds_put_cstr (&s, " /ARRANGEMENT=DELIMITED\n" " /DELCASE=LINE\n"); + + if (ia->first_line->skip_lines > 0) ds_put_format (&s, " /FIRSTCASE=%d\n", ia->first_line->skip_lines + 1); ds_put_cstr (&s, " /DELIMITERS=\""); @@ -255,42 +270,15 @@ generate_syntax (const struct import_assistant *ia) i == var_cnt - 1 ? "." : ""); } + apply_dict (ia->formats->dict, &s); +#endif } else - { - const struct sheet_spec_page *ssp = ia->sheet_spec; - - syntax_gen_pspp (&s, - "GET DATA" - "\n /TYPE=%ss" - "\n /FILE=%sq" - "\n /SHEET=index %d" - "\n /READNAMES=%ss", - (ssp->spreadsheet->type == SPREADSHEET_GNUMERIC) ? "GNM" : "ODS", - ia->file.file_name, - ssp->opts.sheet_index, - ssp->sri.read_names ? "ON" : "OFF"); - - - if ( ssp->opts.cell_range) - { - syntax_gen_pspp (&s, - "\n /CELLRANGE=RANGE %sq", - ssp->opts.cell_range); - } - else - { - syntax_gen_pspp (&s, - "\n /CELLRANGE=FULL"); - } - - - syntax_gen_pspp (&s, "."); + return sheet_spec_gen_syntax (ia); } -#endif return ds_cstr (&s); } @@ -322,8 +310,8 @@ render_input_cell (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_column), "column-number")); - row = empty_list_store_iter_to_row (iter) + ia->first_line->skip_lines; - field = ia->separators->columns[column].contents[row]; + row = empty_list_store_iter_to_row (iter) + ia->skip_lines; + field = ia->columns[column].contents[row]; if (field.string != NULL) { GValue text = {0, }; @@ -359,7 +347,7 @@ on_query_input_tooltip (GtkWidget *widget, gint wx, gint wy, if (!get_tooltip_location (widget, wx, wy, ia, &row, &column)) return FALSE; - if (ia->separators->columns[column].contents[row].string != NULL) + if (ia->columns[column].contents[row].string != NULL) return FALSE; gtk_tooltip_set_text (tooltip, @@ -381,16 +369,15 @@ parse_field (struct import_assistant *ia, size_t row, size_t column, char **outputp, char **tooltipp) { - struct substring field; - union value val; - struct variable *var; const struct fmt_spec *in; struct fmt_spec out; char *tooltip; bool ok; - field = ia->separators->columns[column].contents[row]; - var = dict_get_var (ia->formats->dict, column); + struct substring field = ia->columns[column].contents[row]; + struct variable *var = dict_get_var (ia->dict, column); + union value val; + value_init (&val, var_get_width (var)); in = var_get_print_format (var); out = fmt_for_output_from_input (in); @@ -400,7 +387,7 @@ parse_field (struct import_assistant *ia, char *error; error = data_in (field, "UTF-8", in->type, &val, var_get_width (var), - dict_get_encoding (ia->formats->dict)); + dict_get_encoding (ia->dict)); if (error != NULL) { tooltip = xasprintf (_("Cannot parse field content `%.*s' as " @@ -418,7 +405,7 @@ parse_field (struct import_assistant *ia, } if (outputp != NULL) { - *outputp = data_out (&val, dict_get_encoding (ia->formats->dict), &out); + *outputp = data_out (&val, dict_get_encoding (ia->dict), &out); } value_destroy (&val, var_get_width (var)); @@ -446,7 +433,7 @@ render_output_cell (GtkTreeViewColumn *tree_column, ok = parse_field (ia, (empty_list_store_iter_to_row (iter) - + ia->first_line->skip_lines), + + ia->skip_lines), GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_column), "column-number")), &output, NULL); @@ -529,7 +516,7 @@ get_tooltip_location (GtkWidget *widget, gint wx, gint wy, if (!ok) return FALSE; - *row = empty_list_store_iter_to_row (&iter) + ia->first_line->skip_lines; + *row = empty_list_store_iter_to_row (&iter) + ia->skip_lines; return TRUE; } @@ -625,9 +612,9 @@ make_data_column (struct import_assistant *ia, GtkTreeView *tree_view, char *name; if (input) - column = &ia->separators->columns[dict_idx]; + column = &ia->columns[dict_idx]; else - var = dict_get_var (ia->formats->dict, dict_idx); + var = dict_get_var (ia->dict, dict_idx); name = escape_underscores (input ? column->name : var_get_name (var)); char_cnt = input ? column->width : var_get_print_format (var)->w; @@ -661,11 +648,11 @@ create_data_tree_view (bool input, GtkContainer *parent, GtkTreeView *tree_view; gint i; - make_tree_view (ia, ia->first_line->skip_lines, &tree_view); + make_tree_view (ia, ia->skip_lines, &tree_view); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (tree_view), GTK_SELECTION_NONE); - for (i = 0; i < ia->separators->column_cnt; i++) + for (i = 0; i < ia->column_cnt; i++) gtk_tree_view_append_column (tree_view, make_data_column (ia, tree_view, input, i));