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"
33 /* The file to be imported. */
36 char *file_name; /* File name. */
40 /* Relevant only for text files */
42 gchar *encoding; /* Encoding. */
43 unsigned long int total_lines; /* Number of lines in file. */
44 bool total_is_exact; /* Is total_lines exact (or an estimate)? */
46 /* The first several lines of the file. */
51 /* The main body of the GTK+ assistant and related data. */
55 GtkAssistant *assistant;
57 GtkWidget *paste_button;
58 GtkWidget *reset_button;
62 GtkCellRenderer *prop_renderer;
63 GtkCellRenderer *fixed_renderer;
67 /* The sheet_spec page of the assistant (only relevant for spreadsheet imports). */
68 struct sheet_spec_page
71 struct casereader *reader;
72 struct dictionary *dict;
73 struct spreadsheet *spreadsheet;
75 struct spreadsheet_read_info sri;
76 struct spreadsheet_read_options opts;
80 /* The introduction page of the assistant. */
84 GtkWidget *all_cases_button;
85 GtkWidget *n_cases_button;
86 GtkWidget *n_cases_spin;
87 GtkWidget *percent_button;
88 GtkWidget *percent_spin;
91 /* Page where the user chooses the first line of data. */
92 struct first_line_page
94 int skip_lines; /* Number of initial lines to skip? */
95 bool variable_names; /* Variable names above first line of data? */
98 GtkTreeView *tree_view;
99 GtkWidget *variable_names_cb;
103 /* Page where the user chooses field separators. */
104 struct separators_page
106 /* How to break lines into columns. */
107 struct string separators; /* Field separators. */
108 struct string quotes; /* Quote characters. */
109 bool escape; /* Doubled quotes yield a quote mark? */
111 /* The columns produced thereby. */
112 struct column *columns; /* Information about each column. */
113 size_t column_cnt; /* Number of columns. */
116 GtkWidget *custom_cb;
117 GtkWidget *custom_entry;
119 GtkWidget *quote_combo;
120 GtkEntry *quote_entry;
121 GtkWidget *escape_cb;
122 GtkTreeView *fields_tree_view;
125 /* Page where the user verifies and adjusts input formats. */
128 struct dictionary *dict;
131 GtkTreeView *data_tree_view;
132 PsppireDict *psppire_dict;
133 struct variable **modified_vars;
134 size_t modified_var_cnt;
138 struct import_assistant
141 struct assistant asst;
142 struct intro_page intro;
143 struct sheet_spec_page sheet_spec;
144 struct first_line_page first_line;
145 struct separators_page separators;
146 struct formats_page formats;
154 /* Variable name for this column. This is the variable name
155 used on the separators page; it can be overridden by the
156 user on the formats page. */
159 /* Maximum length of any row in this column. */
162 /* Contents of this column: contents[row] is the contents for
165 A null substring indicates a missing column for that row
166 (because the line contains an insufficient number of
169 contents[] elements may be substrings of the lines[]
170 strings that represent the whole lines of the file, to
171 save memory. Other elements are dynamically allocated
172 with ss_alloc_substring. */
173 struct substring *contents;
177 GtkWidget * add_page_to_assistant (struct import_assistant *ia,
178 GtkWidget *page, GtkAssistantPageType type);
180 void text_data_import_assistant (PsppireDataWindow *);
182 /* FIXME: Should this be private to first line page ? */
183 void make_tree_view (const struct import_assistant *ia,
185 GtkTreeView **tree_view);
187 gint get_monospace_width (GtkTreeView *, GtkCellRenderer *,
189 gint get_string_width (GtkTreeView *, GtkCellRenderer *,
194 void push_watch_cursor (struct import_assistant *);
195 void pop_watch_cursor (struct import_assistant *);
198 GtkTreeView *create_data_tree_view (bool input, GtkContainer *parent,
199 struct import_assistant *);
201 GtkTreeViewColumn *make_data_column (struct import_assistant *,
202 GtkTreeView *, bool input,
206 void update_assistant (struct import_assistant *ia);
209 bool init_file (struct import_assistant *ia, GtkWindow *parent_window);
210 void destroy_file (struct import_assistant *ia);
213 void init_intro_page (struct import_assistant *);
214 void reset_intro_page (struct import_assistant *);
216 void init_sheet_spec_page (struct import_assistant *);
217 void prepare_sheet_spec_page (struct import_assistant *ia);
218 void reset_sheet_spec_page (struct import_assistant *);
219 void post_sheet_spec_page (struct import_assistant *ia);
221 void init_first_line_page (struct import_assistant *ia);
222 void prepare_first_line_page (struct import_assistant *ia);
223 void reset_first_line_page (struct import_assistant *);
225 void init_separators_page (struct import_assistant *ia);
226 void prepare_separators_page (struct import_assistant *ia);
227 void reset_separators_page (struct import_assistant *);
228 void destroy_separators_page (struct import_assistant *ia);
230 void init_formats_page (struct import_assistant *ia);
231 void prepare_formats_page (struct import_assistant *ia);
232 void reset_formats_page (struct import_assistant *);
233 void destroy_formats_page (struct import_assistant *ia);
235 void init_assistant (struct import_assistant *, GtkWindow *);
236 void destroy_assistant (struct import_assistant *);