From 4dda042c354b4cfaf190bca35092bbd5f6dc2a1f Mon Sep 17 00:00:00 2001 From: Armin Le Grand Date: Mon, 1 Jul 2013 10:43:33 +0000 Subject: Resolves: #i120559# Corrected load for charts without RangeString... but with local row-oriented data (cherry picked from commit 855d5e3bc075e516edf1dc7e844924bbf9ab590c) Conflicts: chart2/source/tools/ChartModelHelper.cxx Change-Id: I4979b639f5652a1c27b640b6b469f66c65a888aa --- chart2/source/inc/InternalDataProvider.hxx | 9 ++++++-- chart2/source/tools/ChartModelHelper.cxx | 32 +++++++++++++++++++++++++++- chart2/source/tools/InternalDataProvider.cxx | 17 ++++++++++++--- 3 files changed, 52 insertions(+), 6 deletions(-) (limited to 'chart2') diff --git a/chart2/source/inc/InternalDataProvider.hxx b/chart2/source/inc/InternalDataProvider.hxx index 3b6cd9a46da0..71a61a590362 100644 --- a/chart2/source/inc/InternalDataProvider.hxx +++ b/chart2/source/inc/InternalDataProvider.hxx @@ -71,8 +71,13 @@ class InternalDataProvider : { public: explicit InternalDataProvider(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & _xContext); - explicit InternalDataProvider( const ::com::sun::star::uno::Reference< - ::com::sun::star::chart2::XChartDocument > & xChartDoc, bool bConnectToModel ); + + // #i120559# allow handing over a default for data orientation + // (DataInColumns) that will be used when no data is available + explicit InternalDataProvider( + const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > & xChartDoc, + bool bConnectToModel, + bool bDefaultDataInColumns ); explicit InternalDataProvider( const InternalDataProvider & rOther ); virtual ~InternalDataProvider(); diff --git a/chart2/source/tools/ChartModelHelper.cxx b/chart2/source/tools/ChartModelHelper.cxx index 7002a471f2d0..5c1e78d8e800 100644 --- a/chart2/source/tools/ChartModelHelper.cxx +++ b/chart2/source/tools/ChartModelHelper.cxx @@ -25,6 +25,8 @@ #include "RangeHighlighter.hxx" #include "InternalDataProvider.hxx" +#include +#include #include #include #include @@ -50,7 +52,35 @@ uno::Reference< chart2::data::XRangeHighlighter > ChartModelHelper::createRangeH uno::Reference< chart2::data::XDataProvider > ChartModelHelper::createInternalDataProvider( const uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDoc, bool bConnectToModel ) { - return new InternalDataProvider( xChartDoc, bConnectToModel ); + bool bDefaultDataInColumns(true); + + // #i120559# Try to access the current state of "DataRowSource" for the + // chart data and use it as default for creating a new InternalDataProvider + if(xChartDoc.is()) + { + ::com::sun::star::uno::Reference< ::com::sun::star::chart::XChartDocument > xDoc(xChartDoc, uno::UNO_QUERY); + + if(xDoc.is()) + { + ::com::sun::star::uno::Reference< ::com::sun::star::chart::XDiagram > aDiagram = xDoc->getDiagram(); + + if(aDiagram.is()) + { + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xProp(aDiagram, uno::UNO_QUERY); + + if(xProp.is()) + { + ::com::sun::star::chart::ChartDataRowSource aDataRowSource(::com::sun::star::chart::ChartDataRowSource_COLUMNS); + + xProp->getPropertyValue( ::rtl::OUString::createFromAscii("DataRowSource")) >>= aDataRowSource; + + bDefaultDataInColumns = (::com::sun::star::chart::ChartDataRowSource_COLUMNS == aDataRowSource); + } + } + } + } + + return new InternalDataProvider( xChartDoc, bConnectToModel, bDefaultDataInColumns ); } uno::Reference< XDiagram > ChartModelHelper::findDiagram( const uno::Reference< frame::XModel >& xModel ) diff --git a/chart2/source/tools/InternalDataProvider.cxx b/chart2/source/tools/InternalDataProvider.cxx index 147afc8a2935..2def119a8956 100644 --- a/chart2/source/tools/InternalDataProvider.cxx +++ b/chart2/source/tools/InternalDataProvider.cxx @@ -315,8 +315,11 @@ InternalDataProvider::InternalDataProvider( const Reference< uno::XComponentCont : m_bDataInColumns( true ) {} -InternalDataProvider::InternalDataProvider( const Reference< chart2::XChartDocument > & xChartDoc, bool bConnectToModel ) - : m_bDataInColumns( true ) +InternalDataProvider::InternalDataProvider( + const Reference< chart2::XChartDocument > & xChartDoc, + bool bConnectToModel, + bool bDefaultDataInColumns) +: m_bDataInColumns( bDefaultDataInColumns ) { try { @@ -331,7 +334,15 @@ InternalDataProvider::InternalDataProvider( const Reference< chart2::XChartDocum bool bFirstCellAsLabel = true; bool bHasCategories = true; uno::Sequence< sal_Int32 > aSequenceMapping; - DataSourceHelper::detectRangeSegmentation( xChartModel, aRangeString, aSequenceMapping, m_bDataInColumns, bFirstCellAsLabel, bHasCategories ); + const bool bSomethingDetected( + DataSourceHelper::detectRangeSegmentation( + xChartModel, aRangeString, aSequenceMapping, m_bDataInColumns, bFirstCellAsLabel, bHasCategories )); + + // #i120559# if no data was available, restore default + if(!bSomethingDetected && m_bDataInColumns != bDefaultDataInColumns) + { + m_bDataInColumns = bDefaultDataInColumns; + } } // categories -- cgit