X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Ftext-data-import-dialog.c;h=34127492fa9393ec03a7a157342cd07d71360fd1;hb=03a7b96a587a58bda342b4eb5ce5f935880ba2b7;hp=ce23093feefa33ea88837236f77fc9a8f43423e7;hpb=0b0ca44889e637251cb5f2dbf3c7fdc4ec8b9bd7;p=pspp diff --git a/src/ui/gui/text-data-import-dialog.c b/src/ui/gui/text-data-import-dialog.c index ce23093fee..34127492fa 100644 --- a/src/ui/gui/text-data-import-dialog.c +++ b/src/ui/gui/text-data-import-dialog.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation + Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ #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" @@ -40,7 +41,6 @@ #include "libpspp/i18n.h" #include "libpspp/line-reader.h" #include "libpspp/message.h" -#include "ui/gui/checkbox-treeview.h" #include "ui/gui/dialog-common.h" #include "ui/gui/executor.h" #include "ui/gui/helper.h" @@ -55,7 +55,6 @@ #include "ui/gui/psppire-scanf.h" #include "ui/syntax-gen.h" -#include "gl/error.h" #include "gl/intprops.h" #include "gl/xalloc.h" @@ -77,6 +76,7 @@ text_data_import_assistant (PsppireDataWindow *dw) { GtkWindow *parent_window = GTK_WINDOW (dw); struct import_assistant *ia = init_assistant (parent_window); + struct sheet_spec_page *ssp ; if (!init_file (ia, parent_window)) { @@ -84,7 +84,13 @@ text_data_import_assistant (PsppireDataWindow *dw) return; } + ssp = ia->sheet_spec; + if (ia->spreadsheet) + { + ia->sheet_spec = sheet_spec_page_create (ia); + } + else { ia->intro = intro_page_create (ia); ia->first_line = first_line_page_create (ia); @@ -114,7 +120,11 @@ text_data_import_assistant (PsppireDataWindow *dw) switch (ia->asst.response) { case GTK_RESPONSE_APPLY: - free (execute_syntax_string (dw, generate_syntax (ia))); + { + gchar *fn = g_path_get_basename (ia->file.file_name); + open_data_window (PSPPIRE_WINDOW (dw), fn, NULL, generate_syntax (ia)); + g_free (fn); + } break; case PSPPIRE_RESPONSE_PASTE: free (paste_syntax_to_window (generate_syntax (ia))); @@ -123,14 +133,11 @@ text_data_import_assistant (PsppireDataWindow *dw) break; } + if (ssp) { destroy_formats_page (ia); destroy_separators_page (ia); } - - destroy_assistant (ia); - destroy_file (ia); - free (ia); } /* Emits PSPP syntax to S that applies the dictionary attributes @@ -149,6 +156,7 @@ apply_dict (const struct dictionary *dict, struct string *s) enum val_type type = var_get_type (var); int width = var_get_width (var); enum measure measure = var_get_measure (var); + enum var_role role = var_get_role (var); enum alignment alignment = var_get_alignment (var); const struct fmt_spec *format = var_get_print_format (var); @@ -199,16 +207,13 @@ apply_dict (const struct dictionary *dict, struct string *s) name, var_get_label (var)); if (measure != var_default_measure (type)) syntax_gen_pspp (s, "VARIABLE LEVEL %ss (%ss).\n", - name, - (measure == MEASURE_NOMINAL ? "NOMINAL" - : measure == MEASURE_ORDINAL ? "ORDINAL" - : "SCALE")); + name, measure_to_syntax (measure)); + if (role != ROLE_INPUT) + syntax_gen_pspp (s, "VARIABLE ROLE /%ss %ss.\n", + var_role_to_syntax (role), name); if (alignment != var_default_alignment (type)) syntax_gen_pspp (s, "VARIABLE ALIGNMENT %ss (%ss).\n", - name, - (alignment == ALIGN_LEFT ? "LEFT" - : alignment == ALIGN_CENTRE ? "CENTER" - : "RIGHT")); + name, alignment_to_syntax (alignment)); if (var_get_display_width (var) != var_default_display_width (width)) syntax_gen_pspp (s, "VARIABLE WIDTH %ss (%d).\n", name, var_get_display_width (var)); @@ -223,6 +228,7 @@ generate_syntax (const struct import_assistant *ia) { struct string s = DS_EMPTY_INITIALIZER; + if (ia->spreadsheet == NULL) { syntax_gen_pspp (&s, "GET DATA" @@ -232,7 +238,6 @@ 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); - intro_append_syntax (ia->intro, &s); @@ -245,7 +250,11 @@ generate_syntax (const struct import_assistant *ia) formats_append_syntax (ia, &s); apply_dict (ia->dict, &s); } - + else + { + return sheet_spec_gen_syntax (ia); + } + return ds_cstr (&s); } @@ -562,8 +571,8 @@ get_string_width (PsppSheetView *treeview, GtkCellRenderer *renderer, { gint width; g_object_set (G_OBJECT (renderer), "text", string, (void *) NULL); - gtk_cell_renderer_get_size (renderer, GTK_WIDGET (treeview), - NULL, NULL, NULL, &width, NULL); + gtk_cell_renderer_get_preferred_width (renderer, GTK_WIDGET (treeview), + NULL, &width); return width; } @@ -645,8 +654,8 @@ push_watch_cursor (struct import_assistant *ia) GtkWidget *widget = GTK_WIDGET (ia->asst.assistant); GdkDisplay *display = gtk_widget_get_display (widget); GdkCursor *cursor = gdk_cursor_new_for_display (display, GDK_WATCH); - gdk_window_set_cursor (widget->window, cursor); - gdk_cursor_unref (cursor); + gdk_window_set_cursor (gtk_widget_get_window (widget), cursor); + g_object_unref (cursor); gdk_display_flush (display); } } @@ -659,6 +668,6 @@ pop_watch_cursor (struct import_assistant *ia) if (--ia->asst.watch_cursor == 0) { GtkWidget *widget = GTK_WIDGET (ia->asst.assistant); - gdk_window_set_cursor (widget->window, NULL); + gdk_window_set_cursor (gtk_widget_get_window (widget), NULL); } }