chart2/source/inc/CloneHelper.hxx             |   11 +++++++++-
 chart2/source/inc/ModifyListenerHelper.hxx    |   22 +++++++++++++++++++++
 chart2/source/inc/RegressionCurveModel.hxx    |    6 +++--
 chart2/source/model/inc/DataSeries.hxx        |    3 +-
 chart2/source/model/main/DataSeries.cxx       |   27 ++++++++++++++++++--------
 chart2/source/tools/RegressionCurveHelper.cxx |    2 -
 chart2/source/tools/RegressionCurveModel.cxx  |    2 -
 solenv/clang-format/excludelist               |    2 -
 8 files changed, 60 insertions(+), 15 deletions(-)

New commits:
commit 026e2f437e969d75209ed05211e7f02349035b98
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sun Jan 30 08:34:22 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sun Jan 30 16:02:18 2022 +0100

    use more concrete types in chart2, RegressionCurveModel
    
    Change-Id: Ib4a5198f425577307ba437c73c61408b88d83dc1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129160
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/inc/CloneHelper.hxx 
b/chart2/source/inc/CloneHelper.hxx
index d9771a2681f2..c0896efb5c7b 100644
--- a/chart2/source/inc/CloneHelper.hxx
+++ b/chart2/source/inc/CloneHelper.hxx
@@ -19,7 +19,7 @@
 #pragma once
 
 #include <com/sun/star/util/XCloneable.hpp>
-
+#include <rtl/ref.hxx>
 #include <algorithm>
 #include <iterator>
 #include <vector>
@@ -54,6 +54,15 @@ template< class Interface >
                       CreateRefClone< Interface >());
 }
 
+template< class T >
+    void CloneRefVector(
+        const std::vector< rtl::Reference< T > > & rSource,
+        std::vector< rtl::Reference< T > > & rDestination )
+{
+    for (const auto & rSourceItem : rSource)
+        
rDestination.push_back(static_cast<T*>(rSourceItem->createClone().get()));
+}
+
 /// clones a UNO-sequence of UNO-References
 template< class Interface >
     void CloneRefSequence(
diff --git a/chart2/source/inc/ModifyListenerHelper.hxx 
b/chart2/source/inc/ModifyListenerHelper.hxx
index abee24032bae..de407f2ba137 100644
--- a/chart2/source/inc/ModifyListenerHelper.hxx
+++ b/chart2/source/inc/ModifyListenerHelper.hxx
@@ -176,6 +176,17 @@ void addListenerToAllElements(
                          impl::addListenerFunctor< typename 
Container::value_type >( xListener ));
 }
 
+template< class T >
+void addListenerToAllElements(
+    const std::vector<rtl::Reference<T>> & rContainer,
+    const css::uno::Reference< css::util::XModifyListener > & xListener )
+{
+    if( !xListener )
+        return;
+    for (auto const & i : rContainer)
+        i->addModifyListener(xListener);
+}
+
 template< class Container >
 void addListenerToAllMapElements(
     const Container & rContainer,
@@ -227,6 +238,17 @@ void removeListenerFromAllElements(
                          impl::removeListenerFunctor< typename 
Container::value_type >( xListener ));
 }
 
+template< class T >
+void removeListenerFromAllElements(
+    const std::vector<rtl::Reference<T>> & rContainer,
+    const css::uno::Reference< css::util::XModifyListener > & xListener )
+{
+    if( !xListener )
+        return;
+    for (auto const & i : rContainer)
+        i->removeModifyListener(xListener);
+}
+
 template< class Container >
 void removeListenerFromAllMapElements(
     const Container & rContainer,
diff --git a/chart2/source/tools/RegressionCurveModel.hxx 
b/chart2/source/inc/RegressionCurveModel.hxx
similarity index 99%
rename from chart2/source/tools/RegressionCurveModel.hxx
rename to chart2/source/inc/RegressionCurveModel.hxx
index 73c2439f01e7..5c32ae5e6215 100644
--- a/chart2/source/tools/RegressionCurveModel.hxx
+++ b/chart2/source/inc/RegressionCurveModel.hxx
@@ -18,7 +18,7 @@
  */
 #pragma once
 
-#include <OPropertySet.hxx>
+#include "OPropertySet.hxx"
 
 #include <cppuhelper/basemutex.hxx>
 #include <cppuhelper/implbase.hxx>
@@ -29,7 +29,7 @@
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/lang/XServiceName.hpp>
 #include <com/sun/star/util/XCloneable.hpp>
-#include <ModifyListenerHelper.hxx>
+#include "ModifyListenerHelper.hxx"
 
 namespace chart
 {
@@ -83,6 +83,7 @@ protected:
     virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
         getPropertySetInfo() override;
 
+public:
     // ____ XRegressionCurve ____
     virtual css::uno::Reference< css::chart2::XRegressionCurveCalculator > 
SAL_CALL getCalculator() override;
     virtual css::uno::Reference< css::beans::XPropertySet > SAL_CALL 
getEquationProperties() override;
@@ -98,6 +99,7 @@ protected:
     virtual void SAL_CALL removeModifyListener(
         const css::uno::Reference< css::util::XModifyListener >& aListener ) 
override;
 
+protected:
     // ____ XModifyListener ____
     virtual void SAL_CALL modified(
         const css::lang::EventObject& aEvent ) override;
diff --git a/chart2/source/model/inc/DataSeries.hxx 
b/chart2/source/model/inc/DataSeries.hxx
index eae00d7da153..a7a91325a605 100644
--- a/chart2/source/model/inc/DataSeries.hxx
+++ b/chart2/source/model/inc/DataSeries.hxx
@@ -42,6 +42,7 @@ namespace com::sun::star::beans { class XPropertySet; }
 
 namespace chart
 {
+class RegressionCurveModel;
 
 namespace impl
 {
@@ -155,7 +156,7 @@ private:
     tDataPointAttributeContainer  m_aAttributedDataPoints;
 
     typedef
-        std::vector< css::uno::Reference< css::chart2::XRegressionCurve > >
+        std::vector< rtl::Reference< ::chart::RegressionCurveModel > >
         tRegressionCurveContainerType;
     tRegressionCurveContainerType m_aRegressionCurves;
 
diff --git a/chart2/source/model/main/DataSeries.cxx 
b/chart2/source/model/main/DataSeries.cxx
index d6aa5eebe3e9..509fa3423f71 100644
--- a/chart2/source/model/main/DataSeries.cxx
+++ b/chart2/source/model/main/DataSeries.cxx
@@ -25,6 +25,7 @@
 #include "DataPoint.hxx"
 #include <DataSeriesHelper.hxx>
 #include <CloneHelper.hxx>
+#include <RegressionCurveModel.hxx>
 #include <ModifyListenerHelper.hxx>
 #include <EventListenerHelper.hxx>
 #include <com/sun/star/container/NoSuchElementException.hpp>
@@ -144,7 +145,7 @@ DataSeries::DataSeries( const DataSeries & rOther ) :
         ModifyListenerHelper::addListenerToAllElements( m_aDataSequences, 
m_xModifyEventForwarder );
     }
 
-    CloneHelper::CloneRefVector< chart2::XRegressionCurve >( 
rOther.m_aRegressionCurves, m_aRegressionCurves );
+    CloneHelper::CloneRefVector( rOther.m_aRegressionCurves, 
m_aRegressionCurves );
     ModifyListenerHelper::addListenerToAllElements( m_aRegressionCurves, 
m_xModifyEventForwarder );
 
     // add as listener to XPropertySet properties
@@ -415,16 +416,18 @@ Sequence< Reference< chart2::data::XLabeledDataSequence > 
> SAL_CALL DataSeries:
 void SAL_CALL DataSeries::addRegressionCurve(
     const uno::Reference< chart2::XRegressionCurve >& xRegressionCurve )
 {
+    auto pRegressionCurve = 
dynamic_cast<RegressionCurveModel*>(xRegressionCurve.get());
+    assert(pRegressionCurve);
     Reference< util::XModifyListener > xModifyEventForwarder;
     {
         MutexGuard aGuard( m_aMutex );
         xModifyEventForwarder = m_xModifyEventForwarder;
-        if( std::find( m_aRegressionCurves.begin(), m_aRegressionCurves.end(), 
xRegressionCurve )
+        if( std::find( m_aRegressionCurves.begin(), m_aRegressionCurves.end(), 
pRegressionCurve )
             != m_aRegressionCurves.end())
             throw lang::IllegalArgumentException("curve not found", 
static_cast<cppu::OWeakObject*>(this), 1);
-        m_aRegressionCurves.push_back( xRegressionCurve );
+        m_aRegressionCurves.push_back( pRegressionCurve );
     }
-    ModifyListenerHelper::addListener( xRegressionCurve, xModifyEventForwarder 
);
+    ModifyListenerHelper::addListener( 
rtl::Reference<RegressionCurveModel>(pRegressionCurve), xModifyEventForwarder );
     fireModifyEvent();
 }
 
@@ -433,13 +436,15 @@ void SAL_CALL DataSeries::removeRegressionCurve(
 {
     if( !xRegressionCurve.is() )
         throw container::NoSuchElementException();
+    auto pRegressionCurve = 
dynamic_cast<RegressionCurveModel*>(xRegressionCurve.get());
+    assert(pRegressionCurve);
 
     Reference< util::XModifyListener > xModifyEventForwarder;
     {
         MutexGuard aGuard( m_aMutex );
         xModifyEventForwarder = m_xModifyEventForwarder;
         tRegressionCurveContainerType::iterator aIt(
-            std::find( m_aRegressionCurves.begin(), m_aRegressionCurves.end(), 
xRegressionCurve ) );
+            std::find( m_aRegressionCurves.begin(), m_aRegressionCurves.end(), 
pRegressionCurve ) );
         if( aIt == m_aRegressionCurves.end())
             throw container::NoSuchElementException(
                 "The given regression curve is no element of this series",
@@ -447,21 +452,27 @@ void SAL_CALL DataSeries::removeRegressionCurve(
         m_aRegressionCurves.erase( aIt );
     }
 
-    ModifyListenerHelper::removeListener( xRegressionCurve, 
xModifyEventForwarder );
+    ModifyListenerHelper::removeListener( 
rtl::Reference<RegressionCurveModel>(pRegressionCurve), xModifyEventForwarder );
     fireModifyEvent();
 }
 
 uno::Sequence< uno::Reference< chart2::XRegressionCurve > > SAL_CALL 
DataSeries::getRegressionCurves()
 {
     MutexGuard aGuard( m_aMutex );
-    return comphelper::containerToSequence( m_aRegressionCurves );
+    return comphelper::containerToSequence<uno::Reference< 
chart2::XRegressionCurve >>( m_aRegressionCurves );
 }
 
 void SAL_CALL DataSeries::setRegressionCurves(
     const Sequence< Reference< chart2::XRegressionCurve > >& aRegressionCurves 
)
 {
     tRegressionCurveContainerType aOldCurves;
-    auto aNewCurves( 
comphelper::sequenceToContainer<tRegressionCurveContainerType>( 
aRegressionCurves ) );
+    tRegressionCurveContainerType aNewCurves;
+    for (const auto & i : aRegressionCurves)
+    {
+        auto pRegressionCurve = dynamic_cast<RegressionCurveModel*>(i.get());
+        assert(pRegressionCurve);
+        aNewCurves.push_back(pRegressionCurve);
+    }
     Reference< util::XModifyListener > xModifyEventForwarder;
     {
         MutexGuard aGuard( m_aMutex );
diff --git a/chart2/source/tools/RegressionCurveHelper.cxx 
b/chart2/source/tools/RegressionCurveHelper.cxx
index 00e846105c7f..77ffcf2391a5 100644
--- a/chart2/source/tools/RegressionCurveHelper.cxx
+++ b/chart2/source/tools/RegressionCurveHelper.cxx
@@ -26,7 +26,7 @@
 #include <ExponentialRegressionCurveCalculator.hxx>
 #include <PotentialRegressionCurveCalculator.hxx>
 #include <CommonConverters.hxx>
-#include "RegressionCurveModel.hxx"
+#include <RegressionCurveModel.hxx>
 #include <ChartTypeHelper.hxx>
 #include <ChartType.hxx>
 #include <ChartModel.hxx>
diff --git a/chart2/source/tools/RegressionCurveModel.cxx 
b/chart2/source/tools/RegressionCurveModel.cxx
index d6cef7c2c8d8..8ea03805865c 100644
--- a/chart2/source/tools/RegressionCurveModel.cxx
+++ b/chart2/source/tools/RegressionCurveModel.cxx
@@ -17,7 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include "RegressionCurveModel.hxx"
+#include <RegressionCurveModel.hxx>
 #include <LinePropertiesHelper.hxx>
 #include <RegressionCurveHelper.hxx>
 #include "RegressionEquation.hxx"
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 1d2c635eed62..670cd0542dab 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -1058,6 +1058,7 @@ chart2/source/inc/ReferenceSizeProvider.hxx
 chart2/source/inc/RegressionCalculationHelper.hxx
 chart2/source/inc/RegressionCurveCalculator.hxx
 chart2/source/inc/RegressionCurveHelper.hxx
+chart2/source/inc/RegressionCurveModel.hxx
 chart2/source/inc/RelativePositionHelper.hxx
 chart2/source/inc/RelativeSizeHelper.hxx
 chart2/source/inc/Scaling.hxx
@@ -1203,7 +1204,6 @@ chart2/source/tools/ReferenceSizeProvider.cxx
 chart2/source/tools/RegressionCurveCalculator.cxx
 chart2/source/tools/RegressionCurveHelper.cxx
 chart2/source/tools/RegressionCurveModel.cxx
-chart2/source/tools/RegressionCurveModel.hxx
 chart2/source/tools/RegressionEquation.cxx
 chart2/source/tools/RegressionEquation.hxx
 chart2/source/tools/RelativePositionHelper.cxx

Reply via email to