X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-import-assistant.c;h=edab2288f266a7a6ac50ca903f278cbd968a37ef;hb=2bbf5d66eeeffdbcded913145f05b9a6046056fa;hp=e376bacc7e667cf3ae9076d071c193fa940936ea;hpb=8d6bfdd2a100bf8166b3b0b3f006d46f3e7a59e9;p=pspp diff --git a/src/ui/gui/psppire-import-assistant.c b/src/ui/gui/psppire-import-assistant.c index e376bacc7e..edab2288f2 100644 --- a/src/ui/gui/psppire-import-assistant.c +++ b/src/ui/gui/psppire-import-assistant.c @@ -1024,32 +1024,6 @@ psppire_import_assistant_new (GtkWindow *toplevel) -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) @@ -1159,10 +1133,9 @@ separators_page_create (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) { @@ -1251,6 +1224,64 @@ my_advance (struct casereader *reader, void *aux, casenumber cnt) g_print ("%s:%d\n", __FILE__, __LINE__); } +static struct casereader * +textfile_create_reader (PsppireImportAssistant *ia) +{ + int n_vars = dict_get_var_cnt (ia->dict); + + int i; + + struct fmt_guesser **fg = xcalloc (sizeof *fg, n_vars); + for (i = 0 ; i < n_vars; ++i) + { + fg[i] = fmt_guesser_create (); + } + + gint n_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (ia->delimiters_model), NULL); + + GtkTreeIter iter; + gboolean ok; + for (ok = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ia->delimiters_model), &iter); + ok; + ok = gtk_tree_model_iter_next (GTK_TREE_MODEL (ia->delimiters_model), &iter)) + { + 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); + if (s) + fmt_guesser_add (fg[i], ss_cstr (s)); + free (s); + } + } + + struct caseproto *proto = caseproto_create (); + for (i = 0 ; i < n_vars; ++i) + { + struct fmt_spec fs; + fmt_guesser_guess (fg[i], &fs); + + fmt_fix (&fs, FMT_FOR_INPUT); + + struct variable *var = dict_get_var (ia->dict, i); + + int width = fmt_var_width (&fs); + + var_set_width_and_formats (var, width, + &fs, &fs); + + proto = caseproto_add_width (proto, width); + fmt_guesser_destroy (fg[i]); + } + + free (fg); + + struct casereader *cr = casereader_create_random (proto, n_rows, &my_casereader_class, ia); + caseproto_unref (proto); + return cr; +} + + /* Called just before the formats page of the assistant is displayed. */ static void @@ -1284,64 +1315,14 @@ prepare_formats_page (PsppireImportAssistant *ia) } else { - PsppireDict *dict = psppire_dict_new_from_dict (ia->dict); - g_object_set (ia->var_sheet, "data-model", dict, NULL); - - 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) - { - fg[i] = fmt_guesser_create (); - } - - gint n_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (ia->delimiters_model), NULL); - - GtkTreeIter iter; - gboolean ok; - for (ok = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ia->delimiters_model), &iter); - 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) - { - gchar *s = NULL; - gtk_tree_model_get (GTK_TREE_MODEL (ia->delimiters_model), &iter, i+1, &s, -1); - if (s) - fmt_guesser_add (fg[i], ss_cstr (s)); - free (s); - } - } - - struct caseproto *proto = caseproto_create (); - for (i = 0 ; i < dict_get_var_cnt (ia->dict); ++i) - { - struct fmt_spec fs; - fmt_guesser_guess (fg[i], &fs); - - fmt_fix (&fs, FMT_FOR_INPUT); - - struct variable *var = dict_get_var (ia->dict, i); - - int width = fmt_var_width (&fs); - - var_set_width_and_formats (var, width, - &fs, &fs); - - proto = caseproto_add_width (proto, width); - fmt_guesser_destroy (fg[i]); - } - - free (fg); - - struct casereader *reader = - casereader_create_random (proto, n_rows, &my_casereader_class, ia); + struct casereader *reader = textfile_create_reader (ia); + 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); - caseproto_unref (proto); + g_object_set (ia->var_sheet, "data-model", dict, NULL); } gint pmax; @@ -1415,8 +1396,15 @@ separators_append_syntax (const PsppireImportAssistant *ia, struct string *s) } } 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 @@ -1643,4 +1631,3 @@ psppire_import_assistant_run (PsppireImportAssistant *asst) g_main_loop_run (asst->main_loop); return asst->response; } -