From d47b0f5880d87142f2d346c1f1903cfcfc673676 Mon Sep 17 00:00:00 2001 From: Balazs Varga Date: Thu, 9 Apr 2020 13:45:10 +0200 Subject: tdf#131979 Chart ODF import-export of Link to source format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit setting also into data point styles, fixing lost numbering style of custom data points. (Only export into the data series style was supported previously.) Also fix tdf#131115 - FILEOPEN: Incorrect format of single data label Regression from commit: e57d90cd4e51a1353eafc87bb29cfe6076704a7c (tdf#129173 tdf#129175 Fix number format of data labels) Data point styles in older ODF files do not contain the 'link-data-style-to-source' property, so they used the data series style property during the import previously. Now we set the default false value, if the data point style contains a 'data-style-name' (number format). Change-Id: I4786e62ca75770ed632463bcf1275ece7ea793f4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91967 Tested-by: László Németh Reviewed-by: László Németh Signed-off-by: Xisco Fauli Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92653 Tested-by: Jenkins --- chart2/qa/extras/chart2export.cxx | 34 +++++++++++++++++++++ chart2/qa/extras/data/ods/tdf131115.ods | Bin 0 -> 13814 bytes chart2/qa/extras/data/ods/tdf131979.ods | Bin 0 -> 11510 bytes .../chartapiwrapper/DataSeriesPointWrapper.cxx | 12 ++++---- include/xmloff/prstylei.hxx | 2 ++ xmloff/inc/XMLChartStyleContext.hxx | 2 ++ xmloff/source/chart/SchXMLSeries2Context.cxx | 22 +++++++++++++ 7 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 chart2/qa/extras/data/ods/tdf131115.ods create mode 100644 chart2/qa/extras/data/ods/tdf131979.ods diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index 03188a07ffb0..6826c3f53569 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -151,6 +151,7 @@ public: void testTdf115012(); void testTdf123206_customLabelText(); void testCustomLabelText(); + void testTdf131979(); CPPUNIT_TEST_SUITE(Chart2ExportTest); CPPUNIT_TEST(testErrorBarXLSX); @@ -265,6 +266,7 @@ public: CPPUNIT_TEST(testTdf115012); CPPUNIT_TEST(testTdf123206_customLabelText); CPPUNIT_TEST(testCustomLabelText); + CPPUNIT_TEST(testTdf131979); CPPUNIT_TEST_SUITE_END(); @@ -2433,6 +2435,38 @@ void Chart2ExportTest::testCustomLabelText() assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[2]/c:tx/c:rich/a:p/a:r[1]/a:t", "4.5"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[2]/c:tx/c:rich/a:p/a:r[3]/a:t", "CustomLabel 2"); } + +void Chart2ExportTest::testTdf131979() +{ + load("/chart2/qa/extras/data/ods/", "tdf131115.ods"); + { + reload("calc8"); + Reference xChartDoc = getChartDocFromSheet(0, mxComponent); + CPPUNIT_ASSERT(xChartDoc.is()); + Reference xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); + CPPUNIT_ASSERT(xDataSeries.is()); + Reference xPropertySet; + xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_SET_THROW); + bool blinknumberformattosource = true; + CPPUNIT_ASSERT(xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= blinknumberformattosource); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to false.", !blinknumberformattosource); + } + + load("/chart2/qa/extras/data/ods/", "tdf131979.ods"); + { + reload("calc8"); + Reference xChartDoc = getChartDocFromSheet(0, mxComponent); + CPPUNIT_ASSERT(xChartDoc.is()); + Reference xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); + CPPUNIT_ASSERT(xDataSeries.is()); + Reference xPropertySet; + xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_SET_THROW); + bool blinknumberformattosource = true; + CPPUNIT_ASSERT(xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= blinknumberformattosource); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", blinknumberformattosource); + } +} + CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/chart2/qa/extras/data/ods/tdf131115.ods b/chart2/qa/extras/data/ods/tdf131115.ods new file mode 100644 index 000000000000..76a87c2c226c Binary files /dev/null and b/chart2/qa/extras/data/ods/tdf131115.ods differ diff --git a/chart2/qa/extras/data/ods/tdf131979.ods b/chart2/qa/extras/data/ods/tdf131979.ods new file mode 100644 index 000000000000..3dfcf6b699f9 Binary files /dev/null and b/chart2/qa/extras/data/ods/tdf131979.ods differ diff --git a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx index 09ccd200521f..e632e8fb5db1 100644 --- a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx @@ -118,6 +118,12 @@ void lcl_AddPropertiesToVector_PointProperties( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID ); + rOutProperties.emplace_back( CHART_UNONAME_LINK_TO_SRC_NUMFMT, + PROP_SERIES_LINK_NUMBERFORMAT_TO_SOURCE, + cppu::UnoType::get(), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "PercentageNumberFormat", PROP_SERIES_PERCENTAGE_NUMBERFORMAT, cppu::UnoType::get(), @@ -176,12 +182,6 @@ void lcl_AddPropertiesToVector_SeriesOnly( cppu::UnoType::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT ); - - rOutProperties.emplace_back( CHART_UNONAME_LINK_TO_SRC_NUMFMT, - PROP_SERIES_LINK_NUMBERFORMAT_TO_SOURCE, - cppu::UnoType::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT ); } uno::Sequence< Property > lcl_GetPropertySequence( DataSeriesPointWrapper::eType _eType ) diff --git a/include/xmloff/prstylei.hxx b/include/xmloff/prstylei.hxx index db1700cb9e2f..9935176b028c 100644 --- a/include/xmloff/prstylei.hxx +++ b/include/xmloff/prstylei.hxx @@ -101,6 +101,8 @@ public: virtual void FillPropertySet( const css::uno::Reference< css::beans::XPropertySet > & rPropSet ); + virtual bool isEmptyDataStyleName() { return false; }; + const SvXMLStylesContext *GetStyles() const { return static_cast(mxStyles.get()); } const ::std::vector< XMLPropertyState > & GetProperties() const { return maProperties; } diff --git a/xmloff/inc/XMLChartStyleContext.hxx b/xmloff/inc/XMLChartStyleContext.hxx index cef31d3f5f1c..2c28b670de06 100644 --- a/xmloff/inc/XMLChartStyleContext.hxx +++ b/xmloff/inc/XMLChartStyleContext.hxx @@ -52,6 +52,8 @@ public: sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; + + bool isEmptyDataStyleName() override { return msDataStyleName.isEmpty(); } }; #endif // INCLUDED_XMLOFF_INC_XMLCHARTSTYLECONTEXT_HXX diff --git a/xmloff/source/chart/SchXMLSeries2Context.cxx b/xmloff/source/chart/SchXMLSeries2Context.cxx index 4e379814a859..ef6cd0249a7e 100644 --- a/xmloff/source/chart/SchXMLSeries2Context.cxx +++ b/xmloff/source/chart/SchXMLSeries2Context.cxx @@ -171,6 +171,26 @@ void lcl_resetSymbolSizeForPointsIfNecessary( const uno::Reference< beans::XProp lcl_setSymbolSizeIfNeeded( xPointProp, rImport ); } +void lcl_setLinkNumberFormatToSourceIfNeeded( const uno::Reference< beans::XPropertySet >& xPointProp + , const XMLPropStyleContext* pPropStyleContext, const SvXMLStylesContext* pStylesCtxt ) +{ + uno::Any aAny( SchXMLTools::getPropertyFromContext("LinkNumberFormatToSource", pPropStyleContext, pStylesCtxt) ); + if( !aAny.hasValue() ) + { + if( !xPointProp.is() ) + return; + + bool bLinkToSource = false; + if( xPointProp.is() && (xPointProp->getPropertyValue("LinkNumberFormatToSource") >>= bLinkToSource) ) + { + if( bLinkToSource ) + { + xPointProp->setPropertyValue("LinkNumberFormatToSource", uno::makeAny(false)); + } + } + } +} + void lcl_insertErrorBarLSequencesToMap( tSchXMLLSequencesPerIndex & rInOutMap, const uno::Reference< beans::XPropertySet > & xSeriesProp ) @@ -1084,6 +1104,8 @@ void SchXMLSeries2Context::setStylesToDataPoints( SeriesDefaultsAndStyles& rSeri pPropStyleContext->FillPropertySet( xPointProp ); if( seriesStyle.mbSymbolSizeForSeriesIsMissingInFile ) lcl_resetSymbolSizeForPointsIfNecessary( xPointProp, rImport, pPropStyleContext, pStylesCtxt ); + if( !pPropStyleContext->isEmptyDataStyleName() ) + lcl_setLinkNumberFormatToSourceIfNeeded( xPointProp, pPropStyleContext, pStylesCtxt ); } // Custom labels might be passed as property -- cgit