diff options
Diffstat (limited to 'xmloff')
-rw-r--r-- | xmloff/source/chart/SchXMLChartContext.cxx | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/xmloff/source/chart/SchXMLChartContext.cxx b/xmloff/source/chart/SchXMLChartContext.cxx index 1dc1c145e16e..8e264843e2dd 100644 --- a/xmloff/source/chart/SchXMLChartContext.cxx +++ b/xmloff/source/chart/SchXMLChartContext.cxx @@ -241,6 +241,13 @@ SchXMLChartContext::SchXMLChartContext( SchXMLImportHelper& rImpHelper, SchXMLChartContext::~SchXMLChartContext() {} +bool lcl_hasServiceName(Reference<lang::XMultiServiceFactory> & xFactory, OUString const & rServiceName) +{ + const uno::Sequence<OUString> aServiceNames(xFactory->getAvailableServiceNames()); + + return std::find(aServiceNames.begin(), aServiceNames.end(), rServiceName) != aServiceNames.end(); +} + void lcl_setDataProvider(uno::Reference<chart2::XChartDocument> const & xChartDoc, OUString const & sDataPilotSource) { if (!xChartDoc.is()) @@ -264,21 +271,24 @@ void lcl_setDataProvider(uno::Reference<chart2::XChartDocument> const & xChartDo if (bHasDataPilotSource) aDataProviderServiceName = "com.sun.star.chart2.data.PivotTableDataProvider"; - const uno::Sequence<OUString> aServiceNames(xFact->getAvailableServiceNames()); - - if (std::find(aServiceNames.begin(), aServiceNames.end(), aDataProviderServiceName) != aServiceNames.end()) + if (lcl_hasServiceName(xFact, aDataProviderServiceName)) { Reference<chart2::data::XDataProvider> xProvider(xFact->createInstance(aDataProviderServiceName), uno::UNO_QUERY); if (xProvider.is()) { - xDataReceiver->attachDataProvider(xProvider); if (bHasDataPilotSource) { Reference<chart2::data::XPivotTableDataProvider> xPivotTableDataProvider(xProvider, uno::UNO_QUERY); xPivotTableDataProvider->setPivotTableName(sDataPilotSource); + xDataReceiver->attachDataProvider(xProvider); + bHasOwnData = !xPivotTableDataProvider->hasPivotTable(); + } + else + { + xDataReceiver->attachDataProvider(xProvider); + bHasOwnData = false; } - bHasOwnData = false; } } } |