[gnumeric] xls: export lines and arrows.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] xls: export lines and arrows.
- Date: Tue, 6 Oct 2009 01:51:45 +0000 (UTC)
commit 46be1389567b9bd57aad3f26d03fb63853afc53c
Author: Morten Welinder <terra gnome org>
Date: Mon Oct 5 21:51:02 2009 -0400
xls: export lines and arrows.
NEWS | 1 +
plugins/excel/ChangeLog | 6 ++--
plugins/excel/ms-excel-write.c | 74 ++++++++++++++++++++++++++++++++++++++--
3 files changed, 75 insertions(+), 6 deletions(-)
---
diff --git a/NEWS b/NEWS
index 5308856..d6222ab 100644
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,7 @@ Morten:
* Add name property to sheet objects.
* Start cleaning up xls sheet object writing.
* Plug xls export leaks.
+ * Implement export of lines and arrows to xls. [Part of #597035]
--------------------------------------------------------------------------
Gnumeric 1.9.13
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 9d4c810..e9b908f 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,19 +1,19 @@
2009-10-05 Morten Welinder <terra gnome org>
- * plugins/excel/ms-excel-write.c (excel_write_textbox_v8): Export
+ * ms-excel-write.c (excel_write_textbox_v8): Export
object name.
(excel_sheet_new): Prepare for handling lines.
(blipinf_new): Plug leak.
(extract_txomarkup): Plug leak.
(xf_init, cb_cell_pre_pass, cb_accum_styles,
excel_write_ClientTextbox): Plug leak.
-
- * ms-chart.c (map_1_5d_type): Plug leak.
+ (excel_write_line_v8): Export lines and arrows.
* ms-biff.h (_BiffPut): Change type of streamPos to gsf_off_t.
* ms-chart.c (chart_write_axis): Don't dump uninitialized memory
into file.
+ (map_1_5d_type): Plug leak.
* ms-biff.c (ms_biff_put_len_next): Make sure we don't mix _var_
and _len_ calls. Make sure we commit.
diff --git a/plugins/excel/ms-excel-write.c b/plugins/excel/ms-excel-write.c
index 2fcf898..f231d22 100644
--- a/plugins/excel/ms-excel-write.c
+++ b/plugins/excel/ms-excel-write.c
@@ -4368,7 +4368,77 @@ excel_write_textbox_v8 (ExcelWriteSheet *esheet, SheetObject *so)
static gsize
excel_write_line_v8 (ExcelWriteSheet *esheet, SheetObject *so)
{
- return 0;
+ gboolean is_arrow;
+ GString *escher = g_string_new (NULL);
+ GString *extra;
+ ExcelWriteState *ewb = esheet->ewb;
+ BiffPut *bp = ewb->bp;
+ guint32 id = excel_write_start_drawing (esheet);
+ SheetObjectAnchor const *anchor = sheet_object_get_anchor (so);
+ gsize draw_len = 0;
+ int type = 1;
+ int shape = 0x14;
+ int flags = 0x6011; /* autofilled */
+ gsize spmark, optmark;
+ char *name;
+ guint8 zero[4] = { 0, 0, 0, 0 };
+
+ g_object_get (so, "is-arrow", &is_arrow, NULL);
+
+ spmark = ms_escher_spcontainer_start (escher);
+
+ ms_escher_sp (escher, id, shape, 0x00000a00); /* fHaveAnchor+fHaveSpt */
+
+ optmark = ms_escher_opt_start (escher);
+ extra = g_string_new (NULL);
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x00bf, 0x00080008);
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x0144, 4); /* shapePath */
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x017f, 0x00010000);
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x01bf, 0x00110001);
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x01c0, 0x0800000a); /* lineColor */
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x01cb, 19050); /* lineWidth */
+ if (is_arrow)
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x01d1, 1); /* lineEndArrowhead */
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x1ff, 0x00180018);
+ g_object_get (so, "name", &name, NULL);
+ if (name) {
+ ms_escher_opt_add_str_wchar (escher, optmark, extra,
+ 0x0380, name);
+ g_free (name);
+ }
+ ms_escher_opt_add_simple (escher, optmark,
+ 0x03bf, 0x00080008); /* fPrint */
+ go_string_append_gstring (escher, extra);
+ ms_escher_opt_end (escher, optmark);
+ g_string_free (extra, TRUE);
+
+ ms_escher_clientanchor (escher, anchor);
+
+ ms_escher_clientdata (escher, NULL, 0);
+
+ ms_escher_spcontainer_end (escher, spmark);
+
+ ms_biff_put_var_write (bp, escher->str, escher->len);
+ ms_biff_put_commit (bp);
+ draw_len += escher->len;
+
+ g_string_free (escher, TRUE);
+
+ ms_biff_put_var_next (bp, BIFF_OBJ);
+ ms_objv8_write_common (bp, esheet->cur_obj, type, flags);
+ ms_biff_put_var_write (bp, zero, 4);
+
+ ms_biff_put_commit (bp);
+
+ return draw_len;
}
static void
@@ -5149,8 +5219,6 @@ excel_sheet_new (ExcelWriteState *ewb, Sheet *sheet,
g_slist_prepend (esheet->textboxes, so);
handled = TRUE;
} else if (IS_GNM_SO_LINE (so)) {
- if (1)
- goto unhandled;
esheet->lines =
g_slist_prepend (esheet->lines, so);
handled = TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]