#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"
+
#include <errno.h>
#include <fcntl.h>
#include <gtk-contrib/psppire-sheet.h>
}
ssp = ia->sheet_spec;
- init_first_line_page (ia);
- init_formats_page (ia);
+ 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);
+ ia->separators = separators_page_create (ia);
+ }
+ ia->formats = formats_page_create (ia);
gtk_widget_show_all (GTK_WIDGET (ia->asst.assistant));
ia->asst.main_loop = g_main_loop_new (NULL, false);
- g_main_loop_run (ia->asst.main_loop);
+
+ {
+ /*
+ Instead of this block,
+ A simple g_main_loop_run (ia->asst.main_loop); should work here. But it seems to crash.
+ I have no idea why.
+ */
+ GMainContext *ctx = g_main_loop_get_context (ia->asst.main_loop);
+ ia->asst.loop_done = false;
+ while (! ia->asst.loop_done)
+ {
+ g_main_context_iteration (ctx, TRUE);
+ }
+ }
g_main_loop_unref (ia->asst.main_loop);
switch (ia->asst.response)
break;
}
- destroy_formats_page (ia);
- destroy_separators_page (ia);
+ if (ssp)
+ {
+ destroy_formats_page (ia);
+ destroy_separators_page (ia);
+ }
destroy_assistant (ia);
destroy_file (ia);
{
struct string s = DS_EMPTY_INITIALIZER;
-#if 0
- if (ssp->spreadsheet == NULL)
+ if (ia->spreadsheet == NULL)
{
- size_t var_cnt;
- size_t i;
syntax_gen_pspp (&s,
"GET DATA"
"\n /TYPE=TXT"
intro_append_syntax (ia->intro, &s);
+
ds_put_cstr (&s,
" /ARRANGEMENT=DELIMITED\n"
" /DELCASE=LINE\n");
- if (ia->first_line->skip_lines > 0)
- ds_put_format (&s, " /FIRSTCASE=%d\n", ia->first_line->skip_lines + 1);
- ds_put_cstr (&s, " /DELIMITERS=\"");
- if (ds_find_byte (&ia->separators->separators, '\t') != SIZE_MAX)
- ds_put_cstr (&s, "\\t");
- if (ds_find_byte (&ia->separators->separators, '\\') != SIZE_MAX)
- ds_put_cstr (&s, "\\\\");
- for (i = 0; i < ds_length (&ia->separators->separators); i++)
- {
- char c = ds_at (&ia->separators->separators, i);
- if (c == '"')
- ds_put_cstr (&s, "\"\"");
- else if (c != '\t' && c != '\\')
- ds_put_byte (&s, c);
- }
- ds_put_cstr (&s, "\"\n");
- if (!ds_is_empty (&ia->separators->quotes))
- syntax_gen_pspp (&s, " /QUALIFIER=%sq\n", ds_cstr (&ia->separators->quotes));
- if (!ds_is_empty (&ia->separators->quotes) && ia->separators->escape)
- ds_put_cstr (&s, " /ESCAPE\n");
- ds_put_cstr (&s, " /VARIABLES=\n");
-
- var_cnt = dict_get_var_cnt (ia->formats->dict);
- for (i = 0; i < var_cnt; i++)
- {
- struct variable *var = dict_get_var (ia->formats->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 ? "." : "");
- }
-
- apply_dict (ia->formats->dict, &s);
+
+ first_line_append_syntax (ia, &s);
+ separators_append_syntax (ia, &s);
+ formats_append_syntax (ia, &s);
+ apply_dict (ia->dict, &s);
}
else
-
{
- const struct sheet_spec_page *ssp = ia->sheet_spec;
-
- syntax_gen_pspp (&s,
- "GET DATA"
- "\n /TYPE=%ss"
- "\n /FILE=%sq"
- "\n /SHEET=index %d"
- "\n /READNAMES=%ss",
- (ssp->spreadsheet->type == SPREADSHEET_GNUMERIC) ? "GNM" : "ODS",
- ia->file.file_name,
- ssp->opts.sheet_index,
- ssp->sri.read_names ? "ON" : "OFF");
-
-
- if ( ssp->opts.cell_range)
- {
- syntax_gen_pspp (&s,
- "\n /CELLRANGE=RANGE %sq",
- ssp->opts.cell_range);
- }
- else
- {
- syntax_gen_pspp (&s,
- "\n /CELLRANGE=FULL");
- }
-
-
- syntax_gen_pspp (&s, ".");
+ return sheet_spec_gen_syntax (ia);
}
-
-#endif
+
return ds_cstr (&s);
}
column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_column),
"column-number"));
- row = empty_list_store_iter_to_row (iter) + ia->first_line->skip_lines;
+ row = empty_list_store_iter_to_row (iter) + ia->skip_lines;
field = ia->columns[column].contents[row];
if (field.string != NULL)
{
size_t row, size_t column,
char **outputp, char **tooltipp)
{
- struct substring field;
- union value val;
- struct variable *var;
const struct fmt_spec *in;
struct fmt_spec out;
char *tooltip;
bool ok;
- field = ia->columns[column].contents[row];
- var = dict_get_var (ia->formats->dict, column);
+ struct substring field = ia->columns[column].contents[row];
+ struct variable *var = dict_get_var (ia->dict, column);
+ union value val;
+
value_init (&val, var_get_width (var));
in = var_get_print_format (var);
out = fmt_for_output_from_input (in);
char *error;
error = data_in (field, "UTF-8", in->type, &val, var_get_width (var),
- dict_get_encoding (ia->formats->dict));
+ dict_get_encoding (ia->dict));
if (error != NULL)
{
tooltip = xasprintf (_("Cannot parse field content `%.*s' as "
}
if (outputp != NULL)
{
- *outputp = data_out (&val, dict_get_encoding (ia->formats->dict), &out);
+ *outputp = data_out (&val, dict_get_encoding (ia->dict), &out);
}
value_destroy (&val, var_get_width (var));
ok = parse_field (ia,
(empty_list_store_iter_to_row (iter)
- + ia->first_line->skip_lines),
+ + ia->skip_lines),
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_column),
"column-number")),
&output, NULL);
if (!ok)
return FALSE;
- *row = empty_list_store_iter_to_row (&iter) + ia->first_line->skip_lines;
+ *row = empty_list_store_iter_to_row (&iter) + ia->skip_lines;
return TRUE;
}
if (input)
column = &ia->columns[dict_idx];
else
- var = dict_get_var (ia->formats->dict, dict_idx);
+ var = dict_get_var (ia->dict, dict_idx);
name = escape_underscores (input ? column->name : var_get_name (var));
char_cnt = input ? column->width : var_get_print_format (var)->w;
GtkTreeView *tree_view;
gint i;
- make_tree_view (ia, ia->first_line->skip_lines, &tree_view);
+ make_tree_view (ia, ia->skip_lines, &tree_view);
gtk_tree_selection_set_mode (gtk_tree_view_get_selection (tree_view),
GTK_SELECTION_NONE);