Only one spreadsheet
[pspp] / src / ui / gui / page-formats.c
index c79551fb04415071ffabd26455ea183d3f0c17c9..9bce4d3204ceb7260cef7e9388aca05cbf194f02 100644 (file)
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
 
+/* Page where the user verifies and adjusts input formats. */
+struct formats_page
+  {
+    GtkWidget *page;
+    GtkTreeView *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,
@@ -65,25 +75,27 @@ static void on_variable_change (PsppireDict *dict, int idx,
 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"));
   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)
     {
@@ -104,8 +116,8 @@ prepare_formats_page (struct import_assistant *ia)
   GtkBin *vars_scroller;
   GtkWidget *old_var_sheet;
   PsppireVarSheet *var_sheet;
-  struct separators_page *seps = &ia->separators;
-  struct formats_page *p = &ia->formats;
+  struct separators_page *seps = ia->separators;
+  struct formats_page *p = ia->formats;
   struct fmt_guesser *fg;
   unsigned long int number = 0;
   size_t column_idx;
@@ -114,8 +126,7 @@ prepare_formats_page (struct import_assistant *ia)
 
   dict = dict_create (get_default_encoding ());
   fg = fmt_guesser_create ();
-  printf ("%s:%d Column count %d\n", __FILE__, __LINE__, seps->column_cnt);
-  for (column_idx = 0; column_idx < seps->column_cnt; column_idx++)
+  for (column_idx = 0; column_idx < ia->column_cnt; column_idx++)
     {
       struct variable *modified_var;
 
@@ -123,7 +134,7 @@ prepare_formats_page (struct import_assistant *ia)
                       ? p->modified_vars[column_idx] : NULL);
       if (modified_var == NULL)
         {
-          struct column *column = &seps->columns[column_idx];
+          struct column *column = &ia->columns[column_idx];
           struct variable *var;
           struct fmt_spec format;
           char *name;
@@ -134,7 +145,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);
@@ -160,13 +171,13 @@ prepare_formats_page (struct import_assistant *ia)
   psppire_dict = psppire_dict_new_from_dict (dict);
   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. */
+     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,
@@ -184,8 +195,8 @@ 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);
@@ -200,7 +211,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++)
@@ -227,8 +238,8 @@ static void
 on_variable_change (PsppireDict *dict, int dict_idx,
                     struct import_assistant *ia)
 {
-  struct formats_page *p = &ia->formats;
-  GtkTreeView *tv = ia->formats.data_tree_view;
+  struct formats_page *p = ia->formats;
+  GtkTreeView *tv = ia->formats->data_tree_view;
   gint column_idx = dict_idx + 1;
 
   push_watch_cursor (ia);