-/* Called when one of the radio buttons is clicked. */
-static void
-on_intro_amount_changed (PsppireImportAssistant *p)
-{
- gtk_widget_set_sensitive (p->n_cases_spin,
- gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (p->n_cases_button)));
-
- gtk_widget_set_sensitive (p->percent_spin,
- gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (p->percent_button)));
-}
-
-static void
-on_treeview_selection_change (PsppireImportAssistant *ia)
-{
- GtkTreeSelection *selection =
- gtk_tree_view_get_selection (GTK_TREE_VIEW (ia->first_line_tree_view));
- GtkTreeModel *model = NULL;
- GtkTreeIter iter;
- if (gtk_tree_selection_get_selected (selection, &model, &iter))
- {
- gint max_lines;
- int n;
- GtkTreePath *path = gtk_tree_model_get_path (model, &iter);
- gint *index = gtk_tree_path_get_indices (path);
- n = *index;
- gtk_tree_path_free (path);
- g_object_get (model, "maximum-lines", &max_lines, NULL);
- gtk_widget_set_sensitive (ia->variable_names_cb,
- (n > 0 && n < max_lines));
- ia->delimiters_model =
- psppire_delimited_text_new (GTK_TREE_MODEL (ia->text_file));
- g_object_set (ia->delimiters_model, "first-line", n, NULL);
- }
-}
-
-static void
-render_text_preview_line (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- /*
- Set the text to a "insensitive" state if the row
- is greater than what the user declared to be the maximum.
- */
- GtkTreePath *path = gtk_tree_model_get_path (tree_model, iter);
- gint *ii = gtk_tree_path_get_indices (path);
- gint max_lines;
- g_object_get (tree_model, "maximum-lines", &max_lines, NULL);
- g_object_set (cell, "sensitive", (*ii < max_lines), NULL);
- gtk_tree_path_free (path);
-}
-
-/* Initializes IA's first_line substructure. */
-static void
-first_line_page_create (PsppireImportAssistant *ia)
-{
- GtkWidget *w = get_widget_assert (ia->builder, "FirstLine");
-
- g_object_set_data (G_OBJECT (w), "on-entering", on_treeview_selection_change);
-
- add_page_to_assistant (ia, w,
- GTK_ASSISTANT_PAGE_CONTENT, _("Select the First Line"));
-
- GtkWidget *scrolled_window = get_widget_assert (ia->builder, "first-line-scroller");
-
- if (ia->first_line_tree_view == NULL)
- {
- ia->first_line_tree_view = gtk_tree_view_new ();
- g_object_set (ia->first_line_tree_view, "enable-search", FALSE, NULL);
-
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (ia->first_line_tree_view), TRUE);
-
- GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
- GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes (_("Line"), renderer,
- "text", 0,
- NULL);
-
- gtk_tree_view_column_set_cell_data_func (column, renderer, render_text_preview_line, ia, 0);
- gtk_tree_view_append_column (GTK_TREE_VIEW (ia->first_line_tree_view), column);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("Text"), renderer, "text", 1, NULL);
- gtk_tree_view_column_set_cell_data_func (column, renderer, render_text_preview_line, ia, 0);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (ia->first_line_tree_view), column);
-
- g_signal_connect_swapped (ia->first_line_tree_view, "cursor-changed",
- G_CALLBACK (on_treeview_selection_change), ia);
- gtk_container_add (GTK_CONTAINER (scrolled_window), ia->first_line_tree_view);
- }
-
- gtk_widget_show_all (scrolled_window);
-
- ia->variable_names_cb = get_widget_assert (ia->builder, "variable-names");
-}
-
-static void
-intro_on_leave (PsppireImportAssistant *ia)
-{
- gint lc = 0;
- g_object_get (ia->text_file, "line-count", &lc, NULL);
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ia->n_cases_button)))
- {
- gint max_lines = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (ia->n_cases_spin));
- g_object_set (ia->text_file, "maximum-lines", max_lines, NULL);
- }
- else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ia->percent_button)))
- {
- gdouble percent = gtk_spin_button_get_value (GTK_SPIN_BUTTON (ia->percent_spin));
- g_object_set (ia->text_file, "maximum-lines", (gint) (lc * percent / 100.0), NULL);
- }
- else
- {
- g_object_set (ia->text_file, "maximum-lines", lc, NULL);
- }
-}
-
-
-static void
-intro_on_enter (PsppireImportAssistant *ia)
-{
- GtkBuilder *builder = ia->builder;
- GtkWidget *table = get_widget_assert (builder, "button-table");
-
- struct string s;
-
- ds_init_empty (&s);
- ds_put_cstr (&s, _("This assistant will guide you through the process of "
- "importing data into PSPP from a text file with one line "
- "per case, in which fields are separated by tabs, "
- "commas, or other delimiters.\n\n"));
-
- if (ia->text_file)
- {
- if (ia->text_file->total_is_exact)
- {
- ds_put_format (
- &s, ngettext ("The selected file contains %'lu line of text. ",
- "The selected file contains %'lu lines of text. ",
- ia->text_file->total_lines),
- ia->text_file->total_lines);
- }
- else if (ia->text_file->total_lines > 0)
- {
- ds_put_format (
- &s, ngettext (
- "The selected file contains approximately %'lu line of text. ",
- "The selected file contains approximately %'lu lines of text. ",
- ia->text_file->total_lines),
- ia->text_file->total_lines);
- ds_put_format (
- &s, ngettext (
- "Only the first %zu line of the file will be shown for "
- "preview purposes in the following screens. ",
- "Only the first %zu lines of the file will be shown for "
- "preview purposes in the following screens. ",
- ia->text_file->line_cnt),
- ia->text_file->line_cnt);
- }
- }
-
- ds_put_cstr (&s, _("You may choose below how much of the file should "
- "actually be imported."));
-
- gtk_label_set_text (GTK_LABEL (get_widget_assert (builder, "intro-label")),
- ds_cstr (&s));
- ds_destroy (&s);
-
- if (gtk_grid_get_child_at (GTK_GRID (table), 1, 1) == NULL)
- {
- GtkWidget *hbox_n_cases = psppire_scanf_new (_("Only the first %4d cases"), &ia->n_cases_spin);
- gtk_grid_attach (GTK_GRID (table), hbox_n_cases,
- 1, 1,
- 1, 1);
- }
-
- GtkAdjustment *adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (ia->n_cases_spin));
- gtk_adjustment_set_lower (adj, 1.0);
-
- if (gtk_grid_get_child_at (GTK_GRID (table), 1, 2) == NULL)
- {
- GtkWidget *hbox_percent = psppire_scanf_new (_("Only the first %3d %% of file (approximately)"),
- &ia->percent_spin);
-
- gtk_grid_attach (GTK_GRID (table), hbox_percent,
- 1, 2,
- 1, 1);
- }
-
- gtk_widget_show_all (table);
-
- on_intro_amount_changed (ia);
-}
-
-/* Initializes IA's intro substructure. */
-static void
-intro_page_create (PsppireImportAssistant *ia)
-{
- GtkBuilder *builder = ia->builder;
-
- GtkWidget *w = get_widget_assert (builder, "Intro");
-
- ia->percent_spin = gtk_spin_button_new_with_range (0, 100, 10);
-
-
- add_page_to_assistant (ia, w, GTK_ASSISTANT_PAGE_CONTENT, _("Select the Lines to Import"));
-
- ia->all_cases_button = get_widget_assert (builder, "import-all-cases");
-
- ia->n_cases_button = get_widget_assert (builder, "import-n-cases");
-
- ia->percent_button = get_widget_assert (builder, "import-percent");
-
- g_signal_connect_swapped (ia->all_cases_button, "toggled",
- G_CALLBACK (on_intro_amount_changed), ia);
- g_signal_connect_swapped (ia->n_cases_button, "toggled",
- G_CALLBACK (on_intro_amount_changed), ia);
- g_signal_connect_swapped (ia->percent_button, "toggled",
- G_CALLBACK (on_intro_amount_changed), ia);
-
-
- g_object_set_data (G_OBJECT (w), "on-forward", intro_on_leave);
- g_object_set_data (G_OBJECT (w), "on-entering", intro_on_enter);
- g_object_set_data (G_OBJECT (w), "on-reset", reset_intro_page);
-}
-
-