diff options
Diffstat (limited to 'chart2/source/controller/dialogs/DataBrowserModel.cxx')
-rw-r--r-- | chart2/source/controller/dialogs/DataBrowserModel.cxx | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/chart2/source/controller/dialogs/DataBrowserModel.cxx b/chart2/source/controller/dialogs/DataBrowserModel.cxx index 6b6d682186c5..f89171d4d55e 100644 --- a/chart2/source/controller/dialogs/DataBrowserModel.cxx +++ b/chart2/source/controller/dialogs/DataBrowserModel.cxx @@ -40,6 +40,7 @@ #include "ControllerLockGuard.hxx" #include "macros.hxx" #include "StatisticsHelper.hxx" +#include "ContainerHelper.hxx" #include <com/sun/star/container/XIndexReplace.hpp> #include <com/sun/star/chart2/XDataSeriesContainer.hpp> @@ -420,28 +421,30 @@ void DataBrowserModel::removeDataSeries( sal_Int32 nAtColumnIndex ) m_apDialogModel->deleteSeries( xSeries, getHeaderForSeries( xSeries ).m_xChartType ); - Reference< chart2::XInternalDataProvider > xDataProvider( - m_apDialogModel->getDataProvider(), uno::UNO_QUERY ); - Reference< chart2::data::XDataSource > xSource( xSeries,uno::UNO_QUERY ); - if( xDataProvider.is() && xSource.is()) + //delete sequences from internal data provider that are not used anymore + //but do not delete sequences that are still in use by the remaining series + Reference< chart2::XInternalDataProvider > xDataProvider( m_apDialogModel->getDataProvider(), uno::UNO_QUERY ); + Reference< chart2::data::XDataSource > xSourceOfDeletedSeries( xSeries, uno::UNO_QUERY ); + if( xDataProvider.is() && xSourceOfDeletedSeries.is()) { ::std::vector< sal_Int32 > aSequenceIndexesToDelete; - Sequence< Reference< chart2::data::XLabeledDataSequence > > aUsedSequences( xSource->getDataSequences()); - Reference< chart2::XDataSeriesContainer > xSeriesCnt( - getHeaderForSeries( xSeries ).m_xChartType, uno::UNO_QUERY ); + Sequence< Reference< chart2::data::XLabeledDataSequence > > aSequencesOfDeletedSeries( xSourceOfDeletedSeries->getDataSequences() ); + Reference< chart2::XDataSeriesContainer > xSeriesCnt( getHeaderForSeries( xSeries ).m_xChartType, uno::UNO_QUERY ); if( xSeriesCnt.is()) { - lcl_tSharedSeqVec aSharedSequences = lcl_getSharedSequences( xSeriesCnt->getDataSeries()); - for( sal_Int32 i=0; i<aUsedSequences.getLength(); ++i ) + Reference< chart2::data::XDataSource > xRemainingDataSource( DataSeriesHelper::getDataSource( xSeriesCnt->getDataSeries() ) ); + if( xRemainingDataSource.is() ) { - lcl_tSharedSeqVec::const_iterator aHitIt( - ::std::find_if( - aSharedSequences.begin(), aSharedSequences.end(), - lcl_RepresentationsOfLSeqMatch( aUsedSequences[i] ))); - // if not shared -> delete - if( aHitIt == aSharedSequences.end()) - aSequenceIndexesToDelete.push_back( - lcl_getValuesRepresentationIndex( aUsedSequences[i] )); + ::std::vector< Reference< chart2::data::XLabeledDataSequence > > aRemainingSeq( ContainerHelper::SequenceToVector( xRemainingDataSource->getDataSequences() ) ); + for( sal_Int32 i=0; i<aSequencesOfDeletedSeries.getLength(); ++i ) + { + ::std::vector< Reference< chart2::data::XLabeledDataSequence > >::const_iterator aHitIt( + ::std::find_if( aRemainingSeq.begin(), aRemainingSeq.end(), + lcl_RepresentationsOfLSeqMatch( aSequencesOfDeletedSeries[i] ))); + // if not used by the remaining series this sequence can be deleted + if( aHitIt == aRemainingSeq.end() ) + aSequenceIndexesToDelete.push_back( lcl_getValuesRepresentationIndex( aSequencesOfDeletedSeries[i] ) ); + } } } |