/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_chart2.hxx" #include "ModifyListenerCallBack.hxx" #include "MutexContainer.hxx" #include using namespace ::com::sun::star; using ::com::sun::star::uno::Reference; namespace chart { typedef ::cppu::WeakComponentImplHelper1< ::com::sun::star::util::XModifyListener > ModifyListenerCallBack_Base; class ModifyListenerCallBack_impl : public ::chart::MutexContainer , public ModifyListenerCallBack_Base { public: explicit ModifyListenerCallBack_impl( const Link& rCallBack ); virtual ~ModifyListenerCallBack_impl(); void startListening( const Reference< util::XModifyBroadcaster >& xBroadcaster ); void stopListening(); //XModifyListener virtual void SAL_CALL modified( const lang::EventObject& aEvent ) throw (uno::RuntimeException); //XEventListener virtual void SAL_CALL disposing( const lang::EventObject& Source ) throw (uno::RuntimeException); using ::cppu::WeakComponentImplHelperBase::disposing; private: Link m_aLink;//will be callef on modify Reference< util::XModifyBroadcaster > m_xBroadcaster;//broadcaster to listen at }; ModifyListenerCallBack_impl::ModifyListenerCallBack_impl( const Link& rCallBack ) : ModifyListenerCallBack_Base( m_aMutex ) , m_aLink( rCallBack ) , m_xBroadcaster(0) { } ModifyListenerCallBack_impl::~ModifyListenerCallBack_impl() { } //XModifyListener void SAL_CALL ModifyListenerCallBack_impl::modified( const lang::EventObject& /*aEvent*/ ) throw (uno::RuntimeException) { m_aLink.Call(0); } //XEventListener void SAL_CALL ModifyListenerCallBack_impl::disposing( const lang::EventObject& /*Source*/ ) throw (uno::RuntimeException) { m_xBroadcaster.clear(); } void ModifyListenerCallBack_impl::startListening( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyBroadcaster >& xBroadcaster ) { if( m_xBroadcaster == xBroadcaster ) return; stopListening(); m_xBroadcaster = xBroadcaster; if( m_xBroadcaster.is() ) m_xBroadcaster->addModifyListener( this ); } void ModifyListenerCallBack_impl::stopListening() { if( m_xBroadcaster.is() ) { m_xBroadcaster->removeModifyListener( this ); m_xBroadcaster.clear(); } } //------------------------------------------- ModifyListenerCallBack::ModifyListenerCallBack( const Link& rCallBack ) : pModifyListener_impl( new ModifyListenerCallBack_impl(rCallBack) ) , m_xModifyListener( pModifyListener_impl ) { } ModifyListenerCallBack::~ModifyListenerCallBack() { stopListening(); } void ModifyListenerCallBack::startListening( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyBroadcaster >& xBroadcaster ) { pModifyListener_impl->startListening( xBroadcaster ); } void ModifyListenerCallBack::stopListening() { pModifyListener_impl->stopListening(); } } // namespace chart