chart2/source/controller/dialogs/DialogModel.cxx | 113 ++++++--------------- chart2/source/controller/dialogs/DialogModel.hxx | 11 +- chart2/source/controller/dialogs/tp_DataSource.cxx | 11 +- chart2/source/controller/dialogs/tp_DataSource.hxx | 4 4 files changed, 47 insertions(+), 92 deletions(-)
New commits: commit 1376b1c01f678311934afc5bafc0e4d72a09b9c6 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Mon Jan 24 20:45:47 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Tue Jan 25 16:25:59 2022 +0100 use more concrete types in chart2, ChartType Change-Id: I68c04c7e3ffb21a52ad054adac7e9ed0c554e583 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128883 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/chart2/source/controller/dialogs/DialogModel.cxx b/chart2/source/controller/dialogs/DialogModel.cxx index fabb4235d796..431bc452e71e 100644 --- a/chart2/source/controller/dialogs/DialogModel.cxx +++ b/chart2/source/controller/dialogs/DialogModel.cxx @@ -61,14 +61,6 @@ namespace { constexpr OUStringLiteral lcl_aLabelRole( u"label" ); -struct lcl_ChartTypeToSeriesCnt -{ - Reference< XDataSeriesContainer > operator() ( - const Reference< XChartType > & xChartType ) - { - return Reference< XDataSeriesContainer >::query( xChartType ); - } -}; OUString lcl_ConvertRole( const OUString & rRoleString ) { @@ -130,53 +122,6 @@ lcl_tRoleIndexMap lcl_createRoleIndexMap() return aMap; } -struct lcl_DataSeriesContainerAppend -{ - typedef Reference< XDataSeriesContainer > value_type; - typedef std::vector< ::chart::DialogModel::tSeriesWithChartTypeByName > tContainerType; - - explicit lcl_DataSeriesContainerAppend( tContainerType * rCnt ) - : m_rDestCnt( rCnt ) - {} - - lcl_DataSeriesContainerAppend & operator= ( const value_type & xVal ) - { - try - { - if( xVal.is()) - { - const Sequence< Reference< XDataSeries > > aSeq( xVal->getDataSeries()); - OUString aRole( "values-y" ); - Reference< XChartType > xCT( xVal, uno::UNO_QUERY ); - if( xCT.is()) - aRole = xCT->getRoleOfSequenceForSeriesLabel(); - for( Reference< XDataSeries > const & dataSeries : aSeq ) - { - m_rDestCnt->push_back( - ::chart::DialogModel::tSeriesWithChartTypeByName( - ::chart::DataSeriesHelper::getDataSeriesLabel( dataSeries, aRole ), - std::make_pair( dataSeries, xCT ))); - } - } - } - catch( const uno::Exception & ) - { - DBG_UNHANDLED_EXCEPTION("chart2"); - } - return *this; - } - - // Implement output operator requirements as required by std::copy (and - // implement prefix increment in terms of postfix increment to avoid unused - // member function warnings for the latter in the common case where - // std::copy would not actually need it): - lcl_DataSeriesContainerAppend & operator* () { return *this; } - lcl_DataSeriesContainerAppend & operator++ () { return operator++(0); } - lcl_DataSeriesContainerAppend & operator++ (int) { return *this; } - -private: - tContainerType * m_rDestCnt; -}; struct lcl_RolesWithRangeAppend { @@ -242,13 +187,6 @@ private: namespace std { - template<> struct iterator_traits<lcl_DataSeriesContainerAppend> - { - typedef std::output_iterator_tag iterator_category; - typedef Reference< XDataSeriesContainer > value_type; - typedef value_type& reference; - }; - template<> struct iterator_traits<lcl_RolesWithRangeAppend> { typedef std::output_iterator_tag iterator_category; @@ -465,10 +403,10 @@ Reference< data::XDataProvider > DialogModel::getDataProvider() const return xResult; } -std::vector< Reference< XDataSeriesContainer > > +std::vector< rtl::Reference< ChartType > > DialogModel::getAllDataSeriesContainers() const { - std::vector< Reference< XDataSeriesContainer > > aResult; + std::vector< rtl::Reference< ChartType > > aResult; try { @@ -481,11 +419,9 @@ std::vector< Reference< XDataSeriesContainer > > xDiagram->getBaseCoordinateSystems()); for( rtl::Reference< BaseCoordinateSystem > const & coords : aCooSysSeq ) { - const Sequence< Reference< XChartType > > aChartTypeSeq( coords->getChartTypes()); - std::transform( - aChartTypeSeq.begin(), aChartTypeSeq.end(), - std::back_inserter( aResult ), - lcl_ChartTypeToSeriesCnt() ); + + for (const auto & rxChartType : coords->getChartTypes2()) + aResult.push_back(rxChartType); } } } @@ -501,11 +437,29 @@ std::vector< DialogModel::tSeriesWithChartTypeByName > DialogModel::getAllDataSeriesWithLabel() const { std::vector< tSeriesWithChartTypeByName > aResult; - std::vector< Reference< XDataSeriesContainer > > aContainers( + std::vector< rtl::Reference< ChartType > > aContainers( getAllDataSeriesContainers()); - std::copy( aContainers.begin(), aContainers.end(), - lcl_DataSeriesContainerAppend( &aResult )); + for (const auto & rxChartType : aContainers ) + { + try + { + const Sequence< Reference< XDataSeries > > aSeq( rxChartType->getDataSeries()); + OUString aRole = rxChartType->getRoleOfSequenceForSeriesLabel(); + for( Reference< XDataSeries > const & dataSeries : aSeq ) + { + aResult.push_back( + ::chart::DialogModel::tSeriesWithChartTypeByName( + ::chart::DataSeriesHelper::getDataSeriesLabel( dataSeries, aRole ), + std::make_pair( dataSeries, rxChartType ))); + } + } + catch( const uno::Exception & ) + { + DBG_UNHANDLED_EXCEPTION("chart2"); + } + } + return aResult; } @@ -556,7 +510,7 @@ void addNewSeriesToContainer( DialogModel::tRolesWithRanges DialogModel::getRolesWithRanges( const Reference< XDataSeries > & xSeries, const OUString & aRoleOfSequenceForLabel, - const Reference< chart2::XChartType > & xChartType ) + const rtl::Reference< ::chart::ChartType > & xChartType ) { DialogModel::tRolesWithRanges aResult; try @@ -600,7 +554,7 @@ void DialogModel::moveSeries( Reference< chart2::XDataSeries > DialogModel::insertSeriesAfter( const Reference< XDataSeries > & xSeries, - const Reference< XChartType > & xChartType, + const rtl::Reference< ::chart::ChartType > & xChartType, bool bCreateDataCachedSequences /* = false */ ) { m_aTimerTriggeredControllerLock.startTimer(); @@ -616,8 +570,7 @@ Reference< chart2::XDataSeries > DialogModel::insertSeriesAfter( const sal_Int32 nTotalSeries = countSeries(); if( xChartType.is()) { - Reference< XDataSeriesContainer > xCnt( xChartType, uno::UNO_QUERY_THROW ); - nSeriesInChartType = xCnt->getDataSeries().getLength(); + nSeriesInChartType = xChartType->getDataSeries().getLength(); } // create new series @@ -646,7 +599,7 @@ Reference< chart2::XDataSeries > DialogModel::insertSeriesAfter( void DialogModel::deleteSeries( const Reference< XDataSeries > & xSeries, - const Reference< XChartType > & xChartType ) + const rtl::Reference< ChartType > & xChartType ) { m_aTimerTriggeredControllerLock.startTimer(); ControllerLockGuardUNO aLockedControllers( m_xChartDocument ); @@ -867,14 +820,14 @@ void DialogModel::applyInterpretedData( } // data series - std::vector< Reference< XDataSeriesContainer > > aSeriesCnt( getAllDataSeriesContainers()); + std::vector< rtl::Reference< ChartType > > aSeriesCnt( getAllDataSeriesContainers()); auto aNewSeries( comphelper::sequenceToContainer<std::vector< Sequence< Reference< XDataSeries > > >>( rNewData.Series )); OSL_ASSERT( aSeriesCnt.size() == aNewSeries.size()); std::vector< Sequence< Reference< XDataSeries > > >::const_iterator aSrcIt( aNewSeries.begin()); - std::vector< Reference< XDataSeriesContainer > >::iterator aDestIt( aSeriesCnt.begin()); + std::vector< rtl::Reference< ChartType > >::iterator aDestIt( aSeriesCnt.begin()); for(; aSrcIt != aNewSeries.end() && aDestIt != aSeriesCnt.end(); ++aSrcIt, ++aDestIt ) { @@ -894,7 +847,7 @@ void DialogModel::applyInterpretedData( sal_Int32 DialogModel::countSeries() const { - std::vector< Reference< XDataSeriesContainer > > aCnt( getAllDataSeriesContainers()); + std::vector< rtl::Reference< ChartType > > aCnt( getAllDataSeriesContainers()); return std::accumulate( aCnt.begin(), aCnt.end(), 0, lcl_addSeriesNumber()); } diff --git a/chart2/source/controller/dialogs/DialogModel.hxx b/chart2/source/controller/dialogs/DialogModel.hxx index 01156ac64605..3266a5553e25 100644 --- a/chart2/source/controller/dialogs/DialogModel.hxx +++ b/chart2/source/controller/dialogs/DialogModel.hxx @@ -48,6 +48,7 @@ namespace chart { class RangeSelectionHelper; +class ChartType; class ChartTypeTemplate; struct DialogModelTimeBasedInfo @@ -70,7 +71,7 @@ public: typedef std::pair< OUString, std::pair< css::uno::Reference< css::chart2::XDataSeries >, - css::uno::Reference< css::chart2::XChartType > > > + rtl::Reference< ::chart::ChartType > > > tSeriesWithChartTypeByName; typedef std::map< OUString, OUString > @@ -88,7 +89,7 @@ public: css::uno::Reference< css::chart2::data::XDataProvider > getDataProvider() const; - std::vector< css::uno::Reference< css::chart2::XDataSeriesContainer > > + std::vector< rtl::Reference< ::chart::ChartType > > getAllDataSeriesContainers() const; std::vector< tSeriesWithChartTypeByName > @@ -97,7 +98,7 @@ public: static tRolesWithRanges getRolesWithRanges( const css::uno::Reference< css::chart2::XDataSeries > & xSeries, const OUString & aRoleOfSequenceForLabel, - const css::uno::Reference< css::chart2::XChartType > & xChartType ); + const rtl::Reference< ::chart::ChartType > & xChartType ); enum class MoveDirection { @@ -111,12 +112,12 @@ public: css::uno::Reference< css::chart2::XDataSeries > insertSeriesAfter( const css::uno::Reference< css::chart2::XDataSeries > & xSeries, - const css::uno::Reference< css::chart2::XChartType > & xChartType, + const rtl::Reference< ::chart::ChartType > & xChartType, bool bCreateDataCachedSequences = false ); void deleteSeries( const css::uno::Reference< css::chart2::XDataSeries > & xSeries, - const css::uno::Reference< css::chart2::XChartType > & xChartType ); + const rtl::Reference< ::chart::ChartType > & xChartType ); css::uno::Reference< css::chart2::data::XLabeledDataSequence > getCategories() const; diff --git a/chart2/source/controller/dialogs/tp_DataSource.cxx b/chart2/source/controller/dialogs/tp_DataSource.cxx index 45c00bfefb4c..558994e03d4c 100644 --- a/chart2/source/controller/dialogs/tp_DataSource.cxx +++ b/chart2/source/controller/dialogs/tp_DataSource.cxx @@ -20,6 +20,7 @@ #include "tp_DataSource.hxx" #include <strings.hrc> #include <ResId.hxx> +#include <ChartType.hxx> #include <ChartTypeTemplateProvider.hxx> #include <ChartTypeTemplate.hxx> #include <ChartModel.hxx> @@ -373,7 +374,7 @@ void DataSourceTabPage::fillSeriesListBox() m_aEntries.emplace_back(new SeriesEntry); pEntry = m_aEntries.back().get(); pEntry->m_xDataSeries.set(series.second.first); - pEntry->m_xChartType.set(series.second.second); + pEntry->m_xChartType = series.second.second; m_xLB_SERIES->append(OUString::number(reinterpret_cast<sal_Int64>(pEntry)), aLabel); if (bHasSelectedEntry && series.second.first == xSelected) nSelectedEntry = nEntry; @@ -560,7 +561,7 @@ IMPL_LINK_NOARG(DataSourceTabPage, AddButtonClickedHdl, weld::Button&, void) m_rDialogModel.startControllerLockTimer(); int nEntry = m_xLB_SERIES->get_selected_index(); Reference< XDataSeries > xSeriesToInsertAfter; - Reference< XChartType > xChartTypeForNewSeries; + rtl::Reference< ChartType > xChartTypeForNewSeries; if( m_pTemplateProvider ) m_rDialogModel.setTemplate( m_pTemplateProvider->getCurrentTemplate()); @@ -568,14 +569,14 @@ IMPL_LINK_NOARG(DataSourceTabPage, AddButtonClickedHdl, weld::Button&, void) { ::chart::SeriesEntry* pEntry = reinterpret_cast<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry).toInt64()); xSeriesToInsertAfter.set(pEntry->m_xDataSeries); - xChartTypeForNewSeries.set(pEntry->m_xChartType); + xChartTypeForNewSeries = pEntry->m_xChartType; } else { - std::vector< Reference< XDataSeriesContainer > > aCntVec( + std::vector< rtl::Reference< ChartType > > aCntVec( m_rDialogModel.getAllDataSeriesContainers()); if( ! aCntVec.empty()) - xChartTypeForNewSeries.set( aCntVec.front(), uno::UNO_QUERY ); + xChartTypeForNewSeries = aCntVec.front(); } OSL_ENSURE( xChartTypeForNewSeries.is(), "Cannot insert new series" ); diff --git a/chart2/source/controller/dialogs/tp_DataSource.hxx b/chart2/source/controller/dialogs/tp_DataSource.hxx index 1b6ba9862168..dfd3f42728b4 100644 --- a/chart2/source/controller/dialogs/tp_DataSource.hxx +++ b/chart2/source/controller/dialogs/tp_DataSource.hxx @@ -29,7 +29,7 @@ namespace chart { class TabPageNotifiable; } namespace chart { - +class ChartType; class ChartTypeTemplateProvider; class DialogModel; @@ -42,7 +42,7 @@ public: css::uno::Reference< css::chart2::XDataSeries > m_xDataSeries; /// the chart type that contains the series (via XDataSeriesContainer) - css::uno::Reference< css::chart2::XChartType > m_xChartType; + rtl::Reference< ::chart::ChartType > m_xChartType; }; class DataSourceTabPage final :