diff options
Diffstat (limited to 'dbaccess/source/ui/inc/sbamultiplex.hxx')
-rw-r--r-- | dbaccess/source/ui/inc/sbamultiplex.hxx | 537 |
1 files changed, 224 insertions, 313 deletions
diff --git a/dbaccess/source/ui/inc/sbamultiplex.hxx b/dbaccess/source/ui/inc/sbamultiplex.hxx index a83d5543b61d..47fd753d4af6 100644 --- a/dbaccess/source/ui/inc/sbamultiplex.hxx +++ b/dbaccess/source/ui/inc/sbamultiplex.hxx @@ -31,9 +31,8 @@ #include <com/sun/star/sdbc/XRowSetListener.hpp> #include <com/sun/star/frame/XStatusListener.hpp> #include <comphelper/uno3.hxx> -#include <cppuhelper/interfacecontainer.hxx> -#include <comphelper/multiinterfacecontainer2.hxx> -#include <cppuhelper/queryinterface.hxx> +#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/multiinterfacecontainer3.hxx> #include <cppuhelper/weak.hxx> namespace dbaui @@ -51,342 +50,254 @@ namespace dbaui virtual void SAL_CALL release() noexcept override { m_rParent.release(); } }; - // declaration of a listener multiplexer class - #define BEGIN_DECLARE_LISTENER_MULTIPLEXER(classname, listenerclass) \ - class classname \ - :public OSbaWeakSubObject \ - ,public listenerclass \ - ,public ::comphelper::OInterfaceContainerHelper2 \ - { \ - public: \ - classname( ::cppu::OWeakObject& rSource, \ - ::osl::Mutex& rMutex); \ - DECLARE_UNO3_DEFAULTS(classname, OSbaWeakSubObject) \ - virtual css::uno::Any SAL_CALL queryInterface( \ - const css::uno::Type& _rType) override; \ - \ - /* css::lang::XEventListener */ \ - virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; \ - - #define DECLARE_MULTIPLEXER_VOID_METHOD(methodname, eventtype) \ - virtual void SAL_CALL methodname(const eventtype& e) override; \ - - #define DECLARE_MULTIPLEXER_BOOL_METHOD(methodname, eventtype) \ - virtual sal_Bool SAL_CALL methodname(const eventtype& e) override; \ - - #define END_DECLARE_LISTENER_MULTIPLEXER() \ - /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ \ - using OSbaWeakSubObject::operator new; \ - using OSbaWeakSubObject::operator delete; \ - }; \ - - // implementation of a listener multiplexer class - - #define IMPLEMENT_LISTENER_MULTIPLEXER_CORE(classname, listenerclass) \ - \ - classname::classname(::cppu::OWeakObject& rSource, ::osl::Mutex& _rMutex) \ - :OSbaWeakSubObject(rSource) \ - ,OInterfaceContainerHelper2(_rMutex) \ - { \ - } \ - \ - css::uno::Any SAL_CALL classname::queryInterface( \ - const css::uno::Type& _rType) \ - { \ - css::uno::Any aReturn = \ - OSbaWeakSubObject::queryInterface(_rType); \ - if (!aReturn.hasValue()) \ - aReturn = ::cppu::queryInterface(_rType, \ - static_cast< listenerclass* >(this), \ - static_cast< css::lang::XEventListener* >(static_cast< listenerclass* >(this)) \ - ); \ - \ - return aReturn; \ - } \ - void SAL_CALL classname::disposing(const css::lang::EventObject& )\ - { \ - } \ - - #define IMPLEMENT_LISTENER_MULTIPLEXER_VOID_METHOD(classname, listenerclass, methodname, eventtype) \ - void SAL_CALL classname::methodname(const eventtype& e) \ - { \ - eventtype aMulti(e); \ - aMulti.Source = &m_rParent; \ - ::comphelper::OInterfaceIteratorHelper2 aIt(*this); \ - while (aIt.hasMoreElements()) \ - static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \ - } \ - - #define IMPLEMENT_LISTENER_MULTIPLEXER_BOOL_METHOD(classname, listenerclass, methodname, eventtype) \ - sal_Bool SAL_CALL classname::methodname(const eventtype& e) \ - { \ - eventtype aMulti(e); \ - aMulti.Source = &m_rParent; \ - ::comphelper::OInterfaceIteratorHelper2 aIt(*this); \ - bool bResult = true; \ - while (bResult && aIt.hasMoreElements()) \ - bResult = static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \ - return bResult; \ - } \ - - // helper for classes which do event multiplexing - #define IMPLEMENT_LISTENER_ADMINISTRATION(classname, listenernamespace, listenerdesc, multiplexer, broadcasterclass, broadcaster) \ - void SAL_CALL classname::add##listenerdesc(const css::uno::Reference< css::listenernamespace::X##listenerdesc >& l)\ - { \ - multiplexer.addInterface(l); \ - if (multiplexer.getLength() == 1) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->add##listenerdesc(&multiplexer); \ - } \ - } \ - void SAL_CALL classname::remove##listenerdesc(const css::uno::Reference< css::listenernamespace::X##listenerdesc >& l)\ - { \ - if (multiplexer.getLength() == 1) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->remove##listenerdesc(&multiplexer); \ - } \ - multiplexer.removeInterface(l); \ - } \ - - #define STOP_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, broadcasterclass, broadcaster) \ - if (multiplexer.getLength()) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->remove##listenerdesc(&multiplexer); \ - } \ - - #define START_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, broadcasterclass, broadcaster) \ - if (multiplexer.getLength()) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->add##listenerdesc(&multiplexer); \ - } \ - - // declaration of property listener multiplexers - // (with support for specialized and unspecialized property listeners) - - #define DECLARE_PROPERTY_MULTIPLEXER(classname, listenerclass, methodname, eventtype) \ - class classname final \ - :public OSbaWeakSubObject \ - ,public listenerclass \ - { \ - typedef ::comphelper::OMultiTypeInterfaceContainerHelperVar2< \ - OUString > ListenerContainerMap; \ - ListenerContainerMap m_aListeners; \ - \ - public: \ - classname( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); \ - DECLARE_UNO3_DEFAULTS(classname, OSbaWeakSubObject) \ - virtual css::uno::Any SAL_CALL queryInterface( \ - const css::uno::Type& _rType) override; \ - \ - /* css::lang::XEventListener */ \ - virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; \ - \ - virtual void SAL_CALL methodname(const eventtype& e) override; \ - \ - void addInterface(const OUString& rName, const css::uno::Reference< css::uno::XInterface >& rListener); \ - void removeInterface(const OUString& rName, const css::uno::Reference< css::uno::XInterface >& rListener); \ - \ - void disposeAndClear(); \ - \ - sal_Int32 getOverallLen() const; \ - \ - ::comphelper::OInterfaceContainerHelper2* getContainer(const OUString& rName) \ - { return m_aListeners.getContainer(rName); } \ - \ - private: \ - void Notify(::comphelper::OInterfaceContainerHelper2& rListeners, const eventtype& e); \ - }; \ - - // implementation of property listener multiplexers - #define IMPLEMENT_PROPERTY_MULTIPLEXER(classname, listenerclass, methodname, eventtype) \ - classname::classname(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex) \ - :OSbaWeakSubObject(rSource) \ - ,m_aListeners(rMutex) \ - { \ - } \ - \ - css::uno::Any SAL_CALL classname::queryInterface( \ - const css::uno::Type& _rType) \ - { \ - css::uno::Any aReturn = \ - OSbaWeakSubObject::queryInterface(_rType); \ - if (!aReturn.hasValue()) \ - aReturn = ::cppu::queryInterface(_rType, \ - static_cast< listenerclass* >(this), \ - static_cast< css::lang::XEventListener* >(static_cast< listenerclass* >(this)) \ - ); \ - \ - return aReturn; \ - } \ - void SAL_CALL classname::disposing(const css::lang::EventObject& )\ - { \ - } \ - \ - void SAL_CALL classname::methodname(const eventtype& e) \ - { \ - ::comphelper::OInterfaceContainerHelper2* pListeners = m_aListeners.getContainer(e.PropertyName); \ - if (pListeners) \ - Notify(*pListeners, e); \ - \ - /* do the notification for the unspecialized listeners, too */ \ - pListeners = m_aListeners.getContainer(OUString()); \ - if (pListeners) \ - Notify(*pListeners, e); \ - } \ - \ - void classname::addInterface(const OUString& rName, \ - const css::uno::Reference< css::uno::XInterface > & rListener) \ - { \ - m_aListeners.addInterface(rName, rListener); \ - } \ - \ - void classname::removeInterface(const OUString& rName, \ - const css::uno::Reference< css::uno::XInterface > & rListener) \ - { \ - m_aListeners.removeInterface(rName, rListener); \ - } \ - \ - void classname::disposeAndClear() \ - { \ - css::lang::EventObject aEvt(m_rParent); \ - m_aListeners.disposeAndClear(aEvt); \ - } \ - \ - sal_Int32 classname::getOverallLen() const \ - { \ - sal_Int32 nLen = 0; \ - const std::vector< OUString > aContained = m_aListeners.getContainedTypes(); \ - for ( OUString const & s : aContained) \ - { \ - ::comphelper::OInterfaceContainerHelper2* pListeners = m_aListeners.getContainer(s); \ - if (!pListeners) \ - continue; \ - nLen += pListeners->getLength(); \ - } \ - return nLen; \ - } \ - \ - void classname::Notify(::comphelper::OInterfaceContainerHelper2& rListeners, const eventtype& e) \ - { \ - eventtype aMulti(e); \ - aMulti.Source = &m_rParent; \ - ::comphelper::OInterfaceIteratorHelper2 aIt(rListeners); \ - while (aIt.hasMoreElements()) \ - static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \ - } \ - - // helper for classes which do property event multiplexing - #define IMPLEMENT_PROPERTY_LISTENER_ADMINISTRATION(classname, listenerdesc, multiplexer, broadcasterclass, broadcaster) \ - void SAL_CALL classname::add##listenerdesc(const OUString& rName, const css::uno::Reference< css::beans::X##listenerdesc >& l )\ - { \ - multiplexer.addInterface(rName, l); \ - if (multiplexer.getOverallLen() == 1) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->add##listenerdesc(OUString(), &multiplexer); \ - } \ - } \ - void SAL_CALL classname::remove##listenerdesc(const OUString& rName, const css::uno::Reference< css::beans::X##listenerdesc >& l )\ - { \ - if (multiplexer.getOverallLen() == 1) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->remove##listenerdesc(OUString(), &multiplexer); \ - } \ - multiplexer.removeInterface(rName, l); \ - } \ - - #define STOP_PROPERTY_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, broadcasterclass, broadcaster) \ - if (multiplexer.getOverallLen()) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->remove##listenerdesc(OUString(), &multiplexer); \ - } \ - - #define START_PROPERTY_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, broadcasterclass, broadcaster) \ - if (multiplexer.getOverallLen()) \ - { \ - css::uno::Reference< broadcasterclass > xBroadcaster(broadcaster, css::uno::UNO_QUERY); \ - if (xBroadcaster.is()) \ - xBroadcaster->add##listenerdesc(OUString(), &multiplexer); \ - } \ - // some listener multiplexers // css::frame::XStatusListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXStatusMultiplexer, css::frame::XStatusListener) - DECLARE_MULTIPLEXER_VOID_METHOD(statusChanged, css::frame::FeatureStateEvent) + class SbaXStatusMultiplexer + :public OSbaWeakSubObject + ,public css::frame::XStatusListener + ,public ::comphelper::OInterfaceContainerHelper3<css::frame::XStatusListener> + { + public: + SbaXStatusMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXStatusMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent& e) override; private: css::frame::FeatureStateEvent m_aLastKnownStatus; - public: \ + public: const css::frame::FeatureStateEvent& getLastEvent( ) const { return m_aLastKnownStatus; } - END_DECLARE_LISTENER_MULTIPLEXER() + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::form::XLoadListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXLoadMultiplexer, css::form::XLoadListener) - DECLARE_MULTIPLEXER_VOID_METHOD(loaded, css::lang::EventObject) - DECLARE_MULTIPLEXER_VOID_METHOD(unloaded, css::lang::EventObject) - DECLARE_MULTIPLEXER_VOID_METHOD(unloading, css::lang::EventObject) - DECLARE_MULTIPLEXER_VOID_METHOD(reloading, css::lang::EventObject) - DECLARE_MULTIPLEXER_VOID_METHOD(reloaded, css::lang::EventObject) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXLoadMultiplexer + :public OSbaWeakSubObject + ,public css::form::XLoadListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XLoadListener> + { + public: + SbaXLoadMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXLoadMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL loaded(const css::lang::EventObject& e) override; + virtual void SAL_CALL unloaded(const css::lang::EventObject& e) override; + virtual void SAL_CALL unloading(const css::lang::EventObject& e) override; + virtual void SAL_CALL reloading(const css::lang::EventObject& e) override; + virtual void SAL_CALL reloaded(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::form::XDatabaseParameterListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXParameterMultiplexer, css::form::XDatabaseParameterListener) - DECLARE_MULTIPLEXER_BOOL_METHOD(approveParameter, css::form::DatabaseParameterEvent) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXParameterMultiplexer + :public OSbaWeakSubObject + ,public css::form::XDatabaseParameterListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XDatabaseParameterListener> + { + public: + SbaXParameterMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXParameterMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveParameter(const css::form::DatabaseParameterEvent& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::form::XSubmitListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXSubmitMultiplexer, css::form::XSubmitListener) - DECLARE_MULTIPLEXER_BOOL_METHOD(approveSubmit, css::lang::EventObject) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXSubmitMultiplexer + :public OSbaWeakSubObject + ,public css::form::XSubmitListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XSubmitListener> + { + public: + SbaXSubmitMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXSubmitMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveSubmit(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::form::XResetListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXResetMultiplexer, css::form::XResetListener) - DECLARE_MULTIPLEXER_BOOL_METHOD(approveReset, css::lang::EventObject) - DECLARE_MULTIPLEXER_VOID_METHOD(resetted, css::lang::EventObject) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXResetMultiplexer + :public OSbaWeakSubObject + ,public css::form::XResetListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XResetListener> + { + public: + SbaXResetMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXResetMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveReset(const css::lang::EventObject& e) override; + virtual void SAL_CALL resetted(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::sdbc::XRowSetListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXRowSetMultiplexer, css::sdbc::XRowSetListener) - DECLARE_MULTIPLEXER_VOID_METHOD(cursorMoved, css::lang::EventObject) - DECLARE_MULTIPLEXER_VOID_METHOD(rowChanged, css::lang::EventObject) - DECLARE_MULTIPLEXER_VOID_METHOD(rowSetChanged, css::lang::EventObject) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXRowSetMultiplexer + :public OSbaWeakSubObject + ,public css::sdbc::XRowSetListener + ,public ::comphelper::OInterfaceContainerHelper3<css::sdbc::XRowSetListener> + { + public: + SbaXRowSetMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXRowSetMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual void SAL_CALL cursorMoved(const css::lang::EventObject& e) override; + virtual void SAL_CALL rowChanged(const css::lang::EventObject& e) override; + virtual void SAL_CALL rowSetChanged(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::sdb::XRowSetApproveListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXRowSetApproveMultiplexer, css::sdb::XRowSetApproveListener) - DECLARE_MULTIPLEXER_BOOL_METHOD(approveCursorMove, css::lang::EventObject) - DECLARE_MULTIPLEXER_BOOL_METHOD(approveRowChange, css::sdb::RowChangeEvent) - DECLARE_MULTIPLEXER_BOOL_METHOD(approveRowSetChange, css::lang::EventObject) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXRowSetApproveMultiplexer + :public OSbaWeakSubObject + ,public css::sdb::XRowSetApproveListener + ,public ::comphelper::OInterfaceContainerHelper3<css::sdb::XRowSetApproveListener> + { + public: + SbaXRowSetApproveMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXRowSetApproveMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveCursorMove(const css::lang::EventObject& e) override; + virtual sal_Bool SAL_CALL approveRowChange(const css::sdb::RowChangeEvent& e) override; + virtual sal_Bool SAL_CALL approveRowSetChange(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::sdb::XSQLErrorListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXSQLErrorMultiplexer, css::sdb::XSQLErrorListener) - DECLARE_MULTIPLEXER_VOID_METHOD(errorOccured, css::sdb::SQLErrorEvent) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXSQLErrorMultiplexer + :public OSbaWeakSubObject + ,public css::sdb::XSQLErrorListener + ,public ::comphelper::OInterfaceContainerHelper3<css::sdb::XSQLErrorListener> + { + public: + SbaXSQLErrorMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXSQLErrorMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual void SAL_CALL errorOccured(const css::sdb::SQLErrorEvent& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // css::beans::XPropertyChangeListener - DECLARE_PROPERTY_MULTIPLEXER(SbaXPropertyChangeMultiplexer, css::beans::XPropertyChangeListener, propertyChange, css::beans::PropertyChangeEvent) + class SbaXPropertyChangeMultiplexer final + :public OSbaWeakSubObject + ,public css::beans::XPropertyChangeListener + { + typedef ::comphelper::OMultiTypeInterfaceContainerHelperVar3<css::beans::XPropertyChangeListener, OUString> ListenerContainerMap; + ListenerContainerMap m_aListeners; + + public: + SbaXPropertyChangeMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS(SbaXPropertyChangeMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL propertyChange(const css::beans::PropertyChangeEvent& e) override; + + void addInterface(const OUString& rName, const css::uno::Reference< css::beans::XPropertyChangeListener >& rListener); + void removeInterface(const OUString& rName, const css::uno::Reference< css::beans::XPropertyChangeListener >& rListener); + + void disposeAndClear(); + + sal_Int32 getOverallLen() const; + + ::comphelper::OInterfaceContainerHelper3<css::beans::XPropertyChangeListener>* getContainer(const OUString& rName) + { return m_aListeners.getContainer(rName); } + + private: + void Notify(::comphelper::OInterfaceContainerHelper3<css::beans::XPropertyChangeListener>& rListeners, const css::beans::PropertyChangeEvent& e); + }; // css::beans::XVetoableChangeListener - DECLARE_PROPERTY_MULTIPLEXER(SbaXVetoableChangeMultiplexer, css::beans::XVetoableChangeListener, vetoableChange, css::beans::PropertyChangeEvent) + class SbaXVetoableChangeMultiplexer final + :public OSbaWeakSubObject + ,public css::beans::XVetoableChangeListener + { + typedef ::comphelper::OMultiTypeInterfaceContainerHelperVar3<css::beans::XVetoableChangeListener, OUString > ListenerContainerMap; + ListenerContainerMap m_aListeners; + + public: + SbaXVetoableChangeMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS(SbaXVetoableChangeMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL vetoableChange(const css::beans::PropertyChangeEvent& e) override; + + void addInterface(const OUString& rName, const css::uno::Reference< css::beans::XVetoableChangeListener >& rListener); + void removeInterface(const OUString& rName, const css::uno::Reference< css::beans::XVetoableChangeListener >& rListener); + + void disposeAndClear(); + + sal_Int32 getOverallLen() const; + + private: + void Notify(::comphelper::OInterfaceContainerHelper3<css::beans::XVetoableChangeListener>& rListeners, const css::beans::PropertyChangeEvent& e); + }; // css::beans::XPropertiesChangeListener - BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXPropertiesChangeMultiplexer, css::beans::XPropertiesChangeListener) - DECLARE_MULTIPLEXER_VOID_METHOD(propertiesChange, css::uno::Sequence< css::beans::PropertyChangeEvent >) - END_DECLARE_LISTENER_MULTIPLEXER() + class SbaXPropertiesChangeMultiplexer + :public OSbaWeakSubObject + ,public css::beans::XPropertiesChangeListener + ,public ::comphelper::OInterfaceContainerHelper3<css::beans::XPropertiesChangeListener> + { + public: + SbaXPropertiesChangeMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXPropertiesChangeMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual void SAL_CALL propertiesChange(const css::uno::Sequence< css::beans::PropertyChangeEvent >& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; // the SbaXPropertiesChangeMultiplexer doesn't care about the property names a listener logs on for, it simply // forwards _all_ changes to _all_ listeners } |