static void back_clicked (G_GNUC_UNUSED GtkWidget *widget, StfDialogData *data) { StfDialogPage newpos; switch (gtk_notebook_get_current_page (data->notebook)) { case DPG_FORMAT: stf_preview_set_lines (data->format.renderdata, NULL, NULL); if (data->parseoptions->parsetype == PARSE_TYPE_CSV) newpos = DPG_CSV; else newpos = DPG_FIXED; break; case DPG_FIXED: stf_preview_set_lines (data->fixed.renderdata, NULL, NULL); newpos = DPG_MAIN; break; case DPG_CSV: stf_preview_set_lines (data->csv.renderdata, NULL, NULL); newpos = DPG_MAIN; break; default: g_assert_not_reached (); return; } gtk_notebook_set_current_page (data->notebook, newpos); prepare_page (data); frob_buttons (data); stf_dialog_set_initial_keyboard_focus (data); }
static void next_clicked (G_GNUC_UNUSED GtkWidget *widget, StfDialogData *data) { StfDialogPage newpos; switch (gtk_notebook_get_current_page (data->notebook)) { case DPG_MAIN: stf_preview_set_lines (data->main.renderdata, NULL, NULL); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->main.main_separated))) { newpos = DPG_CSV; } else { newpos = DPG_FIXED; } break; case DPG_CSV: stf_preview_set_lines (data->csv.renderdata, NULL, NULL); newpos = DPG_FORMAT; break; case DPG_FIXED: stf_preview_set_lines (data->fixed.renderdata, NULL, NULL); newpos = DPG_FORMAT; break; default: g_assert_not_reached (); return; } gtk_notebook_set_current_page (data->notebook, newpos); prepare_page (data); frob_buttons (data); stf_dialog_set_initial_keyboard_focus (data); }
/** * csv_page_global_change * @widget : the widget which emitted the signal * @data : mother struct * * This will update the preview based on the state of * the widgets on the csv page * * returns : nothing **/ static void csv_page_global_change (G_GNUC_UNUSED GtkWidget *widget, StfDialogData *pagedata) { StfParseOptions_t *parseoptions = pagedata->parseoptions; RenderData_t *renderdata = pagedata->csv.renderdata; GSList *sepstr; GString *sepc = g_string_new (NULL); GStringChunk *lines_chunk; GPtrArray *lines; StfTrimType_t trim; sepstr = NULL; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_custom))) { char *csvcustomtext = gtk_editable_get_chars (GTK_EDITABLE (pagedata->csv.csv_customseparator), 0, -1); if (strcmp (csvcustomtext, "") != 0) sepstr = g_slist_append (sepstr, csvcustomtext); else g_free (csvcustomtext); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_tab))) g_string_append_c (sepc, '\t'); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_colon))) g_string_append_c (sepc, ':'); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_comma))) g_string_append_c (sepc, ','); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_space))) g_string_append_c (sepc, ' '); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_semicolon))) g_string_append_c (sepc, ';'); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_hyphen))) g_string_append_c (sepc, '-'); stf_parse_options_csv_set_separators (parseoptions, strcmp (sepc->str, "") == 0 ? NULL : sepc->str, sepstr); g_string_free (sepc, TRUE); go_slist_free_custom (sepstr, g_free); stf_parse_options_csv_set_duplicates (parseoptions, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_duplicates))); stf_parse_options_csv_set_trim_seps (parseoptions, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_trim_seps))); lines_chunk = g_string_chunk_new (100 * 1024); /* Don't trim on this page. */ trim = parseoptions->trim_spaces; stf_parse_options_set_trim_spaces (parseoptions, TRIM_TYPE_NEVER); lines = stf_parse_general (parseoptions, lines_chunk, pagedata->cur, pagedata->cur_end); stf_parse_options_set_trim_spaces (parseoptions, trim); stf_preview_set_lines (renderdata, lines_chunk, lines); }
/** * stf_preview_free * @renderdata : a renderdata struct * * This will free the @renderdata * * returns : nothing **/ void stf_preview_free (RenderData_t *renderdata) { g_return_if_fail (renderdata != NULL); stf_preview_colformats_clear (renderdata); g_ptr_array_free (renderdata->colformats, TRUE); stf_preview_set_lines (renderdata, NULL, NULL); g_object_unref (renderdata->tree_view); g_free (renderdata); }
/** * fixed_page_update_preview * @pagedata: mother struct * * Will simply update the preview * * returns : nothing **/ static void fixed_page_update_preview (StfDialogData *pagedata) { StfParseOptions_t *parseoptions = pagedata->parseoptions; RenderData_t *renderdata = pagedata->fixed.renderdata; int i; GStringChunk *lines_chunk; GPtrArray *lines; StfTrimType_t trim; lines_chunk = g_string_chunk_new (100 * 1024); /* Don't trim on this page. */ trim = parseoptions->trim_spaces; stf_parse_options_set_trim_spaces (parseoptions, TRIM_TYPE_NEVER); lines = stf_parse_general (parseoptions, lines_chunk, pagedata->cur, pagedata->cur_end); stf_parse_options_set_trim_spaces (parseoptions, trim); stf_preview_set_lines (renderdata, lines_chunk, lines); for (i = 0; i < renderdata->colcount; i++) { GtkTreeViewColumn *column = stf_preview_get_column (renderdata, i); GtkCellRenderer *cell = stf_preview_get_cell_renderer (renderdata, i); GtkWidget *button = gtk_tree_view_column_get_button (column); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); g_object_set (G_OBJECT (cell), "family", "monospace", NULL); g_object_set_data (G_OBJECT (button), "fixed-data", pagedata); g_object_set (G_OBJECT (column), "clickable", TRUE, NULL); g_signal_connect (button, "button_press_event", G_CALLBACK (cb_col_button_press), GINT_TO_POINTER (i)); g_signal_connect (button, "key_press_event", G_CALLBACK (cb_col_key_press), GINT_TO_POINTER (i)); } }
/** * format_page_update_preview * @pagedata: mother struct * * Will simply utilize the preview rendering functions to update * the preview * * returns : nothing **/ static void format_page_update_preview (StfDialogData *pagedata) { RenderData_t *renderdata = pagedata->format.renderdata; unsigned int ui; int i; int col_import_array_len_old, old_part; GStringChunk *lines_chunk; char *msg = NULL; stf_preview_colformats_clear (renderdata); for (ui = 0; ui < pagedata->format.formats->len; ui++) { GOFormat *sf = g_ptr_array_index (pagedata->format.formats, ui); stf_preview_colformats_add (renderdata, sf); } lines_chunk = g_string_chunk_new (100 * 1024); stf_preview_set_lines (renderdata, lines_chunk, stf_parse_general (pagedata->parseoptions, lines_chunk, pagedata->cur, pagedata->cur_end)); col_import_array_len_old = pagedata->format.col_import_array_len; pagedata->format.col_import_array_len = renderdata->colcount; pagedata->format.col_autofit_array = g_renew(gboolean, pagedata->format.col_autofit_array, pagedata->format.col_import_array_len); pagedata->format.col_import_array = g_renew(gboolean, pagedata->format.col_import_array, pagedata->format.col_import_array_len); old_part = (col_import_array_len_old < pagedata->format.col_import_array_len) ? col_import_array_len_old : pagedata->format.col_import_array_len; pagedata->format.col_import_count = 0; for (i = 0; i < old_part; i++) if (pagedata->format.col_import_array[i]) pagedata->format.col_import_count++; for (i = old_part; i < pagedata->format.col_import_array_len; i++) { if (pagedata->format.col_import_count < GNM_MAX_COLS) { pagedata->format.col_import_array[i] = TRUE; pagedata->format.col_import_count++; } else { pagedata->format.col_import_array[i] = FALSE; } pagedata->format.col_autofit_array[i] = TRUE; } format_page_update_column_selection (pagedata); if (old_part < renderdata->colcount) msg = g_strdup_printf (_("A maximum of %d columns can be imported."), GNM_MAX_COLS); for (i = old_part; i < renderdata->colcount; i++) { GtkTreeViewColumn *column = stf_preview_get_column (renderdata, i); GtkWidget *button = gtk_tree_view_column_get_button (column); if (NULL == g_object_get_data (G_OBJECT (column), "checkbox")) { GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); GtkWidget *check, *check_autofit = gtk_check_button_new_with_label (_("Auto fit")); char * label_text = g_strdup_printf (pagedata->format.col_header, i+1); GOFormat const *gf = go_format_general (); GtkWidget *format_label = gtk_button_new_with_label (go_format_sel_format_classification (gf)); GtkWidget *format_icon = gtk_image_new_from_stock (GTK_STOCK_INFO, GTK_ICON_SIZE_BUTTON); check = gtk_check_button_new_with_label (label_text); g_free (label_text); gtk_button_set_image (GTK_BUTTON (format_label), format_icon); g_object_set (G_OBJECT (stf_preview_get_cell_renderer (pagedata->format.renderdata, i)), "strikethrough", !pagedata->format.col_import_array[i], NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(check), pagedata-> format.col_import_array[i]); label_text = g_strdup_printf (_("If this checkbox is selected, " "column %i will be imported into " "Gnumeric."), i+1); gtk_widget_set_tooltip_text (check, label_text); gtk_widget_set_tooltip_text (check_autofit, _("If this checkbox is selected, " "the width of the column will be adjusted " "to the longest entry.")); g_free (label_text); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(check_autofit), pagedata-> format.col_autofit_array[i]); g_object_set_data (G_OBJECT (check), "pagedata", pagedata); g_object_set_data (G_OBJECT (check_autofit), "pagedata", pagedata); g_object_set_data (G_OBJECT (format_label), "pagedata", pagedata); gtk_box_pack_start (GTK_BOX(vbox), check, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(vbox), format_label, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX(vbox), check_autofit, TRUE, TRUE, 0); gtk_widget_show_all (vbox); gtk_tree_view_column_set_widget (column, vbox); g_object_set_data (G_OBJECT (column), "pagedata", pagedata); g_object_set_data (G_OBJECT (column), "checkbox", check); g_object_set_data (G_OBJECT (column), "checkbox-autofit", check_autofit); g_object_set_data (G_OBJECT (column), "formatlabel", format_label); g_object_set_data (G_OBJECT (button), "pagedata", pagedata); g_object_set_data (G_OBJECT (button), "checkbox", check); g_object_set_data (G_OBJECT (button), "formatlabel", format_label); g_object_set (G_OBJECT (column), "clickable", TRUE, NULL); g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (cb_col_check_clicked), GINT_TO_POINTER (i)); g_signal_connect (G_OBJECT (check_autofit), "toggled", G_CALLBACK (cb_col_check_autofit_clicked), GINT_TO_POINTER (i)); g_signal_connect (G_OBJECT (format_label), "clicked", G_CALLBACK (cb_format_clicked), GINT_TO_POINTER (i)); g_signal_connect (G_OBJECT (button), "event", G_CALLBACK (cb_col_event), GINT_TO_POINTER (i)); } } g_free (msg); }