diff options
Diffstat (limited to 'chart2/source/model/main/BaseCoordinateSystem.cxx')
-rw-r--r-- | chart2/source/model/main/BaseCoordinateSystem.cxx | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/chart2/source/model/main/BaseCoordinateSystem.cxx b/chart2/source/model/main/BaseCoordinateSystem.cxx index 3729c32bd281..6717c3005047 100644 --- a/chart2/source/model/main/BaseCoordinateSystem.cxx +++ b/chart2/source/model/main/BaseCoordinateSystem.cxx @@ -23,6 +23,7 @@ #include <CloneHelper.hxx> #include <ModifyListenerHelper.hxx> #include "Axis.hxx" +#include <ChartType.hxx> #include <com/sun/star/chart2/AxisType.hpp> #include <com/sun/star/container/NoSuchElementException.hpp> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> @@ -159,11 +160,13 @@ BaseCoordinateSystem::BaseCoordinateSystem( tAxisVecVecType::size_type nN=0; for( nN=0; nN<m_aAllAxis.size(); nN++ ) CloneHelper::CloneRefVector<chart2::XAxis>( rSource.m_aAllAxis[nN], m_aAllAxis[nN] ); - CloneHelper::CloneRefVector<chart2::XChartType>( rSource.m_aChartTypes, m_aChartTypes ); + for (const auto & rxChartType : rSource.m_aChartTypes) + m_aChartTypes.push_back(rxChartType->cloneChartType()); for( nN=0; nN<m_aAllAxis.size(); nN++ ) ModifyListenerHelper::addListenerToAllElements( m_aAllAxis[nN], m_xModifyEventForwarder ); - ModifyListenerHelper::addListenerToAllElements( m_aChartTypes, m_xModifyEventForwarder ); + for (const auto & rxChartType : m_aChartTypes) + rxChartType->addModifyListener( m_xModifyEventForwarder ); } BaseCoordinateSystem::~BaseCoordinateSystem() @@ -172,7 +175,8 @@ BaseCoordinateSystem::~BaseCoordinateSystem() { for(const tAxisVecVecType::value_type & i : m_aAllAxis) ModifyListenerHelper::removeListenerFromAllElements( i, m_xModifyEventForwarder ); - ModifyListenerHelper::removeListenerFromAllElements( m_aChartTypes, m_xModifyEventForwarder ); + for (const auto & rxChartType : m_aChartTypes) + rxChartType->removeModifyListener( m_xModifyEventForwarder ); } catch( const uno::Exception & ) { @@ -243,19 +247,23 @@ sal_Int32 SAL_CALL BaseCoordinateSystem::getMaximumAxisIndexByDimension( sal_Int // ____ XChartTypeContainer ____ void SAL_CALL BaseCoordinateSystem::addChartType( const Reference< chart2::XChartType >& aChartType ) { - if( std::find( m_aChartTypes.begin(), m_aChartTypes.end(), aChartType ) + auto pChartType = dynamic_cast<ChartType*>(aChartType.get()); + assert(pChartType); + + if( std::find( m_aChartTypes.begin(), m_aChartTypes.end(), pChartType ) != m_aChartTypes.end()) throw lang::IllegalArgumentException("type not found", static_cast<cppu::OWeakObject*>(this), 1); - m_aChartTypes.push_back( aChartType ); + m_aChartTypes.push_back( pChartType ); ModifyListenerHelper::addListener( aChartType, m_xModifyEventForwarder ); fireModifyEvent(); } void SAL_CALL BaseCoordinateSystem::removeChartType( const Reference< chart2::XChartType >& aChartType ) { - std::vector< uno::Reference< chart2::XChartType > >::iterator - aIt( std::find( m_aChartTypes.begin(), m_aChartTypes.end(), aChartType )); + auto pChartType = dynamic_cast<ChartType*>(aChartType.get()); + assert(pChartType); + auto aIt( std::find( m_aChartTypes.begin(), m_aChartTypes.end(), pChartType )); if( aIt == m_aChartTypes.end()) throw container::NoSuchElementException( "The given chart type is no element of the container", @@ -268,14 +276,21 @@ void SAL_CALL BaseCoordinateSystem::removeChartType( const Reference< chart2::XC Sequence< Reference< chart2::XChartType > > SAL_CALL BaseCoordinateSystem::getChartTypes() { - return comphelper::containerToSequence( m_aChartTypes ); + return comphelper::containerToSequence< Reference< chart2::XChartType > >( m_aChartTypes ); } void SAL_CALL BaseCoordinateSystem::setChartTypes( const Sequence< Reference< chart2::XChartType > >& aChartTypes ) { - ModifyListenerHelper::removeListenerFromAllElements( m_aChartTypes, m_xModifyEventForwarder ); - m_aChartTypes = comphelper::sequenceToContainer<std::vector< css::uno::Reference< css::chart2::XChartType > >>( aChartTypes ); - ModifyListenerHelper::addListenerToAllElements( m_aChartTypes, m_xModifyEventForwarder ); + for (auto const & aChartType : m_aChartTypes) + aChartType->removeModifyListener( m_xModifyEventForwarder ); + m_aChartTypes.clear(); + for (auto const & aChartType : aChartTypes) + { + auto pChartType = dynamic_cast<ChartType*>(aChartType.get()); + assert(pChartType); + m_aChartTypes.push_back(pChartType); + pChartType->addModifyListener( m_xModifyEventForwarder ); + } fireModifyEvent(); } |