[gnumeric] Stf: simplify code.



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]