[gnumeric] Roundtrip axis scaling factor through xlsx.



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]