[gnumeric] xlsx: save checkbox state



commit 7bbd9ccc2e4870085ef972526bd86aa3f6f35fdb
Author: Morten Welinder <terra gnome org>
Date:   Fri Feb 20 20:52:29 2015 -0500

    xlsx: save checkbox state
    
    This only matters for unlinked checkboxes.

 plugins/excel/xlsx-read-drawing.c  |   16 +++++++++++++++-
 plugins/excel/xlsx-write-drawing.c |    6 ++++++
 2 files changed, 21 insertions(+), 1 deletions(-)
---
diff --git a/plugins/excel/xlsx-read-drawing.c b/plugins/excel/xlsx-read-drawing.c
index 994b1d1..5e5a74a 100644
--- a/plugins/excel/xlsx-read-drawing.c
+++ b/plugins/excel/xlsx-read-drawing.c
@@ -3635,6 +3635,19 @@ xlsx_vml_textbox_div (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
        state->chart_tx = newtext;
 }
 
+static void
+xlsx_vml_checked (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
+{
+       XLSXReadState *state = (XLSXReadState *)xin->user_state;
+       const char *s = xin->content->str;
+       gboolean checked = strtol (s, NULL, 10) > 0;
+
+       if (GNM_IS_SOW_CHECKBOX (state->so)) {
+               g_object_set (state->so, "active", checked, NULL);
+       }
+}
+
+
 
 static GsfXMLInNode const xlsx_legacy_drawing_dtd[] = {
 GSF_XML_IN_NODE_FULL (START, START, -1, NULL, GSF_XML_NO_CONTENT, FALSE, TRUE, NULL, NULL, 0),
@@ -3658,8 +3671,9 @@ GSF_XML_IN_NODE_FULL (START, SP, XL_NS_LEG_VML, "shape", GSF_XML_NO_CONTENT, FAL
     GSF_XML_IN_NODE (CLIENT_DATA, ANCHOR, XL_NS_LEG_XL, "Anchor", GSF_XML_NO_CONTENT, NULL, NULL),
     GSF_XML_IN_NODE (CLIENT_DATA, AUTO_FILL, XL_NS_LEG_XL, "AutoFill", GSF_XML_NO_CONTENT, NULL, NULL),
     GSF_XML_IN_NODE (CLIENT_DATA, AUTO_LINE, XL_NS_LEG_XL, "AutoLine", GSF_XML_NO_CONTENT, NULL, NULL),
-    GSF_XML_IN_NODE (CLIENT_DATA, DROP_LINES, XL_NS_LEG_XL, "DropLines", GSF_XML_NO_CONTENT, NULL, NULL),
+    GSF_XML_IN_NODE (CLIENT_DATA, CHECKED, XL_NS_LEG_XL, "Checked", GSF_XML_CONTENT, NULL, 
&xlsx_vml_checked),
     GSF_XML_IN_NODE (CLIENT_DATA, COLUMN, XL_NS_LEG_XL, "Column", GSF_XML_NO_CONTENT, NULL, NULL),
+    GSF_XML_IN_NODE (CLIENT_DATA, DROP_LINES, XL_NS_LEG_XL, "DropLines", GSF_XML_NO_CONTENT, NULL, NULL),
     GSF_XML_IN_NODE (CLIENT_DATA, DROP_STYLE, XL_NS_LEG_XL, "DropStyle", GSF_XML_CONTENT, NULL, 
&xlsx_vml_drop_style),
     GSF_XML_IN_NODE (CLIENT_DATA, DX, XL_NS_LEG_XL, "Dx", GSF_XML_NO_CONTENT, NULL, NULL),
     GSF_XML_IN_NODE (CLIENT_DATA, FMLA_LINK, XL_NS_LEG_XL, "FmlaLink", GSF_XML_CONTENT, NULL, 
&xlsx_vml_fmla_link),
diff --git a/plugins/excel/xlsx-write-drawing.c b/plugins/excel/xlsx-write-drawing.c
index 04f3423..6328f49 100644
--- a/plugins/excel/xlsx-write-drawing.c
+++ b/plugins/excel/xlsx-write-drawing.c
@@ -1399,6 +1399,7 @@ xlsx_write_legacy_drawing_objects (XLSXWriteState *state, GsfOutput *sheet_part,
                double res_pts[4] = {0.,0.,0.,0.};
                GtkAdjustment *adj = NULL;
                int horiz = -1;
+               int checked = -1;
                gboolean has_text_prop =
                        g_object_class_find_property (G_OBJECT_GET_CLASS (so), "text") != NULL;
                char *text = NULL;
@@ -1446,14 +1447,19 @@ xlsx_write_legacy_drawing_objects (XLSXWriteState *state, GsfOutput *sheet_part,
                        otype = "Radio";
                        tlink = sheet_widget_radio_button_get_link (so);
                } else if (GNM_IS_SOW_CHECKBOX (so)) {
+                       gboolean c;
                        otype = "Checkbox";
                        tlink = sheet_widget_checkbox_get_link (so);
+                       g_object_get (so, "active", &c, NULL);
+                       checked = c;
                } else {
                        g_assert_not_reached ();
                }
                gsf_xml_out_add_cstr_unchecked (xml, "ObjectType", otype);
                gsf_xml_out_start_element (xml, "x:Anchor");
                gsf_xml_out_end_element (xml);  /* </x:Anchor> */
+               if (checked != -1)
+                       gsf_xml_out_simple_int_element (xml, "x:Checked", checked);
                if (tlink) {
                        char *s = gnm_expr_top_as_string (tlink, &pp0, state->convs);
                        gsf_xml_out_start_element (xml, "x:FmlaLink");


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