X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpage-formats.c;h=f5a190c78c3d1f21ffcb07882ec77a94c2b9fb90;hb=03a7b96a587a58bda342b4eb5ce5f935880ba2b7;hp=ee9b540bdc703d1c07bcb116ca3bebec6b0e7127;hpb=b0b67aa7a5225aa92bc3c9ecd1a12822f89d2c45;p=pspp diff --git a/src/ui/gui/page-formats.c b/src/ui/gui/page-formats.c index ee9b540bdc..f5a190c78c 100644 --- a/src/ui/gui/page-formats.c +++ b/src/ui/gui/page-formats.c @@ -20,7 +20,6 @@ #include #include -#include #include #include #include @@ -36,7 +35,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" @@ -46,11 +44,8 @@ #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" -#include "gl/error.h" #include "gl/intprops.h" #include "gl/xalloc.h" @@ -58,32 +53,48 @@ #define _(msgid) gettext (msgid) #define N_(msgid) msgid +/* Page where the user verifies and adjusts input formats. */ +struct formats_page + { + GtkWidget *page; + PsppSheetView *data_tree_view; + PsppireDict *psppire_dict; + struct variable **modified_vars; + size_t modified_var_cnt; + }; + /* The "formats" page of the assistant. */ static void on_variable_change (PsppireDict *dict, int idx, + unsigned int what, + const struct variable *oldvar, struct import_assistant *); + static void clear_modified_vars (struct import_assistant *); /* Initializes IA's formats substructure. */ -void -init_formats_page (struct import_assistant *ia) + +struct formats_page * +formats_page_create (struct import_assistant *ia) { GtkBuilder *builder = ia->asst.builder; - struct formats_page *p = &ia->formats; + struct formats_page *p = xzalloc (sizeof *p); p->page = add_page_to_assistant (ia, get_widget_assert (builder, "Formats"), - GTK_ASSISTANT_PAGE_CONFIRM); - p->data_tree_view = GTK_TREE_VIEW (get_widget_assert (builder, "data")); + GTK_ASSISTANT_PAGE_CONFIRM); + + p->data_tree_view = PSPP_SHEET_VIEW (get_widget_assert (builder, "data")); p->modified_vars = NULL; p->modified_var_cnt = 0; - p->dict = NULL; + + return p; } /* Frees IA's formats substructure. */ void destroy_formats_page (struct import_assistant *ia) { - struct formats_page *p = &ia->formats; + struct formats_page *p = ia->formats; if (p->psppire_dict != NULL) { @@ -100,12 +111,10 @@ prepare_formats_page (struct import_assistant *ia) { struct dictionary *dict; PsppireDict *psppire_dict; - PsppireVarStore *var_store; GtkBin *vars_scroller; GtkWidget *old_var_sheet; PsppireVarSheet *var_sheet; - struct separators_page *s = &ia->separators; - struct formats_page *p = &ia->formats; + struct formats_page *p = ia->formats; struct fmt_guesser *fg; unsigned long int number = 0; size_t column_idx; @@ -114,15 +123,13 @@ prepare_formats_page (struct import_assistant *ia) dict = dict_create (get_default_encoding ()); fg = fmt_guesser_create (); - for (column_idx = 0; column_idx < s->column_cnt; column_idx++) + for (column_idx = 0; column_idx < ia->column_cnt; column_idx++) { - struct variable *modified_var; - - modified_var = (column_idx < p->modified_var_cnt - ? p->modified_vars[column_idx] : NULL); + struct variable *modified_var = + (column_idx < p->modified_var_cnt ? p->modified_vars[column_idx] : NULL); if (modified_var == NULL) { - struct column *column = &s->columns[column_idx]; + struct column *column = &ia->columns[column_idx]; struct variable *var; struct fmt_spec format; char *name; @@ -133,7 +140,7 @@ prepare_formats_page (struct import_assistant *ia) /* Choose variable format. */ fmt_guesser_clear (fg); - for (row = ia->first_line.skip_lines; row < ia->file.line_cnt; row++) + for (row = ia->skip_lines; row < ia->file.line_cnt; row++) fmt_guesser_add (fg, column->contents[row]); fmt_guesser_guess (fg, &format); fmt_fix_input (&format); @@ -157,23 +164,22 @@ prepare_formats_page (struct import_assistant *ia) fmt_guesser_destroy (fg); psppire_dict = psppire_dict_new_from_dict (dict); - g_signal_connect (psppire_dict, "variable_changed", + g_signal_connect (psppire_dict, "variable-changed", G_CALLBACK (on_variable_change), ia); - ia->formats.dict = dict; - ia->formats.psppire_dict = psppire_dict; + ia->dict = dict; + ia->formats->psppire_dict = psppire_dict; /* XXX: PsppireVarStore doesn't hold a reference to psppire_dict for now, but it should. After it does, we should g_object_ref the psppire_dict here, since we also - hold a reference via ia->formats.dict. */ - var_store = psppire_var_store_new (psppire_dict); - g_object_set (var_store, - "format-type", PSPPIRE_VAR_STORE_INPUT_FORMATS, - (void *) NULL); + hold a reference via ia->formats->dict. */ var_sheet = PSPPIRE_VAR_SHEET (psppire_var_sheet_new ()); g_object_set (var_sheet, - "model", var_store, + "dictionary", psppire_dict, "may-create-vars", FALSE, + "may-delete-vars", FALSE, + "format-use", FMT_FOR_INPUT, + "enable-grid-lines", PSPP_SHEET_VIEW_GRID_LINES_BOTH, (void *) NULL); vars_scroller = GTK_BIN (get_widget_assert (ia->asst.builder, "vars-scroller")); @@ -183,12 +189,14 @@ prepare_formats_page (struct import_assistant *ia) gtk_container_add (GTK_CONTAINER (vars_scroller), GTK_WIDGET (var_sheet)); gtk_widget_show (GTK_WIDGET (var_sheet)); - gtk_widget_destroy (GTK_WIDGET (ia->formats.data_tree_view)); - ia->formats.data_tree_view = create_data_tree_view ( + gtk_widget_destroy (GTK_WIDGET (ia->formats->data_tree_view)); + ia->formats->data_tree_view = create_data_tree_view ( false, GTK_CONTAINER (get_widget_assert (ia->asst.builder, "data-scroller")), ia); + gtk_widget_show (ia->asst.paste_button); + pop_watch_cursor (ia); } @@ -199,7 +207,7 @@ prepare_formats_page (struct import_assistant *ia) static void clear_modified_vars (struct import_assistant *ia) { - struct formats_page *p = &ia->formats; + struct formats_page *p = ia->formats; size_t i; for (i = 0; i < p->modified_var_cnt; i++) @@ -224,18 +232,19 @@ reset_formats_page (struct import_assistant *ia) dictionary. */ static void on_variable_change (PsppireDict *dict, int dict_idx, + unsigned int what, const struct variable *oldvar, struct import_assistant *ia) { - struct formats_page *p = &ia->formats; - GtkTreeView *tv = ia->formats.data_tree_view; + struct formats_page *p = ia->formats; + PsppSheetView *tv = ia->formats->data_tree_view; gint column_idx = dict_idx + 1; push_watch_cursor (ia); /* Remove previous column and replace with new column. */ - gtk_tree_view_remove_column (tv, gtk_tree_view_get_column (tv, column_idx)); - gtk_tree_view_insert_column (tv, make_data_column (ia, tv, false, dict_idx), - column_idx); + pspp_sheet_view_remove_column (tv, pspp_sheet_view_get_column (tv, column_idx)); + pspp_sheet_view_insert_column (tv, make_data_column (ia, tv, false, dict_idx), + column_idx); /* Save a copy of the modified variable in modified_vars, so that its attributes will be preserved if we back up to the @@ -259,3 +268,23 @@ on_variable_change (PsppireDict *dict, int dict_idx, } + + +void +formats_append_syntax (const struct import_assistant *ia, struct string *s) +{ + int i; + int var_cnt; + ds_put_cstr (s, " /VARIABLES=\n"); + + var_cnt = dict_get_var_cnt (ia->dict); + for (i = 0; i < var_cnt; i++) + { + struct variable *var = dict_get_var (ia->dict, i); + char format_string[FMT_STRING_LEN_MAX + 1]; + fmt_to_string (var_get_print_format (var), format_string); + ds_put_format (s, " %s %s%s\n", + var_get_name (var), format_string, + i == var_cnt - 1 ? "." : ""); + } +}