chart2/qa/extras/chart2export.cxx | 24 ++++++++++++++++++++ chart2/qa/extras/charttest.hxx | 31 +++++++++++++++++++++++--- chart2/qa/extras/data/ods/labelString.ods |binary chart2/source/tools/AxisHelper.cxx | 20 ++++++++++------ include/xmloff/xmltoken.hxx | 1 xmloff/inc/SchXMLImport.hxx | 1 xmloff/source/chart/SchXMLExport.cxx | 28 ++++++++++++++++++++--- xmloff/source/chart/SchXMLImport.cxx | 1 xmloff/source/chart/SchXMLSeries2Context.cxx | 19 +++++++++++----- xmloff/source/chart/SchXMLSeries2Context.hxx | 1 xmloff/source/chart/SchXMLTools.cxx | 32 +++++++++++++++++++++++++++ xmloff/source/chart/SchXMLTools.hxx | 5 ++++ xmloff/source/core/xmltoken.cxx | 1 13 files changed, 143 insertions(+), 21 deletions(-)
New commits: commit c47bbfce2deea8bda80f06c961be531aee4b23ce Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Apr 5 18:33:07 2014 +0200 add test for fdo#64722, cp#1000058 Change-Id: Idccff4629b8af84e59d52fb3135e9217d3564cb9 diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index ead4350..fa1c90c 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -55,6 +55,7 @@ public: void testEmbeddingsOleObjectGrabBag(); void testGapWidthXLSX(); void testSmoothedLines(); + void testLabelStringODS(); CPPUNIT_TEST_SUITE(Chart2ExportTest); CPPUNIT_TEST(test); @@ -82,6 +83,7 @@ public: CPPUNIT_TEST(testEmbeddingsOleObjectGrabBag); CPPUNIT_TEST(testGapWidthXLSX); CPPUNIT_TEST(testSmoothedLines); + CPPUNIT_TEST(testLabelStringODS); CPPUNIT_TEST_SUITE_END(); protected: @@ -782,6 +784,28 @@ void Chart2ExportTest::testSmoothedLines() assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[1]/c:smooth", "val", "0"); } +void Chart2ExportTest::testLabelStringODS() +{ + load("/chart2/qa/extras/data/ods/", "labelString.ods"); + + uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent ); + Reference< chart2::data::XDataSequence > xLabelSeq = + getLabelDataSequenceFromDoc(xChartDoc); + CPPUNIT_ASSERT(xLabelSeq.is()); + + OUString aLabelString = xLabelSeq->getSourceRangeRepresentation(); + CPPUNIT_ASSERT_EQUAL(OUString("\"LabelName\""), aLabelString); + + reload("calc8"); + + xChartDoc = getChartDocFromSheet( 0, mxComponent ); + xLabelSeq = getLabelDataSequenceFromDoc(xChartDoc); + CPPUNIT_ASSERT(xLabelSeq.is()); + + aLabelString = xLabelSeq->getSourceRangeRepresentation(); + CPPUNIT_ASSERT_EQUAL(OUString("\"LabelName\""), aLabelString); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx index 73b5748..471346c 100644 --- a/chart2/qa/extras/charttest.hxx +++ b/chart2/qa/extras/charttest.hxx @@ -35,6 +35,8 @@ #include <com/sun/star/chart2/XChartTypeContainer.hpp> #include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> #include <com/sun/star/chart2/XDataSeriesContainer.hpp> +#include <com/sun/star/chart2/data/XLabeledDataSequence.hpp> +#include <com/sun/star/chart2/data/XDataSource.hpp> #include <com/sun/star/chart/XChartDataArray.hpp> #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> #include <com/sun/star/chart/XChartDocument.hpp> @@ -213,6 +215,29 @@ Reference< chart2::XDataSeries > getDataSeriesFromDoc( uno::Reference< chart2::X return xSeries; } +Reference< chart2::data::XDataSequence > getLabelDataSequenceFromDoc( + Reference< chart2::XChartDocument > xChartDoc, + sal_Int32 nDataSeries = 0, sal_Int32 nChartType = 0, sal_Int32 nCooSys = 0 ) +{ + Reference< chart2::XDataSeries > xDataSeries = + getDataSeriesFromDoc( xChartDoc, nDataSeries, nChartType, nCooSys ); + CPPUNIT_ASSERT(xDataSeries.is()); + Reference< chart2::data::XDataSource > xDataSource( xDataSeries, uno::UNO_QUERY_THROW ); + Sequence< Reference< chart2::data::XLabeledDataSequence > > xDataSequences = + xDataSource->getDataSequences(); + for(sal_Int32 i = 0; i < xDataSequences.getLength(); ++i) + { + Reference< chart2::data::XDataSequence> xLabelSeq = xDataSequences[i]->getLabel(); + if(!xLabelSeq.is()) + continue; + + return xLabelSeq; + } + + CPPUNIT_FAIL("no Label sequence found"); + return Reference< chart2::data::XDataSequence > (); +} + uno::Sequence < OUString > getWriterChartColumnDescriptions( Reference< lang::XComponent > mxComponent ) { uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY); diff --git a/chart2/qa/extras/data/ods/labelString.ods b/chart2/qa/extras/data/ods/labelString.ods new file mode 100644 index 0000000..2b7e03c Binary files /dev/null and b/chart2/qa/extras/data/ods/labelString.ods differ commit 6052c282400029f550f5e8ec938f1137edcd1e96 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Apr 5 17:18:53 2014 +0200 rename variable Change-Id: I6ac553172a7c017010d4efa42224f25e2d5537da diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx index 900fe45..73b5748 100644 --- a/chart2/qa/extras/charttest.hxx +++ b/chart2/qa/extras/charttest.hxx @@ -202,10 +202,10 @@ Reference< chart2::XDataSeries > getDataSeriesFromDoc( uno::Reference< chart2::X sal_Int32 nDataSeries, sal_Int32 nChartType = 0, sal_Int32 nCooSys = 0 ) { Reference< chart2::XChartType > xChartType = getChartTypeFromDoc( xChartDoc, nChartType, nCooSys ); - Reference< chart2::XDataSeriesContainer > xDataSequenceContainer( xChartType, UNO_QUERY_THROW ); - CPPUNIT_ASSERT ( xDataSequenceContainer.is() ); + Reference< chart2::XDataSeriesContainer > xDataSeriesContainer( xChartType, UNO_QUERY_THROW ); + CPPUNIT_ASSERT ( xDataSeriesContainer.is() ); - Sequence< Reference< chart2::XDataSeries > > xSeriesSequence( xDataSequenceContainer->getDataSeries() ); + Sequence< Reference< chart2::XDataSeries > > xSeriesSequence( xDataSeriesContainer->getDataSeries() ); CPPUNIT_ASSERT( xSeriesSequence.getLength() > nDataSeries ); Reference< chart2::XDataSeries > xSeries = xSeriesSequence[nDataSeries]; commit 89bbc9286778df711f786f50c27f65315b29c39a Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Apr 5 16:49:39 2014 +0200 export label names that are strings, fdo#64722, cp#1000058 Change-Id: Id72e9778c70db02b942326c6f8b5f448acb28b41 diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx index c934912..9e206d8 100644 --- a/include/xmloff/xmltoken.hxx +++ b/include/xmloff/xmltoken.hxx @@ -1066,6 +1066,7 @@ namespace xmloff { namespace token { XML_LABEL_CELL_RANGE_ADDRESS, XML_LABEL_RANGE, XML_LABEL_RANGES, + XML_LABEL_STRING, XML_LAMBDA, XML_LANDSCAPE, XML_LANGUAGE, diff --git a/xmloff/inc/SchXMLImport.hxx b/xmloff/inc/SchXMLImport.hxx index 173788a..8b6286d 100644 --- a/xmloff/inc/SchXMLImport.hxx +++ b/xmloff/inc/SchXMLImport.hxx @@ -140,6 +140,7 @@ enum SchXMLSeriesAttrMap { XML_TOK_SERIES_CELL_RANGE, XML_TOK_SERIES_LABEL_ADDRESS, + XML_TOK_SERIES_LABEL_STRING, XML_TOK_SERIES_ATTACHED_AXIS, XML_TOK_SERIES_STYLE_NAME, XML_TOK_SERIES_CHART_CLASS diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx index 859e4a5..bd17360 100644 --- a/xmloff/source/chart/SchXMLExport.cxx +++ b/xmloff/source/chart/SchXMLExport.cxx @@ -2553,6 +2553,14 @@ namespace //no doubles and no texts return false; } + + bool isString(const OUString& rString) + { + if(rString.startsWith("\"") && rString.endsWith("\"")) + return true; + + return false; + } } void SchXMLExportHelper_Impl::exportSeries( @@ -2720,10 +2728,21 @@ void SchXMLExportHelper_Impl::exportSeries( modifyLabelRange = true; if (modifyLabelRange) aRange = "label " + OUString::number(aRange.copy( OUString("label").getLength()).toInt32() - 1); - mrExport.AddAttribute( XML_NAMESPACE_CHART, XML_LABEL_CELL_ADDRESS, - lcl_ConvertRange( - aRange, - xNewDoc )); + + OUString aXMLRange = lcl_ConvertRange( aRange, xNewDoc ); + if(aXMLRange.isEmpty() && !aRange.isEmpty()) + { + // might just be a string + bool bIsString = isString(aRange); + if(bIsString) + { + mrExport.AddAttribute( XML_NAMESPACE_LO_EXT, + XML_LABEL_STRING, aRange ); + } + } + else + mrExport.AddAttribute( XML_NAMESPACE_CHART, + XML_LABEL_CELL_ADDRESS, aXMLRange ); } if( xLabelSeq.is() || xValuesSeq.is() ) aSeriesLabelValuesPair = tLabelValuesDataPair( xLabelSeq, xValuesSeq ); @@ -3138,6 +3157,7 @@ void SchXMLExportHelper_Impl::exportCandleStickSeries( Reference< chart2::XChartDocument > xNewDoc( mrExport.GetModel(), uno::UNO_QUERY ); //@todo: export data points + //TODO: moggi: same code three times // open if( bJapaneseCandleSticks ) { diff --git a/xmloff/source/chart/SchXMLImport.cxx b/xmloff/source/chart/SchXMLImport.cxx index 3a3dc51..042dcba 100644 --- a/xmloff/source/chart/SchXMLImport.cxx +++ b/xmloff/source/chart/SchXMLImport.cxx @@ -339,6 +339,7 @@ const SvXMLTokenMap& SchXMLImportHelper::GetSeriesAttrTokenMap() { { XML_NAMESPACE_CHART, XML_VALUES_CELL_RANGE_ADDRESS, XML_TOK_SERIES_CELL_RANGE }, { XML_NAMESPACE_CHART, XML_LABEL_CELL_ADDRESS, XML_TOK_SERIES_LABEL_ADDRESS }, + { XML_NAMESPACE_LO_EXT, XML_LABEL_STRING, XML_TOK_SERIES_LABEL_STRING }, { XML_NAMESPACE_CHART, XML_ATTACHED_AXIS, XML_TOK_SERIES_ATTACHED_AXIS }, { XML_NAMESPACE_CHART, XML_STYLE_NAME, XML_TOK_SERIES_STYLE_NAME }, { XML_NAMESPACE_CHART, XML_CLASS, XML_TOK_SERIES_CHART_CLASS }, diff --git a/xmloff/source/chart/SchXMLSeries2Context.cxx b/xmloff/source/chart/SchXMLSeries2Context.cxx index 795effb..54dcd57 100644 --- a/xmloff/source/chart/SchXMLSeries2Context.cxx +++ b/xmloff/source/chart/SchXMLSeries2Context.cxx @@ -308,6 +308,7 @@ void SchXMLSeries2Context::StartElement( const uno::Reference< xml::sax::XAttrib bool bHasRange = false; OUString aSeriesLabelRange; + OUString aSeriesLabelString; for( sal_Int16 i = 0; i < nAttrCount; i++ ) { @@ -325,6 +326,9 @@ void SchXMLSeries2Context::StartElement( const uno::Reference< xml::sax::XAttrib case XML_TOK_SERIES_LABEL_ADDRESS: aSeriesLabelRange = aValue; break; + case XML_TOK_SERIES_LABEL_STRING: + aSeriesLabelString = aValue; + break; case XML_TOK_SERIES_ATTACHED_AXIS: { sal_Int32 nNumOfAxes = mrAxes.size(); @@ -442,6 +446,12 @@ void SchXMLSeries2Context::StartElement( const uno::Reference< xml::sax::XAttrib SchXMLTools::CreateDataSequence( aSeriesLabelRange, mxNewDoc ); xLabeledSeq->setLabel( xLabelSequence ); } + else if( !aSeriesLabelString.isEmpty() ) + { + Reference< chart2::data::XDataSequence > xLabelSequence = + SchXMLTools::CreateDataSequenceWithoutConvert( aSeriesLabelString, mxNewDoc ); + xLabeledSeq->setLabel( xLabelSequence ); + } // Note: Even if we have no label, we have to register the label // for creation, because internal data always has labels. If diff --git a/xmloff/source/chart/SchXMLTools.cxx b/xmloff/source/chart/SchXMLTools.cxx index 8e86b91..e37ed83 100644 --- a/xmloff/source/chart/SchXMLTools.cxx +++ b/xmloff/source/chart/SchXMLTools.cxx @@ -424,6 +424,38 @@ Reference< chart2::data::XDataSequence > CreateDataSequence( return xRet; } +Reference< chart2::data::XDataSequence > CreateDataSequenceWithoutConvert( + const OUString & rRange, + const Reference< chart2::XChartDocument >& xChartDoc ) +{ + Reference< chart2::data::XDataSequence > xRet; + + if( !xChartDoc.is() ) + { + SAL_WARN("xmloff.chart", "need a chart document" ); + return xRet; + } + + Reference< chart2::data::XDataProvider > xDataProvider( xChartDoc->getDataProvider() ); + if( !xDataProvider.is() ) + { + SAL_WARN("xmloff.chart", "need a data provider" ); + return xRet; + } + + try + { + xRet.set( xDataProvider->createDataSequenceByRangeRepresentation( rRange ) ); + SchXMLTools::setXMLRangePropertyAtDataSequence( xRet, rRange ); + } + catch( const lang::IllegalArgumentException & ) + { + SAL_WARN("xmloff.chart", "could not create data sequence" ); + } + + return xRet; +} + void CreateCategories( const uno::Reference< chart2::data::XDataProvider > & xDataProvider, const uno::Reference< chart2::XChartDocument > & xNewDoc, diff --git a/xmloff/source/chart/SchXMLTools.hxx b/xmloff/source/chart/SchXMLTools.hxx index 0b6f49a..ed21ea2 100644 --- a/xmloff/source/chart/SchXMLTools.hxx +++ b/xmloff/source/chart/SchXMLTools.hxx @@ -86,6 +86,11 @@ namespace SchXMLTools const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDoc ); + ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > CreateDataSequenceWithoutConvert( + const OUString& rRange, + const ::com::sun::star::uno::Reference< + ::com::sun::star::chart2::XChartDocument >& xChartDoc ); + void CreateCategories( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataProvider > & xDataProvider, const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > & xNewDoc, diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx index c28b850..09027cd 100644 --- a/xmloff/source/core/xmltoken.cxx +++ b/xmloff/source/core/xmltoken.cxx @@ -1071,6 +1071,7 @@ namespace xmloff { namespace token { TOKEN( "label-cell-range-address", XML_LABEL_CELL_RANGE_ADDRESS ), TOKEN( "label-range", XML_LABEL_RANGE ), TOKEN( "label-ranges", XML_LABEL_RANGES ), + TOKEN( "label-string", XML_LABEL_STRING ), TOKEN( "lambda", XML_LAMBDA ), TOKEN( "landscape", XML_LANDSCAPE ), TOKEN( "language", XML_LANGUAGE ), commit 2c59f12e5a9b062f91d6f0b85d4b6196728c689c Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Apr 5 15:34:38 2014 +0200 no need for member variable and bool variable Change-Id: I58dc22fdec3db8280506a92fe16065cc5482c357 diff --git a/xmloff/source/chart/SchXMLSeries2Context.cxx b/xmloff/source/chart/SchXMLSeries2Context.cxx index bbea32e..795effb 100644 --- a/xmloff/source/chart/SchXMLSeries2Context.cxx +++ b/xmloff/source/chart/SchXMLSeries2Context.cxx @@ -307,7 +307,7 @@ void SchXMLSeries2Context::StartElement( const uno::Reference< xml::sax::XAttrib mnAttachedAxis = 1; bool bHasRange = false; - bool bHasLabelRange = false; + OUString aSeriesLabelRange; for( sal_Int16 i = 0; i < nAttrCount; i++ ) { @@ -323,8 +323,7 @@ void SchXMLSeries2Context::StartElement( const uno::Reference< xml::sax::XAttrib bHasRange = true; break; case XML_TOK_SERIES_LABEL_ADDRESS: - m_aSeriesLabelRange = aValue; - bHasLabelRange = true; + aSeriesLabelRange = aValue; break; case XML_TOK_SERIES_ATTACHED_AXIS: { @@ -437,10 +436,10 @@ void SchXMLSeries2Context::StartElement( const uno::Reference< xml::sax::XAttrib tSchXMLIndexWithPart( m_rGlobalSeriesImportInfo.nCurrentDataIndex, SCH_XML_PART_VALUES ), xLabeledSeq )); // label - if( bHasLabelRange && !m_aSeriesLabelRange.isEmpty() ) + if( !aSeriesLabelRange.isEmpty() ) { Reference< chart2::data::XDataSequence > xLabelSequence = - SchXMLTools::CreateDataSequence( m_aSeriesLabelRange, mxNewDoc ); + SchXMLTools::CreateDataSequence( aSeriesLabelRange, mxNewDoc ); xLabeledSeq->setLabel( xLabelSequence ); } diff --git a/xmloff/source/chart/SchXMLSeries2Context.hxx b/xmloff/source/chart/SchXMLSeries2Context.hxx index a4974ce..ee78f4c 100644 --- a/xmloff/source/chart/SchXMLSeries2Context.hxx +++ b/xmloff/source/chart/SchXMLSeries2Context.hxx @@ -64,7 +64,6 @@ private: OUString maGlobalChartTypeName; OUString maSeriesChartTypeName; OUString m_aSeriesRange; - OUString m_aSeriesLabelRange; bool m_bHasDomainContext; tSchXMLLSequencesPerIndex & mrLSequencesPerIndex; tSchXMLLSequencesPerIndex maPostponedSequences; commit 291bf3b84f423217959b38b46a16055947c9e84e Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Apr 5 02:50:40 2014 +0200 prevent excessive exceptions They hide the interesting parts that I'm interested in and are always thrown so let us avoid them Change-Id: I532a3fe678de7d3ac0776db23363df5d35c793eb diff --git a/chart2/source/tools/AxisHelper.cxx b/chart2/source/tools/AxisHelper.cxx index 4b372ca..65c297fb 100644 --- a/chart2/source/tools/AxisHelper.cxx +++ b/chart2/source/tools/AxisHelper.cxx @@ -597,14 +597,18 @@ Reference< XAxis > AxisHelper::getAxis( sal_Int32 nDimensionIndex, sal_Int32 nAx , const Reference< XCoordinateSystem >& xCooSys ) { Reference< XAxis > xRet; - try - { - if( xCooSys.is() ) - xRet.set( xCooSys->getAxisByDimension( nDimensionIndex, nAxisIndex ) ); - } - catch( const uno::Exception & ) - { - } + if(!xCooSys.is()) + return xRet; + + if(nDimensionIndex >= xCooSys->getDimension()) + return xRet; + + if(nAxisIndex > xCooSys->getMaximumAxisIndexByDimension(nDimensionIndex)) + return xRet; + + assert(nAxisIndex >= 0); + assert(nDimensionIndex >= 0); + xRet.set( xCooSys->getAxisByDimension( nDimensionIndex, nAxisIndex ) ); return xRet; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits