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 :

Reply via email to