[gnumeric] ssconvert: handle export options for image export.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] ssconvert: handle export options for image export.
- Date: Tue, 21 Apr 2020 23:58:32 +0000 (UTC)
commit 6e3dcff72a0b2a0df5cc4edf9574e78737cb4260
Author: Morten Welinder <terra gnome org>
Date: Tue Apr 21 19:57:51 2020 -0400
ssconvert: handle export options for image export.
Only "resolution" so far.
ChangeLog | 5 +++
NEWS | 1 +
src/ssconvert.c | 105 ++++++++++++++++++++++++++++++++++++++++++--------------
3 files changed, 86 insertions(+), 25 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 261fa1b32..a49ef08dd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-21 Morten Welinder <terra gnome org>
+
+ * src/ssconvert.c (export_objects_for_sheet): New function
+ extracted from do_split_save.
+
2020-04-20 Morten Welinder <terra gnome org>
* src/ssconvert.c (resolve_template): Expand %o to sheet object
diff --git a/NEWS b/NEWS
index 2b15b04ef..085ae937a 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ Morten:
* Impose ordering of ssconvert --export-graphs
* Doc fixes.
* Fix CELL crash. [#479]
+ * Handle export options for ssconvert --export-graphs.
--------------------------------------------------------------------------
Gnumeric 1.12.46
diff --git a/src/ssconvert.c b/src/ssconvert.c
index 2b506cc62..13218e076 100644
--- a/src/ssconvert.c
+++ b/src/ssconvert.c
@@ -294,6 +294,7 @@ handle_export_options (GOFileSaver *fs, Workbook *wb)
g_printerr ("ssconvert: %s\n", err
? err->message
: _("Cannot parse export options."));
+ g_clear_error (&err);
return 1;
}
@@ -856,6 +857,83 @@ by_anchor (gconstpointer a_, gconstpointer b_)
return 0;
}
+struct cb_image_export_options {
+ double resolution;
+};
+
+static gboolean
+cb_image_export_options (const char *key, const char *value,
+ GError **err, gpointer user_)
+{
+ struct cb_image_export_options *user = user_;
+
+ if (strcmp (key, "resolution") == 0) {
+ user->resolution = atof (value);
+ if (user->resolution >= 1 && user->resolution <= 10000)
+ return FALSE;
+ }
+
+ if (err)
+ *err = g_error_new (go_error_invalid (), 0,
+ _("Invalid export option \"%s=%s\" for image export"),
+ key, value);
+
+ return TRUE;
+}
+
+static int
+export_objects_for_sheet (Sheet *sheet, const char *template,
+ guint *file_idx)
+{
+
+ GSList *l, *objs = sheet_objects_get (sheet, NULL, G_TYPE_NONE);
+ int res = 0;
+
+ struct cb_image_export_options data;
+ data.resolution = 100;
+ if (ssconvert_export_options) {
+ GError *err = NULL;
+ gboolean fail;
+
+ fail = go_parse_key_value (ssconvert_export_options, &err,
+ cb_image_export_options, &data);
+ if (fail) {
+ g_printerr ("ssconvert: %s\n", err
+ ? err->message
+ : _("Cannot parse export options."));
+ g_clear_error (&err);
+ return 1;
+ }
+ }
+
+ objs = g_slist_sort (objs, by_anchor);
+ for (l = objs; l; l = l->next) {
+ SheetObject *so = l->data;
+ char *tmpfile;
+ GError *err = NULL;
+
+ if (!g_type_is_a (G_TYPE_FROM_INSTANCE (so),
+ ssconvert_object_export_type))
+ continue;
+
+ tmpfile = resolve_template (template, sheet, so, (*file_idx)++);
+ sheet_object_save_as_image (so, ssconvert_image_format,
+ data.resolution,
+ tmpfile, &err);
+
+ if (err) {
+ g_printerr ("Failed to write %s: %s\n", tmpfile, err->message);
+ g_error_free (err);
+ res = 1;
+ }
+
+ g_free (tmpfile);
+ }
+ g_slist_free (objs);
+
+ return res;
+}
+
static int
do_split_save (GOFileSaver *fs, WorkbookView *wbv,
const char *outarg, GOCmdContext *cc)
@@ -913,31 +991,8 @@ do_split_save (GOFileSaver *fs, WorkbookView *wbv,
}
if (ssconvert_object_export) {
- GSList *l, *objs = sheet_objects_get (sheet, NULL, GNM_SO_GRAPH_TYPE);
- double resolution = 100.0;
- objs = g_slist_sort (objs, by_anchor);
- for (l = objs; l; l = l->next) {
- SheetObject *so = l->data;
- char *tmpfile;
- GError *err = NULL;
-
- if (!g_type_is_a (G_TYPE_FROM_INSTANCE (so),
- ssconvert_object_export_type))
- continue;
-
- tmpfile = resolve_template (template, sheet, so, file_idx++);
- sheet_object_save_as_image (so, ssconvert_image_format, resolution,
- tmpfile, &err);
-
- if (err) {
- g_printerr ("Failed to write %s: %s\n", tmpfile, err->message);
- g_error_free (err);
- res = 1;
- }
-
- g_free (tmpfile);
- }
- g_slist_free (objs);
+ if (export_objects_for_sheet (sheet, template, &file_idx))
+ res = 1;
} else {
char *tmpfile = resolve_template (template, sheet, NULL, file_idx++);
res = !workbook_view_save_as (wbv, fs, tmpfile, cc);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]