1 /* PSPPIRE - a graphical user interface for PSPP.
2 Copyright (C) 2008, 2010, 2011, 2013 Free Software Foundation
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 #ifndef TEXT_DATA_IMPORT_DIALOG_H
18 #define TEXT_DATA_IMPORT_DIALOG_H
20 #include <glib-object.h>
21 #include "ui/gui/psppire-data-window.h"
22 #include "data/spreadsheet-reader.h"
24 #include "libpspp/str.h"
26 enum { MAX_PREVIEW_LINES = 1000 }; /* Max number of lines to read. */
28 /* The file to be imported. */
31 char *file_name; /* File name. */
33 /* Relevant only for text files */
35 gchar *encoding; /* Encoding. */
36 unsigned long int total_lines; /* Number of lines in file. */
37 bool total_is_exact; /* Is total_lines exact (or an estimate)? */
39 /* The first several lines of the file. */
44 /* The main body of the GTK+ assistant and related data. */
48 GtkAssistant *assistant;
50 GtkWidget *paste_button;
51 GtkWidget *reset_button;
55 GtkCellRenderer *prop_renderer;
56 GtkCellRenderer *fixed_renderer;
62 /* Page where the user verifies and adjusts input formats. */
65 struct dictionary *dict;
68 GtkTreeView *data_tree_view;
69 PsppireDict *psppire_dict;
70 struct variable **modified_vars;
71 size_t modified_var_cnt;
75 struct import_assistant
78 struct assistant asst;
80 struct intro_page *intro;
81 struct sheet_spec_page *sheet_spec;
82 struct first_line_page *first_line;
83 struct separators_page *separators;
84 struct formats_page *formats;
86 /* The columns produced. */
87 struct column *columns; /* Information about each column. */
88 size_t column_cnt; /* Number of columns. */
90 int skip_lines; /* Number of initial lines to skip? */
91 bool variable_names; /* Variable names above first line of data? */
99 /* Variable name for this column. This is the variable name
100 used on the separators page; it can be overridden by the
101 user on the formats page. */
104 /* Maximum length of any row in this column. */
107 /* Contents of this column: contents[row] is the contents for
110 A null substring indicates a missing column for that row
111 (because the line contains an insufficient number of
114 contents[] elements may be substrings of the lines[]
115 strings that represent the whole lines of the file, to
116 save memory. Other elements are dynamically allocated
117 with ss_alloc_substring. */
118 struct substring *contents;
122 GtkWidget * add_page_to_assistant (struct import_assistant *ia,
123 GtkWidget *page, GtkAssistantPageType type);
125 void text_data_import_assistant (PsppireDataWindow *);
127 /* FIXME: Should this be private to first line page ? */
128 void make_tree_view (const struct import_assistant *ia,
130 GtkTreeView **tree_view);
132 gint get_monospace_width (GtkTreeView *, GtkCellRenderer *,
134 gint get_string_width (GtkTreeView *, GtkCellRenderer *,
139 void push_watch_cursor (struct import_assistant *);
140 void pop_watch_cursor (struct import_assistant *);
143 GtkTreeView *create_data_tree_view (bool input, GtkContainer *parent,
144 struct import_assistant *);
146 GtkTreeViewColumn *make_data_column (struct import_assistant *,
147 GtkTreeView *, bool input,
151 void update_assistant (struct import_assistant *ia);
153 bool init_file (struct import_assistant *ia, GtkWindow *parent_window);
154 void destroy_file (struct import_assistant *ia);
156 void prepare_sheet_spec_page (struct import_assistant *ia);
157 void reset_sheet_spec_page (struct import_assistant *);
158 void post_sheet_spec_page (struct import_assistant *ia);
160 void init_first_line_page (struct import_assistant *ia);
161 void prepare_first_line_page (struct import_assistant *ia);
162 void reset_first_line_page (struct import_assistant *);
164 void prepare_separators_page (struct import_assistant *ia);
165 void reset_separators_page (struct import_assistant *);
166 void destroy_separators_page (struct import_assistant *ia);
168 void init_formats_page (struct import_assistant *ia);
169 void prepare_formats_page (struct import_assistant *ia);
170 void reset_formats_page (struct import_assistant *);
171 void destroy_formats_page (struct import_assistant *ia);
173 struct import_assistant * init_assistant (GtkWindow *);
174 void destroy_assistant (struct import_assistant *);