diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2022-01-30 08:34:22 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-01-30 16:02:18 +0100 |
commit | 026e2f437e969d75209ed05211e7f02349035b98 (patch) | |
tree | 3a567141feaf520acca03b473e571e6502dd3fa1 | |
parent | 85cc59ba11f9334e0ed5f277607f5d9d63302856 (diff) |
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.grandin@collabora.co.uk>
-rw-r--r-- | chart2/source/inc/CloneHelper.hxx | 11 | ||||
-rw-r--r-- | chart2/source/inc/ModifyListenerHelper.hxx | 22 | ||||
-rw-r--r-- | chart2/source/inc/RegressionCurveModel.hxx (renamed from chart2/source/tools/RegressionCurveModel.hxx) | 6 | ||||
-rw-r--r-- | chart2/source/model/inc/DataSeries.hxx | 3 | ||||
-rw-r--r-- | chart2/source/model/main/DataSeries.cxx | 27 | ||||
-rw-r--r-- | chart2/source/tools/RegressionCurveHelper.cxx | 2 | ||||
-rw-r--r-- | chart2/source/tools/RegressionCurveModel.cxx | 2 | ||||
-rw-r--r-- | solenv/clang-format/excludelist | 2 |
8 files changed, 60 insertions, 15 deletions
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 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 |