[gnumeric] Roundtrip axis scaling factor through xlsx.
- From: Jean Bréfort <jbrefort src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Roundtrip axis scaling factor through xlsx.
- Date: Mon, 4 May 2015 14:03:05 +0000 (UTC)
commit 7aa7ab3b5fbbc05cfe50000d6429361b6e246744
Author: Jean Brefort <jean brefort normalesup org>
Date: Mon May 4 16:02:29 2015 +0200
Roundtrip axis scaling factor through xlsx.
plugins/excel/ChangeLog | 5 +++++
plugins/excel/xlsx-read-drawing.c | 11 +++++++++++
plugins/excel/xlsx-write-drawing.c | 9 +++++++++
3 files changed, 25 insertions(+), 0 deletions(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 28d4f9e..d8555d1 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-04 Jean Brefort <jean brefort normalesup org>
+
+ * xlsx-read-drawing.c (xlsx_axis_custom_unit): read custom scaling factor.
+ * xlsx-write-drawing.c (xlsx_write_axis): write it back. [#748295]
+
2015-04-28 Morten Welinder <terra gnome org>
* ms-excel-read.c (sst_read_string): Prevent string overrun.
diff --git a/plugins/excel/xlsx-read-drawing.c b/plugins/excel/xlsx-read-drawing.c
index 811f150..f82478f 100644
--- a/plugins/excel/xlsx-read-drawing.c
+++ b/plugins/excel/xlsx-read-drawing.c
@@ -1077,6 +1077,15 @@ xlsx_axis_crossax (GsfXMLIn *xin, xmlChar const **attrs)
}
static void
+xlsx_axis_custom_unit (GsfXMLIn *xin, xmlChar const **attrs)
+{
+ XLSXReadState *state = (XLSXReadState *)xin->user_state;
+ double f;
+ if (state->axis.obj && attr_float (xin, attrs, "val", &f) && f > 0.)
+ g_object_set (state->axis.obj, "display-factor", f, NULL);
+}
+
+static void
xlsx_chart_gridlines (GsfXMLIn *xin, G_GNUC_UNUSED xmlChar const **attrs)
{
XLSXReadState *state = (XLSXReadState *)xin->user_state;
@@ -2480,6 +2489,8 @@ GSF_XML_IN_NODE_FULL (START, CHART_SPACE, XL_NS_CHART, "chartSpace", GSF_XML_NO_
GSF_XML_IN_NODE (VAL_AXIS, AXIS_AXID, XL_NS_CHART, "axId", GSF_XML_2ND, NULL, NULL),
GSF_XML_IN_NODE (VAL_AXIS, AXIS_SCALING, XL_NS_CHART, "scaling", GSF_XML_2ND, NULL, NULL),
GSF_XML_IN_NODE (VAL_AXIS, AXIS_DELETE, XL_NS_CHART, "delete", GSF_XML_2ND, NULL, NULL),
+ GSF_XML_IN_NODE (VAL_AXIS, AXIS_DISPUNITS, XL_NS_CHART, "dispUnits", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (AXIS_DISPUNITS, AXIS_CUSTUNIT, XL_NS_CHART, "custUnit",
GSF_XML_NO_CONTENT, &xlsx_axis_custom_unit, NULL),
GSF_XML_IN_NODE (VAL_AXIS, AXIS_POS, XL_NS_CHART, "axPos", GSF_XML_2ND, NULL, NULL),
GSF_XML_IN_NODE (VAL_AXIS, AXIS_MAJORGRID, XL_NS_CHART, "majorGridlines", GSF_XML_2ND, NULL, NULL),
GSF_XML_IN_NODE (VAL_AXIS, AXIS_MINORGRID, XL_NS_CHART, "minorGridlines", GSF_XML_2ND, NULL, NULL),
diff --git a/plugins/excel/xlsx-write-drawing.c b/plugins/excel/xlsx-write-drawing.c
index a635a87..b299bde 100644
--- a/plugins/excel/xlsx-write-drawing.c
+++ b/plugins/excel/xlsx-write-drawing.c
@@ -840,6 +840,15 @@ xlsx_write_axis (XLSXWriteState *state, GsfXMLOut *xml, GogPlot *plot, GogAxis *
d = gog_axis_get_entry (axis, GOG_AXIS_ELEM_MINOR_TICK, &user_defined);
if (user_defined && d > 0) xlsx_write_chart_float (xml, "c:minorUnit", d);
+ g_object_get (axis, "display-factor", &d, NULL);
+ if (d != 1.) {
+ gsf_xml_out_start_element (xml, "c:dispUnits");
+ gsf_xml_out_start_element (xml, "c:custUnit");
+ gsf_xml_out_add_float (xml, "val", d, -1);
+ gsf_xml_out_end_element (xml);
+ gsf_xml_out_end_element (xml);
+ }
+
/* finished with axis */
gsf_xml_out_end_element (xml);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]