[gnumeric] xlsx: save checkbox state
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] xlsx: save checkbox state
- Date: Sat, 21 Feb 2015 01:52:51 +0000 (UTC)
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]