/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2015, 2016, 2017 Free Software Foundation
+ Copyright (C) 2015, 2016, 2017, 2018 Free Software Foundation
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
ds_destroy (&ia->quotes);
+ dict_unref (ia->dict);
+
g_object_unref (ia->builder);
ia->response = -1;
\f
-static void
-set_quote_list (GtkComboBox *cb)
-{
- GtkListStore *list = gtk_list_store_new (1, G_TYPE_STRING);
- GtkTreeIter iter;
- gint i;
- const gchar *separator[3] = {"'\"", "\'", "\""};
-
- for (i = 0; i < 3; i++)
- {
- const gchar *s = separator[i];
-
- /* Add a new row to the model */
- gtk_list_store_append (list, &iter);
- gtk_list_store_set (list, &iter,
- 0, s,
- -1);
-
- }
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (cb), GTK_TREE_MODEL (list));
- g_object_unref (list);
-
- gtk_combo_box_set_entry_text_column (cb, 0);
-}
-
/* Chooses a name for each column on the separators page */
static void
choose_column_names (PsppireImportAssistant *ia)
ia->custom_cb = get_widget_assert (builder, "custom-cb");
ia->custom_entry = get_widget_assert (builder, "custom-entry");
ia->quote_combo = get_widget_assert (builder, "quote-combo");
- ia->quote_entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (ia->quote_combo)));
ia->quote_cb = get_widget_assert (builder, "quote-cb");
- set_quote_list (GTK_COMBO_BOX (ia->quote_combo));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (ia->quote_combo), 0);
if (ia->fields_tree_view == NULL)
{
g_print ("%s:%d\n", __FILE__, __LINE__);
}
-static void
-foo (struct dictionary *dict, void *aux)
-{
- PsppireImportAssistant *ia = PSPPIRE_IMPORT_ASSISTANT (aux);
- g_print ("%s:%d\n", __FILE__, __LINE__);
-
- struct caseproto *proto = caseproto_create ();
-
- int i;
- for (i = 0 ; i < dict_get_var_cnt (ia->dict); ++i)
- {
- const struct variable *var = dict_get_var (ia->dict, i);
- proto = caseproto_add_width (proto, var_get_width (var));
- }
-
-
- gint n_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (ia->delimiters_model), NULL);
-
- struct casereader *reader =
- casereader_create_random (proto, n_rows, &my_casereader_class, ia);
-
-
- PsppireDataStore *store = NULL;
-
- g_object_get (ia->data_sheet, "data-model", &store, NULL);
-
- psppire_data_store_set_reader (store, reader);
-}
-
-/* Called just before the formats page of the assistant is
- displayed. */
-static void
-prepare_formats_page (PsppireImportAssistant *ia)
+static struct casereader *
+textfile_create_reader (PsppireImportAssistant *ia)
{
- PsppireDict *dict = psppire_dict_new_from_dict (ia->dict);
- g_object_set (ia->var_sheet, "data-model", dict, NULL);
-
- my_casereader_class.read = my_read;
- my_casereader_class.destroy = my_destroy;
- my_casereader_class.advance = my_advance;
+ int n_vars = dict_get_var_cnt (ia->dict);
- struct caseproto *proto = caseproto_create ();
int i;
- struct fmt_guesser **fg = xcalloc (sizeof *fg, dict_get_var_cnt (ia->dict));
- for (i = 0 ; i < dict_get_var_cnt (ia->dict); ++i)
+ struct fmt_guesser **fg = xcalloc (sizeof *fg, n_vars);
+ for (i = 0 ; i < n_vars; ++i)
{
fg[i] = fmt_guesser_create ();
}
ok;
ok = gtk_tree_model_iter_next (GTK_TREE_MODEL (ia->delimiters_model), &iter))
{
- for (i = 0 ; i < dict_get_var_cnt (ia->dict); ++i)
+ for (i = 0 ; i < n_vars; ++i)
{
gchar *s = NULL;
gtk_tree_model_get (GTK_TREE_MODEL (ia->delimiters_model), &iter, i+1, &s, -1);
}
}
- for (i = 0 ; i < dict_get_var_cnt (ia->dict); ++i)
+ struct caseproto *proto = caseproto_create ();
+ for (i = 0 ; i < n_vars; ++i)
{
struct fmt_spec fs;
fmt_guesser_guess (fg[i], &fs);
free (fg);
- // dict_set_change_callback (ia->dict, foo, ia);
+ struct casereader *cr = casereader_create_random (proto, n_rows, &my_casereader_class, ia);
+ caseproto_unref (proto);
+ return cr;
+}
+
- struct casereader *reader =
- casereader_create_random (proto, n_rows, &my_casereader_class, ia);
+/* Called just before the formats page of the assistant is
+ displayed. */
+static void
+prepare_formats_page (PsppireImportAssistant *ia)
+{
+ my_casereader_class.read = my_read;
+ my_casereader_class.destroy = my_destroy;
+ my_casereader_class.advance = my_advance;
- PsppireDataStore *store = psppire_data_store_new (dict);
- psppire_data_store_set_reader (store, reader);
+ if (ia->spreadsheet)
+ {
+ GtkBuilder *builder = ia->builder;
+ GtkWidget *range_entry = get_widget_assert (builder, "cell-range-entry");
+ GtkWidget *rnc = get_widget_assert (builder, "readnames-checkbox");
+ GtkWidget *combo_box = get_widget_assert (builder, "sheet-entry");
+
+ struct spreadsheet_read_options opts;
+ opts.sheet_name = NULL;
+ opts.sheet_index = gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box)) + 1;
+ opts.read_names = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rnc));
+ opts.cell_range = g_strdup (gtk_entry_get_text (GTK_ENTRY (range_entry)));
+ opts.asw = 8;
+
+ struct casereader *reader = spreadsheet_make_reader (ia->spreadsheet, &opts);
+
+ PsppireDict *dict = psppire_dict_new_from_dict (ia->spreadsheet->dict);
+ PsppireDataStore *store = psppire_data_store_new (dict);
+ psppire_data_store_set_reader (store, reader);
+ g_object_set (ia->data_sheet, "data-model", store, NULL);
+ g_object_set (ia->var_sheet, "data-model", dict, NULL);
+ }
+ else
+ {
+ struct casereader *reader = textfile_create_reader (ia);
- g_object_set (ia->data_sheet, "data-model", store, NULL);
+ PsppireDict *dict = psppire_dict_new_from_dict (ia->dict);
+ PsppireDataStore *store = psppire_data_store_new (dict);
+ psppire_data_store_set_reader (store, reader);
+ g_object_set (ia->data_sheet, "data-model", store, NULL);
+ g_object_set (ia->var_sheet, "data-model", dict, NULL);
+ }
gint pmax;
g_object_get (get_widget_assert (ia->builder, "vpaned1"),
if (ia->data_sheet == NULL)
{
ia->data_sheet = psppire_data_sheet_new ();
+ g_object_set (ia->data_sheet, "editable", FALSE, NULL);
gtk_container_add (GTK_CONTAINER (data_scroller), ia->data_sheet);
}
}
ds_put_cstr (s, "\"\n");
- if (!ds_is_empty (&ia->quotes))
- syntax_gen_pspp (s, " /QUALIFIER=%sq\n", ds_cstr (&ia->quotes));
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ia->quote_cb)))
+ {
+ GtkComboBoxText *cbt = GTK_COMBO_BOX_TEXT (ia->quote_combo);
+ gchar *quotes = gtk_combo_box_text_get_active_text (cbt);
+ if (quotes && *quotes)
+ syntax_gen_pspp (s, " /QUALIFIER=%sq\n", quotes);
+ free (quotes);
+ }
}
static void
-static char *
-sheet_spec_gen_syntax (PsppireImportAssistant *ia)
+static void
+sheet_spec_gen_syntax (PsppireImportAssistant *ia, struct string *s)
{
GtkBuilder *builder = ia->builder;
GtkWidget *range_entry = get_widget_assert (builder, "cell-range-entry");
int sheet_index = 1 + gtk_combo_box_get_active (GTK_COMBO_BOX (sheet_entry));
gboolean read_names = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rnc));
- struct string s = DS_EMPTY_INITIALIZER;
char *filename;
- g_object_get (ia->text_file, "file-name", &filename, NULL);
- syntax_gen_pspp (&s,
+ if (ia->spreadsheet)
+ filename = ia->spreadsheet->file_name;
+ else
+ g_object_get (ia->text_file, "file-name", &filename, NULL);
+ syntax_gen_pspp (s,
"GET DATA"
"\n /TYPE=%ss"
"\n /FILE=%sq"
if (range && 0 != strcmp ("", range))
{
- syntax_gen_pspp (&s,
+ syntax_gen_pspp (s,
"\n /CELLRANGE=RANGE %sq", range);
}
else
{
- syntax_gen_pspp (&s,
+ syntax_gen_pspp (s,
"\n /CELLRANGE=FULL");
}
- syntax_gen_pspp (&s, ".");
-
-
- return ds_cstr (&s);
+ syntax_gen_pspp (s, ".\n");
}
}
else
{
- return sheet_spec_gen_syntax (ia);
+ sheet_spec_gen_syntax (ia, &s);
}
return ds_cstr (&s);
g_main_loop_run (asst->main_loop);
return asst->response;
}
-