diff options
author | Balazs Varga <balazs.varga991@gmail.com> | 2019-12-10 12:53:08 +0100 |
---|---|---|
committer | Xisco Faulí <xiscofauli@libreoffice.org> | 2019-12-17 11:34:33 +0100 |
commit | 9c1063ba13028244346528e307d5563d6faf949d (patch) | |
tree | 3be1a753fc3a65a97176ff4aa124cba56a58bba9 | |
parent | 39e138902d05fbb00fda8003908c851d2f3ecb00 (diff) |
tdf#129173 tdf#129175 Fix number format of data labels
Show the real value (cell value) of datapoints instead
of the recalculated value in case of Percent Stacked Area
chart.
Also fix: tdf#95425
Do not reset number format of data labels when open dialog
of 'Format data series' and close dialog.
Note: Inherits the data series/point label format from the
cell format and not the axis format, if we set the 'link to source data'
option to true.
Change-Id: I04e9968034a67c6bc6b92941df61d945b4292d79
Reviewed-on: https://gerrit.libreoffice.org/84819
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
(cherry picked from commit e57d90cd4e51a1353eafc87bb29cfe6076704a7c)
Reviewed-on: https://gerrit.libreoffice.org/85198
Reviewed-by: Xisco Faulí <xiscofauli@libreoffice.org>
-rw-r--r-- | chart2/source/inc/ChartTypeHelper.hxx | 3 | ||||
-rw-r--r-- | chart2/source/tools/ChartTypeHelper.cxx | 9 | ||||
-rw-r--r-- | chart2/source/view/charttypes/AreaChart.cxx | 3 | ||||
-rw-r--r-- | chart2/source/view/charttypes/VSeriesPlotter.cxx | 5 | ||||
-rw-r--r-- | chart2/source/view/inc/VDataSeries.hxx | 1 | ||||
-rw-r--r-- | chart2/source/view/main/ChartView.cxx | 28 | ||||
-rw-r--r-- | chart2/source/view/main/VDataSeries.cxx | 16 | ||||
-rw-r--r-- | sw/qa/extras/layout/data/testAreaChartNumberFormat.docx | bin | 0 -> 26115 bytes | |||
-rw-r--r-- | sw/qa/extras/layout/layout.cxx | 16 |
9 files changed, 33 insertions, 48 deletions
diff --git a/chart2/source/inc/ChartTypeHelper.hxx b/chart2/source/inc/ChartTypeHelper.hxx index c570a15163bd..b4af58240460 100644 --- a/chart2/source/inc/ChartTypeHelper.hxx +++ b/chart2/source/inc/ChartTypeHelper.hxx @@ -79,9 +79,6 @@ public: static OUString getRoleOfSequenceForDataLabelNumberFormatDetection( const css::uno::Reference< css::chart2::XChartType >& xChartType ); - static bool shouldLabelNumberFormatKeyBeDetectedFromYAxis( const css::uno::Reference< - css::chart2::XChartType >& xChartType ); - static bool isSupportingOnlyDeepStackingFor3D( const css::uno::Reference< css::chart2::XChartType >& xChartType ); }; diff --git a/chart2/source/tools/ChartTypeHelper.cxx b/chart2/source/tools/ChartTypeHelper.cxx index 92974f5c5585..ebd2af04ab45 100644 --- a/chart2/source/tools/ChartTypeHelper.cxx +++ b/chart2/source/tools/ChartTypeHelper.cxx @@ -668,15 +668,6 @@ OUString ChartTypeHelper::getRoleOfSequenceForDataLabelNumberFormatDetection( co return aRet; } -bool ChartTypeHelper::shouldLabelNumberFormatKeyBeDetectedFromYAxis( const uno::Reference< XChartType >& xChartType ) -{ - bool bRet = true; - OUString aChartTypeName = xChartType->getChartType(); - if( aChartTypeName.match(CHART2_SERVICE_NAME_CHARTTYPE_BUBBLE) ) - bRet = false; - return bRet; -} - bool ChartTypeHelper::isSupportingOnlyDeepStackingFor3D( const uno::Reference< XChartType >& xChartType ) { bool bRet = false; diff --git a/chart2/source/view/charttypes/AreaChart.cxx b/chart2/source/view/charttypes/AreaChart.cxx index e9c54add6c0f..c7aa1656dace 100644 --- a/chart2/source/view/charttypes/AreaChart.cxx +++ b/chart2/source/view/charttypes/AreaChart.cxx @@ -722,6 +722,7 @@ void AreaChart::createShapes() if( m_nDimension==3 && m_bArea && rXSlot.m_aSeriesVector.size()!=1 ) fLogicY = fabs( fLogicY ); + double fLogicValueForLabeDisplay = fLogicY; std::map< sal_Int32, double >& rLogicYSumMap = aLogicYSumMapByX[nIndex]; if (rPosHelper.isPercentY() && rLogicYSumMap[nAttachedAxisIndex] != 0.0) { @@ -749,8 +750,6 @@ void AreaChart::createShapes() if( rLogicYForNextSeriesMap.find(nAttachedAxisIndex) == rLogicYForNextSeriesMap.end() ) rLogicYForNextSeriesMap[nAttachedAxisIndex] = 0.0; - double fLogicValueForLabeDisplay = fLogicY; - fLogicY += rLogicYForNextSeriesMap[nAttachedAxisIndex]; rLogicYForNextSeriesMap[nAttachedAxisIndex] = fLogicY; diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx index 33424056d720..2a814e2fd73a 100644 --- a/chart2/source/view/charttypes/VSeriesPlotter.cxx +++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx @@ -367,10 +367,7 @@ OUString VSeriesPlotter::getLabelTextForValue( VDataSeries const & rDataSeries } else { - if( rDataSeries.shouldLabelNumberFormatKeyBeDetectedFromYAxis() && m_aAxesNumberFormats.hasFormat(1,rDataSeries.getAttachedAxisIndex()) ) //y-axis - nNumberFormatKey = m_aAxesNumberFormats.getFormat(1,rDataSeries.getAttachedAxisIndex()); - else - nNumberFormatKey = rDataSeries.detectNumberFormatKey( nPointIndex ); + nNumberFormatKey = rDataSeries.detectNumberFormatKey( nPointIndex ); } if(nNumberFormatKey<0) nNumberFormatKey=0; diff --git a/chart2/source/view/inc/VDataSeries.hxx b/chart2/source/view/inc/VDataSeries.hxx index 4a20eb79bfea..b65ea66f1009 100644 --- a/chart2/source/view/inc/VDataSeries.hxx +++ b/chart2/source/view/inc/VDataSeries.hxx @@ -102,7 +102,6 @@ public: bool hasExplicitNumberFormat( sal_Int32 nPointIndex, bool bForPercentage ) const; sal_Int32 getExplicitNumberFormat( sal_Int32 nPointIndex, bool bForPercentage ) const; sal_Int32 detectNumberFormatKey( sal_Int32 nPointIndex ) const; - bool shouldLabelNumberFormatKeyBeDetectedFromYAxis() const; sal_Int32 getLabelPlacement( sal_Int32 nPointIndex, const css::uno::Reference<css::chart2::XChartType>& xChartType, diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx index f8456f7e6698..797ac7b46f11 100644 --- a/chart2/source/view/main/ChartView.cxx +++ b/chart2/source/view/main/ChartView.cxx @@ -1890,26 +1890,16 @@ sal_Int32 ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( { uno::Reference< chart2::XChartType > xChartType( DataSeriesHelper::getChartTypeOfSeries( xSeries, xDiagram ) ); - bool bFormatFound = false; - if( ChartTypeHelper::shouldLabelNumberFormatKeyBeDetectedFromYAxis( xChartType ) ) - { - uno::Reference< beans::XPropertySet > xAttachedAxisProps( DiagramHelper::getAttachedAxis( xSeries, xDiagram ), uno::UNO_QUERY ); - if (xAttachedAxisProps.is() && (xAttachedAxisProps->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nFormat)) - bFormatFound = true; - } - if( !bFormatFound ) - { - Reference< chart2::data::XDataSource > xSeriesSource( xSeries, uno::UNO_QUERY ); - OUString aRole( ChartTypeHelper::getRoleOfSequenceForDataLabelNumberFormatDetection( xChartType ) ); + Reference< chart2::data::XDataSource > xSeriesSource( xSeries, uno::UNO_QUERY ); + OUString aRole( ChartTypeHelper::getRoleOfSequenceForDataLabelNumberFormatDetection( xChartType ) ); - Reference< data::XLabeledDataSequence > xLabeledSequence( - DataSeriesHelper::getDataSequenceByRole( xSeriesSource, aRole )); - if( xLabeledSequence.is() ) - { - Reference< data::XDataSequence > xValues( xLabeledSequence->getValues() ); - if( xValues.is() ) - nFormat = xValues->getNumberFormatKeyByIndex( nPointIndex ); - } + Reference< data::XLabeledDataSequence > xLabeledSequence( + DataSeriesHelper::getDataSequenceByRole( xSeriesSource, aRole )); + if( xLabeledSequence.is() ) + { + Reference< data::XDataSequence > xValues( xLabeledSequence->getValues() ); + if( xValues.is() ) + nFormat = xValues->getNumberFormatKeyByIndex( nPointIndex ); } if (nFormat >= 0 && nOldFormat != nFormat) diff --git a/chart2/source/view/main/VDataSeries.cxx b/chart2/source/view/main/VDataSeries.cxx index 0f2749a1f6c7..fc21c4ba4097 100644 --- a/chart2/source/view/main/VDataSeries.cxx +++ b/chart2/source/view/main/VDataSeries.cxx @@ -551,10 +551,14 @@ bool VDataSeries::hasExplicitNumberFormat( sal_Int32 nPointIndex, bool bForPerce { OUString aPropName = bForPercentage ? OUString("PercentageNumberFormat") : OUString(CHART_UNONAME_NUMFMT); bool bHasNumberFormat = false; + bool bLinkToSource = true; uno::Reference< beans::XPropertySet > xPointProp( getPropertiesOfPoint( nPointIndex )); sal_Int32 nNumberFormat = -1; - if( xPointProp.is() && (xPointProp->getPropertyValue(aPropName) >>= nNumberFormat) ) - bHasNumberFormat = true; + if( xPointProp.is() && (xPointProp->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= bLinkToSource)) + { + if( !bLinkToSource && (xPointProp->getPropertyValue(aPropName) >>= nNumberFormat)) + bHasNumberFormat = true; + } return bHasNumberFormat; } sal_Int32 VDataSeries::getExplicitNumberFormat( sal_Int32 nPointIndex, bool bForPercentage ) const @@ -583,14 +587,6 @@ void VDataSeries::setRoleOfSequenceForDataLabelNumberFormatDetection( const OUSt else if (rRole == "values-x") m_pValueSequenceForDataLabelNumberFormatDetection = &m_aValues_X; } -bool VDataSeries::shouldLabelNumberFormatKeyBeDetectedFromYAxis() const -{ - if( m_pValueSequenceForDataLabelNumberFormatDetection == &m_aValues_Bubble_Size ) - return false; - else if( m_pValueSequenceForDataLabelNumberFormatDetection == &m_aValues_X ) - return false; - return true; -} sal_Int32 VDataSeries::detectNumberFormatKey( sal_Int32 index ) const { sal_Int32 nRet = 0; diff --git a/sw/qa/extras/layout/data/testAreaChartNumberFormat.docx b/sw/qa/extras/layout/data/testAreaChartNumberFormat.docx Binary files differnew file mode 100644 index 000000000000..33e1c58788a5 --- /dev/null +++ b/sw/qa/extras/layout/data/testAreaChartNumberFormat.docx diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index d96fe192a252..c42390c26fbe 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -2474,6 +2474,22 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf129054) CPPUNIT_ASSERT_EQUAL(sal_Int32(4810), nYTop - nYBottom); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf129173) +{ + SwDoc* pDoc = createDoc("testAreaChartNumberFormat.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocPtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Check the first data label of area chart. + assertXPathContent( + pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[22]/text", "56"); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf116925) { SwDoc* pDoc = createDoc("tdf116925.docx"); |