[gnumeric] Export: move the single-sheet selection logic out of the savers



commit f5ef1e6ec0cf705853bd9d49a866db1525dc0633
Author: Morten Welinder <terra gnome org>
Date:   Fri May 11 08:05:02 2018 -0400

    Export: move the single-sheet selection logic out of the savers

 plugins/html/latex.c |   30 ++++++++++--------------------
 src/gutils.c         |   34 ++++++++++++++++++++++++++++++++++
 src/gutils.h         |    3 +++
 src/stf.c            |   12 ++----------
 4 files changed, 49 insertions(+), 30 deletions(-)
---
diff --git a/plugins/html/latex.c b/plugins/html/latex.c
index 722b331..5d7c51c 100644
--- a/plugins/html/latex.c
+++ b/plugins/html/latex.c
@@ -58,13 +58,12 @@
 #include <rendered-value.h>
 #include <cellspan.h>
 #include <print-info.h>
+#include <gutils.h>
 
 #include <locale.h>
 #include <gsf/gsf-output.h>
 #include <string.h>
 
-#define SHEET_SELECTION_KEY "sheet-selection"
-
 typedef enum {
        LATEX_NO_BORDER = 0,
        LATEX_SINGLE_BORDER = 1,
@@ -1289,10 +1288,9 @@ file_saver_sheet_get_extent (Sheet *sheet)
  * to render the format and contents of the cell.
  */
 void
-latex_file_save (G_GNUC_UNUSED GOFileSaver const *fs, G_GNUC_UNUSED GOIOContext *io_context,
+latex_file_save (GOFileSaver const *fs, G_GNUC_UNUSED GOIOContext *io_context,
                 WorkbookView const *wb_view, GsfOutput *output)
 {
-       Workbook *wb = wb_view_get_workbook (wb_view);
        GnmCell *cell;
        Sheet *current_sheet;
        GnmRange total_range;
@@ -1302,13 +1300,9 @@ latex_file_save (G_GNUC_UNUSED GOFileSaver const *fs, G_GNUC_UNUSED GOIOContext
        GnmStyleBorderType *clines, *this_clines;
        GnmStyleBorderType *prev_vert = NULL, *next_vert = NULL, *this_vert;
        gboolean needs_hline;
-       GPtrArray *sel;
 
        /* Get the sheet and its range from the plugin function argument. */
-       sel = g_object_get_data (G_OBJECT (wb), SHEET_SELECTION_KEY);
-       current_sheet = sel && sel->len
-               ? g_ptr_array_index (sel, 0)
-               : wb_view_cur_sheet(wb_view);
+       current_sheet = gnm_file_saver_get_sheet (fs, wb_view);
        total_range = file_saver_sheet_get_extent (current_sheet);
 
        /* This is the preamble of the LaTeX2e file. */
@@ -1568,23 +1562,19 @@ latex2e_table_write_file_header(GsfOutput *output)
  * We try to avoid all formatting.
  */
 static void
-latex_table_file_save_impl (WorkbookView const *wb_view, GsfOutput *output, gboolean all)
+latex_table_file_save_impl (GOFileSaver const *fs, WorkbookView const *wb_view,
+                           GsfOutput *output, gboolean all)
 {
-       Workbook *wb = wb_view_get_workbook (wb_view);
        GnmCell *cell;
        Sheet *current_sheet;
        GnmRange total_range;
        int row, col;
-       GPtrArray *sel;
 
        /* This is the preamble of the LaTeX2e file. */
        latex2e_table_write_file_header(output);
 
        /* Get the sheet and its range from the plugin function argument. */
-       sel = g_object_get_data (G_OBJECT (wb), SHEET_SELECTION_KEY);
-       current_sheet = sel && sel->len
-               ? g_ptr_array_index (sel, 0)
-               : wb_view_cur_sheet(wb_view);
+       current_sheet = gnm_file_saver_get_sheet (fs, wb_view);
        total_range = file_saver_sheet_get_extent (current_sheet);
 
        /* Step through the sheet, writing cells as appropriate. */
@@ -1625,11 +1615,11 @@ latex_table_file_save_impl (WorkbookView const *wb_view, GsfOutput *output, gboo
  * latex table environment.  We try to avoid all formatting.
  */
 void
-latex_table_file_save (G_GNUC_UNUSED GOFileSaver const *fs,
+latex_table_file_save (GOFileSaver const *fs,
                       G_GNUC_UNUSED GOIOContext *io_context,
                       WorkbookView const *wb_view, GsfOutput *output)
 {
-       latex_table_file_save_impl (wb_view, output, TRUE);
+       latex_table_file_save_impl (fs, wb_view, output, TRUE);
 }
 
 /**
@@ -1644,9 +1634,9 @@ latex_table_file_save (G_GNUC_UNUSED GOFileSaver const *fs,
  * latex table environment.  We try to avoid all formatting.
  */
 void
-latex_table_visible_file_save (G_GNUC_UNUSED GOFileSaver const *fs,
+latex_table_visible_file_save (GOFileSaver const *fs,
                               G_GNUC_UNUSED GOIOContext *io_context,
                               WorkbookView const *wb_view, GsfOutput *output)
 {
-       latex_table_file_save_impl (wb_view, output, FALSE);
+       latex_table_file_save_impl (fs, wb_view, output, FALSE);
 }
diff --git a/src/gutils.c b/src/gutils.c
index 75c47a4..d9c02e4 100644
--- a/src/gutils.c
+++ b/src/gutils.c
@@ -16,6 +16,7 @@
 #include "sheet.h"
 #include "ranges.h"
 #include "mathfunc.h"
+#include "workbook-view.h"
 
 #include <goffice/goffice.h>
 
@@ -31,6 +32,8 @@
 #include <gsf/gsf-doc-meta-data.h>
 #include <gsf/gsf-timestamp.h>
 
+#define SHEET_SELECTION_KEY "sheet-selection"
+
 static char *gnumeric_lib_dir;
 static char *gnumeric_data_dir;
 static char *gnumeric_locale_dir;
@@ -848,3 +851,34 @@ gnm_xml_in_doc_dispose_on_exit (GsfXMLInDoc **pdoc)
 }
 
 /* ------------------------------------------------------------------------- */
+
+/**
+ * gnm_file_saver_get_sheet:
+ * @fs: #GOFileSaver
+ * @wbv: #WorkbookView
+ *
+ * For a single-sheet saver, this function determines what sheet to save.
+ *
+ * Returns: (transfer none): the sheet to export
+ */
+Sheet *
+gnm_file_saver_get_sheet (GOFileSaver const *fs, WorkbookView const *wbv)
+{
+       Workbook *wb;
+       GPtrArray *sel;
+
+       g_return_val_if_fail (GO_IS_FILE_SAVER (fs), NULL);
+       g_return_val_if_fail (go_file_saver_get_save_scope (fs) == GO_FILE_SAVE_SHEET, NULL);
+       g_return_val_if_fail (GNM_IS_WORKBOOK_VIEW (wbv), NULL);
+
+       wb = wb_view_get_workbook (wbv);
+
+       sel = g_object_get_data (G_OBJECT (wb), SHEET_SELECTION_KEY);
+       if (sel) {
+               if (sel->len)
+                       return g_ptr_array_index (sel, 0);
+               g_critical ("Someone messed up sheet selection");
+       }
+
+       return wb_view_cur_sheet (wbv);
+}
diff --git a/src/gutils.h b/src/gutils.h
index 658e2ee..0d48555 100644
--- a/src/gutils.h
+++ b/src/gutils.h
@@ -62,6 +62,9 @@ void gnm_hash_table_foreach_ordered (GHashTable *h,
 
 void gnm_xml_in_doc_dispose_on_exit (GsfXMLInDoc **pdoc);
 
+Sheet *gnm_file_saver_get_sheet (GOFileSaver const *fs,
+                                WorkbookView const *wbv);
+
 G_END_DECLS
 
 #endif /* _GNM_GUTILS_H_ */
diff --git a/src/stf.c b/src/stf.c
index c40714b..07d11e2 100644
--- a/src/stf.c
+++ b/src/stf.c
@@ -58,8 +58,6 @@
 #include <gsf/gsf-utils.h>
 #include <locale.h>
 
-#define SHEET_SELECTION_KEY "sheet-selection"
-
 static void
 stf_warning (GOIOContext *context, char const *msg)
 {
@@ -487,13 +485,11 @@ stf_read_workbook_auto_csvtab (G_GNUC_UNUSED GOFileOpener const *fo, gchar const
 /***********************************************************************************/
 
 static void
-stf_write_csv (G_GNUC_UNUSED GOFileSaver const *fs, GOIOContext *context,
+stf_write_csv (GOFileSaver const *fs, GOIOContext *context,
               GoView const *view, GsfOutput *output)
 {
        Sheet *sheet;
        WorkbookView *wbv = GNM_WORKBOOK_VIEW (view);
-       Workbook *wb = wb_view_get_workbook (wbv);
-       GPtrArray *sel = g_object_get_data (G_OBJECT (wb), SHEET_SELECTION_KEY);
 
        GnmStfExport *config = g_object_new
                (GNM_STF_EXPORT_TYPE,
@@ -501,11 +497,7 @@ stf_write_csv (G_GNUC_UNUSED GOFileSaver const *fs, GOIOContext *context,
                 "quoting-triggers", ", \t\n\"",
                 NULL);
 
-       if (sel)
-               sheet = sel->len ? g_ptr_array_index (sel, 0) : NULL;
-       else
-               sheet = wb_view_cur_sheet (wbv);
-
+       sheet = gnm_file_saver_get_sheet (fs, wbv);
        if (sheet)
                gnm_stf_export_options_sheet_list_add (config, sheet);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]