[gnumeric] Stf: simplify code.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Stf: simplify code.
- Date: Tue, 10 May 2016 23:34:21 +0000 (UTC)
commit 75a5f5eb6d32dfe7db4b3f7dd4ca392d69f432c7
Author: Morten Welinder <terra gnome org>
Date: Tue May 10 19:33:57 2016 -0400
Stf: simplify code.
src/dialogs/dialog-stf-format-page.c | 68 +++++++++++++++------------------
src/dialogs/dialog-stf.c | 8 +++-
src/stf-parse.c | 54 +++++++++++++++++++-------
src/stf-parse.h | 2 +
src/stf.c | 4 --
5 files changed, 78 insertions(+), 58 deletions(-)
---
diff --git a/src/dialogs/dialog-stf-format-page.c b/src/dialogs/dialog-stf-format-page.c
index 01b8bf1..28c7df5 100644
--- a/src/dialogs/dialog-stf-format-page.c
+++ b/src/dialogs/dialog-stf-format-page.c
@@ -200,7 +200,6 @@ cb_format_clicked (GtkButton *widget, gpointer _i)
StfDialogData *pagedata =
g_object_get_data (G_OBJECT (widget), "pagedata");
gint result;
- GOFormat *sf;
GtkWidget *dialog = gtk_dialog_new_with_buttons
(_("Format Selector"),
GTK_WINDOW (pagedata->dialog),
@@ -211,34 +210,35 @@ cb_format_clicked (GtkButton *widget, gpointer _i)
GOFormatSel *format_selector
= GO_FORMAT_SEL (go_format_sel_new_full (TRUE));
GtkWidget *w = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
- GtkTreeViewColumn* column;
- GtkWidget *format_label;
- sf = g_ptr_array_index (pagedata->format.formats, i);
- go_format_sel_set_style_format (format_selector, sf);
+ go_format_sel_set_style_format (format_selector, g_ptr_array_index (pagedata->format.formats, i));
go_format_sel_set_locale (format_selector, pagedata->locale);
gtk_box_pack_start (GTK_BOX (w), GTK_WIDGET (format_selector),
FALSE, TRUE, 5);
gtk_widget_show (GTK_WIDGET (format_selector));
result = gtk_dialog_run (GTK_DIALOG (dialog));
- switch (result)
- {
- case GTK_RESPONSE_ACCEPT:
- column = stf_preview_get_column (pagedata->format.renderdata, i);
- format_label = g_object_get_data (G_OBJECT (column),
- "formatlabel");
- sf = g_ptr_array_index (pagedata->format.formats, i);
- go_format_unref (sf);
-
- sf = go_format_ref (go_format_sel_get_fmt (format_selector));
- gtk_button_set_label (GTK_BUTTON (format_label),
- go_format_sel_format_classification (sf));
- g_ptr_array_index (pagedata->format.formats, i) = sf;
- format_page_update_preview (pagedata);
- default:
- break;
- }
+ switch (result) {
+ case GTK_RESPONSE_ACCEPT: {
+ GOFormat *sf;
+ GtkTreeViewColumn* column = stf_preview_get_column (pagedata->format.renderdata, i);
+ GtkWidget *format_label = g_object_get_data (G_OBJECT (column),
+ "formatlabel");
+
+ sf = g_ptr_array_index (pagedata->format.formats, i);
+ go_format_unref (sf);
+
+ sf = go_format_ref (go_format_sel_get_fmt (format_selector));
+ gtk_button_set_label (GTK_BUTTON (format_label),
+ go_format_sel_format_classification (sf));
+ g_ptr_array_index (pagedata->format.formats, i) = sf;
+
+ format_page_update_preview (pagedata);
+ break;
+ }
+ default:
+ break;
+ }
gtk_widget_destroy (dialog);
return;
}
@@ -346,22 +346,20 @@ cb_popup_menu_extend_format (GtkWidget *widget, gpointer data)
{
StfDialogData *pagedata = data;
guint index = pagedata->format.index;
- GOFormat *colformat = g_ptr_array_index
- (pagedata->format.formats, pagedata->format.index);
+ GPtrArray *formats = pagedata->format.formats;
+ GOFormat *colformat = g_ptr_array_index (formats, pagedata->format.index);
- for (index++; index < pagedata->format.formats->len; index++) {
- GOFormat *sf = g_ptr_array_index
- (pagedata->format.formats, index);
+ for (index++; index < formats->len; index++) {
+ GOFormat *sf = g_ptr_array_index (formats, index);
GtkTreeViewColumn* column =
stf_preview_get_column (pagedata->format.renderdata,
index);
GtkWidget *w = g_object_get_data (G_OBJECT (column),
"formatlabel");
go_format_unref (sf);
- g_ptr_array_index (pagedata->format.formats, index)
- = go_format_ref (colformat);
+ g_ptr_array_index (formats, index) = go_format_ref (colformat);
gtk_button_set_label (GTK_BUTTON (w),
- go_format_sel_format_classification (colformat));
+ go_format_sel_format_classification (colformat));
}
format_page_update_preview (data);
@@ -725,12 +723,8 @@ void
stf_dialog_format_page_cleanup (StfDialogData *pagedata)
{
GPtrArray *formats = pagedata->format.formats;
- if (formats) {
- unsigned int ui;
- for (ui = 0; ui < formats->len; ui++)
- go_format_unref (g_ptr_array_index (formats, ui));
+ if (formats)
g_ptr_array_free (formats, TRUE);
- }
stf_preview_free (pagedata->format.renderdata);
g_free (pagedata->format.col_import_array);
@@ -779,8 +773,8 @@ stf_dialog_format_page_init (GtkBuilder *gui, StfDialogData *pagedata)
pagedata->format.renderdata =
stf_preview_new (pagedata->format.format_data_container,
workbook_date_conv (wb_control_get_workbook (GNM_WBC (pagedata->wbcg))));
- pagedata->format.formats = g_ptr_array_new ();
- pagedata->format.index = -1;
+ pagedata->format.formats = g_ptr_array_new_with_free_func ((GDestroyNotify)go_format_unref);
+ pagedata->format.index = -1;
pagedata->format.manual_change = FALSE;
/* Update widgets before connecting signals, see #333407. */
diff --git a/src/dialogs/dialog-stf.c b/src/dialogs/dialog-stf.c
index 3186bb8..1d0fb78 100644
--- a/src/dialogs/dialog-stf.c
+++ b/src/dialogs/dialog-stf.c
@@ -328,8 +328,12 @@ stf_dialog (WBCGtk *wbcg,
dialogresult->parseoptions->locale = pagedata.locale;
pagedata.locale = NULL;
- dialogresult->parseoptions->formats = pagedata.format.formats;
- pagedata.format.formats = NULL;
+ if (pagedata.format.formats) {
+ g_ptr_array_free (dialogresult->parseoptions->formats, TRUE);
+ dialogresult->parseoptions->formats = pagedata.format.formats;
+ pagedata.format.formats = NULL;
+ } else
+ g_ptr_array_set_size (dialogresult->parseoptions->formats, 0);
dialogresult->parseoptions->col_import_array
= pagedata.format.col_import_array;
dialogresult->parseoptions->col_import_array_len
diff --git a/src/stf-parse.c b/src/stf-parse.c
index 54271c0..97979e9 100644
--- a/src/stf-parse.c
+++ b/src/stf-parse.c
@@ -159,7 +159,7 @@ stf_parse_options_new (void)
parseoptions->col_autofit_array = NULL;
parseoptions->col_import_array = NULL;
parseoptions->col_import_array_len = 0;
- parseoptions->formats = NULL;
+ parseoptions->formats = g_ptr_array_new_with_free_func ((GDestroyNotify)go_format_unref);
parseoptions->cols_exceeded = FALSE;
parseoptions->rows_exceeded = FALSE;
@@ -199,15 +199,7 @@ stf_parse_options_free (StfParseOptions_t *parseoptions)
stf_parse_options_clear_line_terminator (parseoptions);
- if (parseoptions->formats) {
- unsigned int ui;
- GPtrArray *formats = parseoptions->formats;
-
- for (ui = 0; ui < formats->len; ui++)
- go_format_unref (g_ptr_array_index (formats, ui));
- g_ptr_array_free (formats, TRUE);
- parseoptions->formats = NULL;
- }
+ g_ptr_array_free (parseoptions->formats, TRUE);
g_free (parseoptions);
}
@@ -1504,6 +1496,7 @@ dump_guessed_options (const StfParseOptions_t *res)
{
GSList *l;
char ubuffer[6 + 1];
+ unsigned ui;
g_printerr ("Guessed format:\n");
switch (res->parsetype) {
@@ -1538,6 +1531,11 @@ dump_guessed_options (const StfParseOptions_t *res)
g_printerr (" dos");
}
g_printerr ("\n");
+
+ for (ui = 0; ui < res->formats->len; ui++) {
+ GOFormat const *fmt = g_ptr_array_index (res->formats, ui);
+ g_printerr (" fmt.%d = %s\n", ui, go_format_as_XL (fmt));
+ }
}
/**
@@ -1595,8 +1593,11 @@ stf_parse_options_guess (char const *data)
}
}
- if (1) {
- /* Separated */
+ // For now, always separated:
+ stf_parse_options_set_type (res, PARSE_TYPE_CSV);
+
+ switch (res->parsetype) {
+ case PARSE_TYPE_CSV: {
gboolean dups =
res->sep.chr &&
strchr (res->sep.chr, ' ') != NULL;
@@ -1604,20 +1605,27 @@ stf_parse_options_guess (char const *data)
res->sep.chr &&
strchr (res->sep.chr, ' ') != NULL;
- stf_parse_options_set_type (res, PARSE_TYPE_CSV);
stf_parse_options_set_trim_spaces (res, TRIM_TYPE_LEFT | TRIM_TYPE_RIGHT);
stf_parse_options_csv_set_indicator_2x_is_single (res, TRUE);
stf_parse_options_csv_set_duplicates (res, dups);
stf_parse_options_csv_set_trim_seps (res, trim);
stf_parse_options_csv_set_stringindicator (res, '"');
- } else {
- /* Fixed-width */
+ break;
+ }
+
+ case PARSE_TYPE_FIXED:
+ break;
+
+ default:
+ g_assert_not_reached ();
}
stf_parse_general_free (lines);
g_string_chunk_free (lines_chunk);
+ stf_parse_options_guess_formats (res, data);
+
if (gnm_debug_flag ("stf"))
dump_guessed_options (res);
@@ -1710,8 +1718,24 @@ stf_parse_options_guess_csv (char const *data)
stf_parse_general_free (lines);
g_string_chunk_free (lines_chunk);
+ stf_parse_options_guess_formats (res, data);
+
if (gnm_debug_flag ("stf"))
dump_guessed_options (res);
return res;
}
+
+
+/**
+ * stf_parse_options_guess_formats:
+ * @data: the CSV input data.
+ *
+ **/
+void
+stf_parse_options_guess_formats (StfParseOptions_t *po, char const *data)
+{
+
+ g_ptr_array_set_size (po->formats, 0);
+
+}
diff --git a/src/stf-parse.h b/src/stf-parse.h
index 14707bc..f774b42 100644
--- a/src/stf-parse.h
+++ b/src/stf-parse.h
@@ -64,6 +64,8 @@ void stf_parse_options_free (StfParseO
StfParseOptions_t *stf_parse_options_guess (char const *data);
StfParseOptions_t *stf_parse_options_guess_csv (char const *data);
+void stf_parse_options_guess_formats (StfParseOptions_t *po,
+ char const *data);
/* MANIPULATION of stf options struct */
diff --git a/src/stf.c b/src/stf.c
index 3e9ba52..f4f6428 100644
--- a/src/stf.c
+++ b/src/stf.c
@@ -143,10 +143,6 @@ stf_apply_formats (StfParseOptions_t *parseoptions,
unsigned int ui;
GnmRange range;
- /* If we didn't use the stf dialog, then formats will be NULL */
- if (parseoptions->formats == NULL)
- return;
-
range.start.col = col;
range.start.row = start_row;
range.end.col = col;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]