static void gnm_stf_file_saver_save (G_GNUC_UNUSED GOFileSaver const *fs, GOIOContext *context, GoView const *view, GsfOutput *output) { WorkbookView *wbv = GNM_WORKBOOK_VIEW (view); Workbook *wb = wb_view_get_workbook (wbv); GnmStfExport *stfe = gnm_stf_get_stfe (G_OBJECT (wb)); GsfOutput *dummy_sink; /* TODO: move this GUI dependent code out of this * filesaver into gui-file.c. After this, remove includes (see above). */ if (GNM_IS_WBC_GTK (context->impl)) { gboolean cancelled = stf_export_dialog (WBC_GTK (context->impl), stfe, wb); if (cancelled) { go_io_error_unknown (context); return; } } if (!stfe->sheet_list) gnm_stf_export_options_sheet_list_add (stfe, wb_view_cur_sheet (wbv)); g_object_set (G_OBJECT (stfe), "sink", output, NULL); if (gnm_stf_export (stfe) == FALSE) go_cmd_context_error_import (GO_CMD_CONTEXT (context), _("Error while trying to export file as text")); /* We're not allowed to set a NULL sink, so use a dummy. */ dummy_sink = gsf_output_memory_new (); g_object_set (G_OBJECT (stfe), "sink", dummy_sink, NULL); g_object_unref (dummy_sink); }
static void stf_write_csv (G_GNUC_UNUSED GOFileSaver const *fs, GOIOContext *context, GoView const *view, GsfOutput *output) { Sheet *sheet; GnmRangeRef const *range; WorkbookView *wbv = GNM_WORKBOOK_VIEW (view); GnmStfExport *config = g_object_new (GNM_STF_EXPORT_TYPE, "sink", output, "quoting-triggers", ", \t\n\"", NULL); /* FIXME: this is crap in both branches of the "if". */ range = g_object_get_data (G_OBJECT (wb_view_get_workbook (wbv)), "ssconvert-range"); if (range && range->a.sheet) sheet = range->a.sheet; else sheet = wb_view_cur_sheet (wbv); gnm_stf_export_options_sheet_list_add (config, sheet); if (gnm_stf_export (config) == FALSE) go_cmd_context_error_import (GO_CMD_CONTEXT (context), _("Error while trying to write CSV file")); g_object_unref (config); }
static gboolean cb_set_export_option (const char *key, const char *value, GError **err, gpointer user) { Workbook *wb = user; GnmStfExport *stfe = gnm_stf_get_stfe (G_OBJECT (wb)); const char *errtxt; if (strcmp (key, "sheet") == 0) { Sheet *sheet = workbook_sheet_by_name (wb, value); if (!sheet) { errtxt = _("There is no such sheet"); goto error; } gnm_stf_export_options_sheet_list_add (stfe, sheet); return FALSE; } if (strcmp (key, "eol") == 0) { const char *eol; if (g_ascii_strcasecmp ("unix", value) == 0) eol = "\n"; else if (g_ascii_strcasecmp ("mac", value) == 0) eol = "\r"; else if (g_ascii_strcasecmp ("windows", value) == 0) eol = "\r\n"; else { errtxt = _("eol must be one of unix, mac, and windows"); goto error; } g_object_set (G_OBJECT (stfe), "eol", eol, NULL); return FALSE; } if (strcmp (key, "charset") == 0 || strcmp (key, "locale") == 0 || strcmp (key, "quote") == 0 || strcmp (key, "separator") == 0 || strcmp (key, "format") == 0 || strcmp (key, "transliterate-mode") == 0 || strcmp (key, "quoting-mode") == 0 || strcmp (key, "quoting-on-whitespace") == 0) return go_object_set_property (G_OBJECT (stfe), key, key, value, err, (_("Invalid value for option %s: \"%s\""))); errtxt = _("Invalid option for stf exporter"); error: if (err) *err = g_error_new (go_error_invalid (), 0, "%s", errtxt); return TRUE; }