From a11bb74d4f464e9639ddb5b8d87dc4770663fea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCl=C5=9Fah=20K=C3=B6se?= Date: Fri, 18 Sep 2020 13:20:30 +0300 Subject: [PATCH] tdf#136247 OOXML export data label background color. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie3e00e8195239e6570bfe76c2451bae11c209145 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102999 Tested-by: Jenkins Reviewed-by: Gülşah Köse --- chart2/qa/extras/chart2export.cxx | 17 ++++++++++ .../data/xlsx/data_labels_fill_color.xlsx | Bin 0 -> 11256 bytes oox/source/export/chartexport.cxx | 31 ++++++++++++++---- 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 chart2/qa/extras/data/xlsx/data_labels_fill_color.xlsx diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index 8916208f8bde..49edb53991fe 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -107,6 +107,7 @@ public: void testAxisNumberFormatXLSX(); void testDataPointLabelNumberFormatXLSX(); void testDataLabelDefaultValuesXLSX(); + void testDataLabelFillColor(); void testTitleOverlayXLSX(); void testInvertIfNegativeXLSX(); void testBubble3DXLSX(); @@ -248,6 +249,7 @@ public: CPPUNIT_TEST(testAxisNumberFormatXLSX); CPPUNIT_TEST(testDataPointLabelNumberFormatXLSX); CPPUNIT_TEST(testDataLabelDefaultValuesXLSX); + CPPUNIT_TEST(testDataLabelFillColor); CPPUNIT_TEST(testTitleOverlayXLSX); CPPUNIT_TEST(testInvertIfNegativeXLSX); CPPUNIT_TEST(testBubble3DXLSX); @@ -1739,6 +1741,21 @@ void Chart2ExportTest::testDataLabelDefaultValuesXLSX() assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLblPos", "val", "outEnd"); } +void Chart2ExportTest::testDataLabelFillColor() +{ + load("/chart2/qa/extras/data/xlsx/", "data_labels_fill_color.xlsx"); + Reference< chart2::XChartDocument> xDoc = getChartDocFromSheet(0, mxComponent); + Reference xSeries = getDataSeriesFromDoc(xDoc, 0); + Reference xPropSet(xSeries, uno::UNO_QUERY_THROW); + uno::Any aAny = xPropSet->getPropertyValue("LabelFillColor"); + sal_Int32 nLabelFillColor; + CPPUNIT_ASSERT(aAny >>= nLabelFillColor); + + xmlDocUniquePtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML"); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:spPr/a:solidFill/a:srgbClr", "val", "F79646"); +} + void Chart2ExportTest::testTitleOverlayXLSX() { load("/chart2/qa/extras/data/xlsx/", "chart_title.xlsx"); diff --git a/chart2/qa/extras/data/xlsx/data_labels_fill_color.xlsx b/chart2/qa/extras/data/xlsx/data_labels_fill_color.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1a55f5b86836befd6bd288139721e5aea10597d2 GIT binary patch literal 11256 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 O5ZvI3StZT)xBmyAU^Pzw literal 0 HcmV?d00001 diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 12b3aba485ab..4d830f37c6ba 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -3407,27 +3407,46 @@ void writeLabelProperties( const FSHelperPtr& pFS, ChartExport* pChartExport, Sequence> aCustomLabelFields; sal_Int32 nLabelBorderWidth = 0; sal_Int32 nLabelBorderColor = 0x00FFFFFF; + sal_Int32 nLabelFillColor = -1; xPropSet->getPropertyValue("Label") >>= aLabel; xPropSet->getPropertyValue("CustomLabelFields") >>= aCustomLabelFields; xPropSet->getPropertyValue("LabelBorderWidth") >>= nLabelBorderWidth; xPropSet->getPropertyValue("LabelBorderColor") >>= nLabelBorderColor; + xPropSet->getPropertyValue("LabelFillColor") >>= nLabelFillColor; - if (nLabelBorderWidth > 0) + if (nLabelBorderWidth > 0 || nLabelFillColor != -1) { pFS->startElement(FSNS(XML_c, XML_spPr)); - pFS->startElement(FSNS(XML_a, XML_ln), XML_w, - OString::number(convertHmmToEmu(nLabelBorderWidth))); - if (nLabelBorderColor != -1) + + if (nLabelFillColor != -1) { pFS->startElement(FSNS(XML_a, XML_solidFill)); - OString aStr = OString::number(nLabelBorderColor, 16).toAsciiUpperCase(); + OString aStr = OString::number(nLabelFillColor, 16).toAsciiUpperCase(); pFS->singleElement(FSNS(XML_a, XML_srgbClr), XML_val, aStr); pFS->endElement(FSNS(XML_a, XML_solidFill)); } - pFS->endElement(FSNS(XML_a, XML_ln)); + + if (nLabelBorderWidth > 0) + { + pFS->startElement(FSNS(XML_a, XML_ln), XML_w, + OString::number(convertHmmToEmu(nLabelBorderWidth))); + + if (nLabelBorderColor != -1) + { + pFS->startElement(FSNS(XML_a, XML_solidFill)); + + OString aStr = OString::number(nLabelBorderColor, 16).toAsciiUpperCase(); + pFS->singleElement(FSNS(XML_a, XML_srgbClr), XML_val, aStr); + + pFS->endElement(FSNS(XML_a, XML_solidFill)); + } + + pFS->endElement(FSNS(XML_a, XML_ln)); + } + pFS->endElement(FSNS(XML_c, XML_spPr)); }