chart2/qa/extras/chart2import.cxx | 68 ++++++++++++++ chart2/qa/extras/charttest.hxx | 9 + chart2/qa/extras/data/pptx/percentage-number-formats.pptx |binary oox/source/drawingml/chart/modelbase.cxx | 3 oox/source/drawingml/chart/objectformatter.cxx | 11 +- oox/source/drawingml/chart/seriesconverter.cxx | 5 - 6 files changed, 88 insertions(+), 8 deletions(-)
New commits: commit dbe2da93340cb0b693f49afc93812199a39bb118 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Tue Jul 29 21:09:08 2014 +0200 Add chart import, percentage number formats, unit test. Change-Id: Id1b73c153f4b09ab94446452e7eb096b529473f4 diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index 7851291..659987a 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -10,6 +10,7 @@ #include "charttest.hxx" #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> #include <com/sun/star/chart2/CurveStyle.hpp> +#include <com/sun/star/chart2/DataPointLabel.hpp> #include <com/sun/star/chart/ErrorBarStyle.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart/XChartDocument.hpp> @@ -40,6 +41,7 @@ public: * hidden columns for internal data table yet). */ void testPPTXHiddenDataSeries(); + void testPPTXPercentageNumberFormats(); void testPPTXStackedNonStackedYAxis(); void testPPTChartSeries(); void testODPChartSeries(); @@ -71,6 +73,7 @@ public: CPPUNIT_TEST(testPPTChartSeries); CPPUNIT_TEST(testPPTXChartSeries); CPPUNIT_TEST(testPPTXHiddenDataSeries); + CPPUNIT_TEST(testPPTXPercentageNumberFormats); CPPUNIT_TEST(testPPTXStackedNonStackedYAxis); CPPUNIT_TEST(testODPChartSeries); CPPUNIT_TEST(testBnc864396); @@ -367,6 +370,71 @@ void Chart2ImportTest::testPPTXHiddenDataSeries() CPPUNIT_ASSERT_EQUAL(OUString("Category 4"), aCategories[3][0]); } +void Chart2ImportTest::testPPTXPercentageNumberFormats() +{ + load("/chart2/qa/extras/data/pptx/", "percentage-number-formats.pptx"); + + // 1st chart + Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDoc.is()); + + uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); + CPPUNIT_ASSERT(xDataSeries.is()); + uno::Reference<beans::XPropertySet> xPropertySet; + chart2::DataPointLabel aLabel; + sal_Int32 nNumberFormat; + const sal_Int32 nPercentFormatSimple = getNumberFormat(xChartDoc, "0%"); + const sal_Int32 nPercentFormatDecimal = getNumberFormat(xChartDoc, "0.00%"); + + xPropertySet.set(xDataSeries->getDataPointByIndex(0), uno::UNO_QUERY_THROW); + xPropertySet->getPropertyValue("Label") >>= aLabel; + CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumber); + CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumberInPercent); + xPropertySet->getPropertyValue("PercentageNumberFormat") >>= nNumberFormat; + CPPUNIT_ASSERT_EQUAL(nPercentFormatSimple, nNumberFormat); + + xPropertySet.set(xDataSeries->getDataPointByIndex(1), uno::UNO_QUERY_THROW); + xPropertySet->getPropertyValue("Label") >>= aLabel; + CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumber); + CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumberInPercent); + xPropertySet->getPropertyValue("PercentageNumberFormat") >>= nNumberFormat; + CPPUNIT_ASSERT_EQUAL(nPercentFormatDecimal, nNumberFormat); + + xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_QUERY_THROW); + xPropertySet->getPropertyValue("Label") >>= aLabel; + CPPUNIT_ASSERT_EQUAL(sal_False, aLabel.ShowNumber); + CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumberInPercent); + xPropertySet->getPropertyValue("PercentageNumberFormat") >>= nNumberFormat; + CPPUNIT_ASSERT_EQUAL(nPercentFormatSimple, nNumberFormat); + + xPropertySet.set(xDataSeries->getDataPointByIndex(3), uno::UNO_QUERY_THROW); + xPropertySet->getPropertyValue("Label") >>= aLabel; + CPPUNIT_ASSERT_EQUAL(sal_False, aLabel.ShowNumber); + CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumberInPercent); + xPropertySet->getPropertyValue("PercentageNumberFormat") >>= nNumberFormat; + CPPUNIT_ASSERT_EQUAL(nPercentFormatDecimal, nNumberFormat); + + // 2nd chart + xChartDoc.set(getChartDocFromDrawImpress(1, 0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDoc.is()); + + Reference<chart2::XAxis> xYAxis = getAxisFromDoc(xChartDoc, 0, 1, 0); + CPPUNIT_ASSERT(xYAxis.is()); + + Reference<beans::XPropertySet> xPS(xYAxis, uno::UNO_QUERY_THROW); + bool bLinkNumberFormatToSource = true; + bool bSuccess = xPS->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= bLinkNumberFormatToSource; + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to false.", bSuccess && !bLinkNumberFormatToSource); + + // FIXME: This should be in fact "0.00%". + // see TODO in oox/source/drawingml/chart/modelbase.cxx + const sal_Int32 nPercentFormatDecimalShort = getNumberFormat(xChartDoc, "0.0%"); + nNumberFormat = getNumberFormatFromAxis(xYAxis); + CPPUNIT_ASSERT_EQUAL(nPercentFormatDecimalShort, nNumberFormat); + sal_Int16 nType = getNumberFormatType(xChartDoc, nNumberFormat); + CPPUNIT_ASSERT_MESSAGE("Y axis should be a percent format.", (nType & util::NumberFormat::PERCENT)); +} + void Chart2ImportTest::testPPTXStackedNonStackedYAxis() { load("/chart2/qa/extras/data/pptx/", "stacked-non-stacked-mix-y-axis.pptx"); diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx index 318bac2..7c53b95 100644 --- a/chart2/qa/extras/charttest.hxx +++ b/chart2/qa/extras/charttest.hxx @@ -494,6 +494,15 @@ OUString getTitleString( const Reference<chart2::XTitled>& xTitled ) return aText; } +sal_Int32 getNumberFormat( const Reference<chart2::XChartDocument>& xChartDoc, const OUString& sFormat ) +{ + Reference<util::XNumberFormatsSupplier> xNFS(xChartDoc, uno::UNO_QUERY_THROW); + Reference<util::XNumberFormats> xNumberFormats = xNFS->getNumberFormats(); + CPPUNIT_ASSERT(xNumberFormats.is()); + + return xNumberFormats->queryKey(sFormat, css::lang::Locale(), sal_False); +} + sal_Int32 getNumberFormatFromAxis( const Reference<chart2::XAxis>& xAxis ) { Reference<beans::XPropertySet> xPS(xAxis, uno::UNO_QUERY); diff --git a/chart2/qa/extras/data/pptx/percentage-number-formats.pptx b/chart2/qa/extras/data/pptx/percentage-number-formats.pptx new file mode 100755 index 0000000..280c7ef Binary files /dev/null and b/chart2/qa/extras/data/pptx/percentage-number-formats.pptx differ commit c8cc89ff802d86b1f3a69afe1b4835b7df7f70c7 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Tue Jul 29 21:10:22 2014 +0200 Fix some number format issues, bnc#862510 Set "LinkNumberFormatToSource" to false, so that format code is not ignored. Also, do not inherit format code common for all labels, if there is specific format code for a data label. Change-Id: I505311d5df641d61e616e354734bd332609fa122 diff --git a/oox/source/drawingml/chart/modelbase.cxx b/oox/source/drawingml/chart/modelbase.cxx index d3e6961..27cb179 100644 --- a/oox/source/drawingml/chart/modelbase.cxx +++ b/oox/source/drawingml/chart/modelbase.cxx @@ -33,8 +33,7 @@ NumberFormat::NumberFormat() : void NumberFormat::setAttributes( const AttributeList& rAttribs ) { maFormatCode = rAttribs.getString( XML_formatCode, OUString() ); - // default is 'false', not 'true' as specified - mbSourceLinked = rAttribs.getBool( XML_sourceLinked, false ); + // TODO: if XML_sourceLinked is true, <c:formatCode> should be used instead. } LayoutModel::LayoutModel() : diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx index 3b91afe..89fa237 100644 --- a/oox/source/drawingml/chart/objectformatter.cxx +++ b/oox/source/drawingml/chart/objectformatter.cxx @@ -1106,7 +1106,9 @@ void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFo append( OUStringToOString( rNumberFormat.maFormatCode, osl_getThreadTextEncoding() ) ).append( '\'' ).getStr() ); } - rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.mbSourceLinked)); + // Format code is ignored if "LinkNumberFormatToSource" is set to "true" :-/ + // See AxisHelper::getExplicitNumberFormatKeyForAxis() + rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.maFormatCode.isEmpty())); } } diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx index 5326ff4..b1b9960 100644 --- a/oox/source/drawingml/chart/seriesconverter.cxx +++ b/oox/source/drawingml/chart/seriesconverter.cxx @@ -253,9 +253,8 @@ void DataLabelsConverter::convertFromModel( const Reference< XDataSeries >& rxDa // data point label settings for( DataLabelsModel::DataLabelVector::iterator aIt = mrModel.maPointLabels.begin(), aEnd = mrModel.maPointLabels.end(); aIt != aEnd; ++aIt ) { - (*aIt)->maNumberFormat.maFormatCode = mrModel.maNumberFormat.maFormatCode; - if( !mrModel.maNumberFormat.maFormatCode.isEmpty() ) - (*aIt)->maNumberFormat.mbSourceLinked = false; + if ((*aIt)->maNumberFormat.maFormatCode.isEmpty()) + (*aIt)->maNumberFormat = mrModel.maNumberFormat; DataLabelConverter aLabelConv( *this, **aIt ); aLabelConv.convertFromModel( rxDataSeries, rTypeGroup ); commit 5f47e319428a703ea53ce49d166e7628aaa60789 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Tue Jul 29 07:53:22 2014 +0200 bnc#862510: PPTX import: Properly show data labels in percent format. Usually, "General" is "0.00" number format, but in this case, when we want to show percent value, MSO writes that instead of "0%". Change-Id: I748719765f58e66f9f3fb43c2b527c6823ef6fa1 diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx index b919e6b..3b91afe 100644 --- a/oox/source/drawingml/chart/objectformatter.cxx +++ b/oox/source/drawingml/chart/objectformatter.cxx @@ -1091,9 +1091,12 @@ void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFo sal_Int32 nPropId = bPercentFormat ? PROP_PercentageNumberFormat : PROP_NumberFormat; try { - sal_Int32 nIndex = rNumberFormat.maFormatCode.equalsIgnoreAsciiCase("general") ? + bool bGeneral = rNumberFormat.maFormatCode.equalsIgnoreAsciiCase("general"); + sal_Int32 nIndex = bGeneral && !bPercentFormat ? mxData->mxNumTypes->getStandardIndex( mxData->maFromLocale ) : - mxData->mxNumFmts->addNewConverted( rNumberFormat.maFormatCode, mxData->maEnUsLocale, mxData->maFromLocale ); + mxData->mxNumFmts->addNewConverted( + bGeneral ? OUString("0%") : rNumberFormat.maFormatCode, + mxData->maEnUsLocale, mxData->maFromLocale ); if( nIndex >= 0 ) rPropSet.setProperty( nPropId, nIndex ); }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits