1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: sbamultiplex.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _SBA_MULTIPLEX_HXX
32 #define _SBA_MULTIPLEX_HXX
34 //#ifndef _SDB_TOOLS_HXX
35 //#include <sdb/tools.hxx>
38 #ifndef _COM_SUN_STAR_BEANS_XVETOABLECHANGELISTENER_HPP_
39 #include <com/sun/star/beans/XVetoableChangeListener.hpp>
41 #ifndef _COM_SUN_STAR_FORM_XUPDATELISTENER_HPP_
42 #include <com/sun/star/form/XUpdateListener.hpp>
44 #ifndef _COM_SUN_STAR_FORM_XERRORLISTENER_HPP_
45 #include <com/sun/star/form/XErrorListener.hpp>
47 #ifndef _COM_SUN_STAR_FORM_XRESTORELISTENER_HPP_
48 #include <com/sun/star/form/XRestoreListener.hpp>
50 #ifndef _COM_SUN_STAR_FORM_XINSERTLISTENER_HPP_
51 #include <com/sun/star/form/XInsertListener.hpp>
53 #ifndef _COM_SUN_STAR_FORM_XDELETELISTENER_HPP_
54 #include <com/sun/star/form/XDeleteListener.hpp>
56 #ifndef _COM_SUN_STAR_FORM_XPOSITIONINGLISTENER_HPP_
57 #include <com/sun/star/form/XPositioningListener.hpp>
59 #ifndef _COM_SUN_STAR_FORM_XDATABASEPARAMETERLISTENER_HPP_
60 #include <com/sun/star/form/XDatabaseParameterListener.hpp>
62 #ifndef _COM_SUN_STAR_FORM_XLOADLISTENER_HPP_
63 #include <com/sun/star/form/XLoadListener.hpp>
65 #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSTATECHANGELISTENER_HPP_
66 #include <com/sun/star/beans/XPropertyStateChangeListener.hpp>
68 #ifndef _COM_SUN_STAR_BEANS_XPROPERTIESCHANGELISTENER_HPP_
69 #include <com/sun/star/beans/XPropertiesChangeListener.hpp>
71 #ifndef _COM_SUN_STAR_BEANS_XPROPERTYCHANGELISTENER_HPP_
72 #include <com/sun/star/beans/XPropertyChangeListener.hpp>
74 #ifndef _COM_SUN_STAR_FORM_XSUBMITLISTENER_HPP_
75 #include <com/sun/star/form/XSubmitListener.hpp>
77 #ifndef _COM_SUN_STAR_FORM_XRESETLISTENER_HPP_
78 #include <com/sun/star/form/XResetListener.hpp>
80 #ifndef _COM_SUN_STAR_UTIL_XREFRESHLISTENER_HPP_
81 #include <com/sun/star/util/XRefreshListener.hpp>
83 #ifndef _COM_SUN_STAR_SDBC_XSQLERRORLISTENER_HPP_
84 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
86 #ifndef _COM_SUN_STAR_SDB_XROWSETAPPROVELISTENER_HPP_
87 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
89 #ifndef _COM_SUN_STAR_SDBC_XROWSETLISTENER_HPP_
90 #include <com/sun/star/sdbc/XRowSetListener.hpp>
92 #ifndef _COM_SUN_STAR_FRAME_XSTATUSLISTENER_HPP_
93 #include <com/sun/star/frame/XStatusListener.hpp>
95 #ifndef _COMPHELPER_STLTYPES_HXX_
96 #include <comphelper/stl_types.hxx>
98 #ifndef _COMPHELPER_UNO3_HXX_
99 #include <comphelper/uno3.hxx>
101 #ifndef _CPPUHELPER_INTERFACECONTAINER_HXX_
102 #include <cppuhelper/interfacecontainer.hxx>
104 #ifndef _CPPUHELPER_QUERYINTERFACE_HXX_
105 #include <cppuhelper/queryinterface.hxx>
107 #ifndef _CPPUHELPER_WEAK_HXX_
108 #include <cppuhelper/weak.hxx>
113 //------------------------------------------------------------------
114 // TODO : replace this class if MM provides an WeakSubObject in cppu
115 class OSbaWeakSubObject
: public ::cppu::OWeakObject
118 ::cppu::OWeakObject
& m_rParent
;
121 OSbaWeakSubObject(::cppu::OWeakObject
& rParent
) : m_rParent(rParent
) { }
123 virtual void SAL_CALL
acquire() throw() { m_rParent
.acquire(); }
124 virtual void SAL_CALL
release() throw() { m_rParent
.release(); }
127 //------------------------------------------------------------------
128 // declaration of a listener multiplexer class
129 #define BEGIN_DECLARE_LISTENER_MULTIPLEXER(classname, listenerclass) \
131 :public OSbaWeakSubObject \
132 ,public listenerclass \
133 ,public ::cppu::OInterfaceContainerHelper \
136 classname( ::cppu::OWeakObject& rSource, \
137 ::osl::Mutex& rMutex); \
138 DECLARE_UNO3_DEFAULTS(classname, OSbaWeakSubObject); \
139 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( \
140 const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); \
142 /* ::com::sun::star::lang::XEventListener */ \
143 virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); \
146 #define DECLARE_MULTIPLEXER_VOID_METHOD(methodname, eventtype) \
147 virtual void SAL_CALL methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException); \
149 #define DECLARE_MULTIPLEXER_BOOL_METHOD(methodname, eventtype) \
150 virtual sal_Bool SAL_CALL methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException); \
153 #define END_DECLARE_LISTENER_MULTIPLEXER() \
154 /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators */ \
155 void * SAL_CALL operator new( size_t size ) throw() { return OSbaWeakSubObject::operator new(size); } \
156 void SAL_CALL operator delete( void * p ) throw() { OSbaWeakSubObject::operator delete(p); } \
159 //------------------------------------------------------------------
160 // implementation of a listener multiplexer class
162 #define IMPLEMENT_LISTENER_MULTIPLEXER_CORE(classname, listenerclass) \
164 /*................................................................*/ \
165 classname::classname(::cppu::OWeakObject& rSource, ::osl::Mutex& _rMutex) \
166 :OSbaWeakSubObject(rSource) \
167 ,OInterfaceContainerHelper(_rMutex) \
171 ::com::sun::star::uno::Any SAL_CALL classname::queryInterface( \
172 const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException) \
174 ::com::sun::star::uno::Any aReturn = \
175 OSbaWeakSubObject::queryInterface(_rType); \
176 if (!aReturn.hasValue()) \
177 aReturn = ::cppu::queryInterface(_rType, \
178 static_cast< listenerclass* >(this), \
179 static_cast< ::com::sun::star::lang::XEventListener* >(static_cast< listenerclass* >(this)) \
184 /*................................................................*/ \
185 void SAL_CALL classname::disposing(const ::com::sun::star::lang::EventObject& ) throw(::com::sun::star::uno::RuntimeException)\
190 #define IMPLEMENT_LISTENER_MULTIPLEXER_VOID_METHOD(classname, listenerclass, methodname, eventtype) \
191 void SAL_CALL classname::methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException) \
193 eventtype aMulti(e); \
194 aMulti.Source = &m_rParent; \
195 ::cppu::OInterfaceIteratorHelper aIt(*this); \
196 while (aIt.hasMoreElements()) \
197 static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \
200 #define IMPLEMENT_LISTENER_MULTIPLEXER_BOOL_METHOD(classname, listenerclass, methodname, eventtype) \
201 /*................................................................*/ \
202 sal_Bool SAL_CALL classname::methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException) \
204 eventtype aMulti(e); \
205 aMulti.Source = &m_rParent; \
206 ::cppu::OInterfaceIteratorHelper aIt(*this); \
207 sal_Bool bResult = sal_True; \
208 while (bResult && aIt.hasMoreElements()) \
209 bResult = static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \
213 //------------------------------------------------------------------
214 // helper for classes which do event multiplexing
215 #define IMPLEMENT_LISTENER_ADMINISTRATION(classname, listenernamespace, listenerdesc, multiplexer, braodcasterclass, broadcaster) \
216 /*................................................................*/ \
217 void SAL_CALL classname::add##listenerdesc(const ::com::sun::star::uno::Reference< ::com::sun::star::listenernamespace::X##listenerdesc >& l) throw(::com::sun::star::uno::RuntimeException)\
219 multiplexer.addInterface(l); \
220 if (multiplexer.getLength() == 1) \
222 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
223 if (xBroadcaster.is()) \
224 xBroadcaster->add##listenerdesc(&multiplexer); \
227 /*................................................................*/ \
228 void SAL_CALL classname::remove##listenerdesc(const ::com::sun::star::uno::Reference< ::com::sun::star::listenernamespace::X##listenerdesc >& l) throw(::com::sun::star::uno::RuntimeException)\
230 if (multiplexer.getLength() == 1) \
232 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
233 if (xBroadcaster.is()) \
234 xBroadcaster->remove##listenerdesc(&multiplexer); \
236 multiplexer.removeInterface(l); \
240 #define STOP_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
241 if (multiplexer.getLength()) \
243 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
244 if (xBroadcaster.is()) \
245 xBroadcaster->remove##listenerdesc(&multiplexer); \
248 #define START_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
249 if (multiplexer.getLength()) \
251 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
252 if (xBroadcaster.is()) \
253 xBroadcaster->add##listenerdesc(&multiplexer); \
258 //------------------------------------------------------------------
259 // declaration of property listener multiplexers
260 // (with support for specialized and unspecialized property listeners)
262 #define DECLARE_PROPERTY_MULTIPLEXER(classname, listenerclass, methodname, eventtype, exceptions) \
264 :public OSbaWeakSubObject \
265 ,public listenerclass \
267 typedef ::cppu::OMultiTypeInterfaceContainerHelperVar< \
268 ::rtl::OUString, ::comphelper::UStringHash, ::comphelper::UStringEqual > ListenerContainerMap; \
269 ListenerContainerMap m_aListeners; \
272 classname( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); \
273 DECLARE_UNO3_DEFAULTS(classname, OSbaWeakSubObject); \
274 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( \
275 const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); \
277 /* ::com::sun::star::lang::XEventListener */ \
278 virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); \
280 virtual void SAL_CALL methodname(const eventtype& e) throw exceptions; \
283 void addInterface(const ::rtl::OUString& rName, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rListener); \
284 void removeInterface(const ::rtl::OUString& rName, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rListener); \
286 void disposeAndClear(); \
288 sal_Int32 getOverallLen() const; \
290 ::cppu::OInterfaceContainerHelper* getContainer(const ::rtl::OUString& rName) \
291 { return m_aListeners.getContainer(rName); } \
294 void Notify(::cppu::OInterfaceContainerHelper& rListeners, const eventtype& e); \
298 //------------------------------------------------------------------
299 // implementation of property listener multiplexers
300 #define IMPLEMENT_PROPERTY_MULTIPLEXER(classname, listenerclass, methodname, eventtype, exceptions) \
301 /*................................................................*/ \
302 classname::classname(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex) \
303 :OSbaWeakSubObject(rSource) \
304 ,m_aListeners(rMutex) \
308 ::com::sun::star::uno::Any SAL_CALL classname::queryInterface( \
309 const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException) \
311 ::com::sun::star::uno::Any aReturn = \
312 OSbaWeakSubObject::queryInterface(_rType); \
313 if (!aReturn.hasValue()) \
314 aReturn = ::cppu::queryInterface(_rType, \
315 static_cast< listenerclass* >(this), \
316 static_cast< ::com::sun::star::lang::XEventListener* >(static_cast< listenerclass* >(this)) \
321 /*................................................................*/ \
322 void SAL_CALL classname::disposing(const ::com::sun::star::lang::EventObject& ) throw(::com::sun::star::uno::RuntimeException)\
326 void SAL_CALL classname::methodname(const eventtype& e) throw exceptions \
328 ::cppu::OInterfaceContainerHelper* pListeners = m_aListeners.getContainer(e.PropertyName); \
330 Notify(*pListeners, e); \
332 /* do the notification for the unspecialized listeners, too */ \
333 pListeners = m_aListeners.getContainer(::rtl::OUString()); \
335 Notify(*pListeners, e); \
338 void classname::addInterface(const ::rtl::OUString& rName, \
339 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & rListener) \
341 m_aListeners.addInterface(rName, rListener); \
344 void classname::removeInterface(const ::rtl::OUString& rName, \
345 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & rListener) \
347 m_aListeners.removeInterface(rName, rListener); \
350 void classname::disposeAndClear() \
352 ::com::sun::star::lang::EventObject aEvt(m_rParent); \
353 m_aListeners.disposeAndClear(aEvt); \
356 sal_Int32 classname::getOverallLen() const \
358 sal_Int32 nLen = 0; \
359 ::com::sun::star::uno::Sequence< ::rtl::OUString > aContained = m_aListeners.getContainedTypes(); \
360 const ::rtl::OUString* pContained = aContained.getConstArray(); \
361 for ( sal_Int32 i=0; i<aContained.getLength(); ++i, ++pContained) \
362 nLen += m_aListeners.getContainer(*pContained)->getLength(); \
366 void classname::Notify(::cppu::OInterfaceContainerHelper& rListeners, const eventtype& e) \
368 eventtype aMulti(e); \
369 aMulti.Source = &m_rParent; \
370 ::cppu::OInterfaceIteratorHelper aIt(rListeners); \
371 while (aIt.hasMoreElements()) \
372 static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \
375 //------------------------------------------------------------------
376 // helper for classes which do property event multiplexing
377 #define IMPLEMENT_PROPERTY_LISTENER_ADMINISTRATION(classname, listenerdesc, multiplexer, braodcasterclass, broadcaster) \
378 /*................................................................*/ \
379 void SAL_CALL classname::add##listenerdesc(const ::rtl::OUString& rName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::X##listenerdesc >& l ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)\
381 multiplexer.addInterface(rName, l); \
382 if (multiplexer.getOverallLen() == 1) \
384 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
385 if (xBroadcaster.is()) \
386 xBroadcaster->add##listenerdesc(::rtl::OUString(), &multiplexer); \
389 /*................................................................*/ \
390 void SAL_CALL classname::remove##listenerdesc(const ::rtl::OUString& rName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::X##listenerdesc >& l ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)\
392 if (multiplexer.getOverallLen() == 1) \
394 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
395 if (xBroadcaster.is()) \
396 xBroadcaster->remove##listenerdesc(::rtl::OUString(), &multiplexer); \
398 multiplexer.removeInterface(rName, l); \
401 #define STOP_PROPERTY_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
402 if (multiplexer.getOverallLen()) \
404 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
405 if (xBroadcaster.is()) \
406 xBroadcaster->remove##listenerdesc(::rtl::OUString(), &multiplexer); \
409 #define START_PROPERTY_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
410 if (multiplexer.getOverallLen()) \
412 ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
413 if (xBroadcaster.is()) \
414 xBroadcaster->add##listenerdesc(::rtl::OUString(), &multiplexer); \
419 //==================================================================
420 // some listener multiplexers
421 //==================================================================
422 // ::com::sun::star::frame::XStatusListener
423 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXStatusMultiplexer
, ::com::sun::star::frame::XStatusListener
)
424 DECLARE_MULTIPLEXER_VOID_METHOD(statusChanged
, ::com::sun::star::frame::FeatureStateEvent
)
427 ::com::sun::star::frame::FeatureStateEvent m_aLastKnownStatus
;
429 inline ::com::sun::star::frame::FeatureStateEvent
getLastEvent( ) const { return m_aLastKnownStatus
; }
430 END_DECLARE_LISTENER_MULTIPLEXER()
432 // ::com::sun::star::form::XLoadListener
433 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXLoadMultiplexer
, ::com::sun::star::form::XLoadListener
)
434 DECLARE_MULTIPLEXER_VOID_METHOD(loaded
, ::com::sun::star::lang::EventObject
)
435 DECLARE_MULTIPLEXER_VOID_METHOD(unloaded
, ::com::sun::star::lang::EventObject
)
436 DECLARE_MULTIPLEXER_VOID_METHOD(unloading
, ::com::sun::star::lang::EventObject
)
437 DECLARE_MULTIPLEXER_VOID_METHOD(reloading
, ::com::sun::star::lang::EventObject
)
438 DECLARE_MULTIPLEXER_VOID_METHOD(reloaded
, ::com::sun::star::lang::EventObject
)
439 END_DECLARE_LISTENER_MULTIPLEXER()
441 // ::com::sun::star::form::XDatabaseParameterListener
442 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXParameterMultiplexer
, ::com::sun::star::form::XDatabaseParameterListener
)
443 DECLARE_MULTIPLEXER_BOOL_METHOD(approveParameter
, ::com::sun::star::form::DatabaseParameterEvent
)
444 END_DECLARE_LISTENER_MULTIPLEXER()
446 // ::com::sun::star::form::XSubmitListener
447 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXSubmitMultiplexer
, ::com::sun::star::form::XSubmitListener
)
448 DECLARE_MULTIPLEXER_BOOL_METHOD(approveSubmit
, ::com::sun::star::lang::EventObject
)
449 END_DECLARE_LISTENER_MULTIPLEXER()
451 // ::com::sun::star::form::XResetListener
452 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXResetMultiplexer
, ::com::sun::star::form::XResetListener
)
453 DECLARE_MULTIPLEXER_BOOL_METHOD(approveReset
, ::com::sun::star::lang::EventObject
)
454 DECLARE_MULTIPLEXER_VOID_METHOD(resetted
, ::com::sun::star::lang::EventObject
)
455 END_DECLARE_LISTENER_MULTIPLEXER()
457 // ::com::sun::star::sdbc::XRowSetListener
458 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXRowSetMultiplexer
, ::com::sun::star::sdbc::XRowSetListener
)
459 DECLARE_MULTIPLEXER_VOID_METHOD(cursorMoved
, ::com::sun::star::lang::EventObject
)
460 DECLARE_MULTIPLEXER_VOID_METHOD(rowChanged
, ::com::sun::star::lang::EventObject
)
461 DECLARE_MULTIPLEXER_VOID_METHOD(rowSetChanged
, ::com::sun::star::lang::EventObject
)
462 END_DECLARE_LISTENER_MULTIPLEXER()
464 // ::com::sun::star::sdb::XRowSetApproveListener
465 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXRowSetApproveMultiplexer
, ::com::sun::star::sdb::XRowSetApproveListener
)
466 DECLARE_MULTIPLEXER_BOOL_METHOD(approveCursorMove
, ::com::sun::star::lang::EventObject
)
467 DECLARE_MULTIPLEXER_BOOL_METHOD(approveRowChange
, ::com::sun::star::sdb::RowChangeEvent
)
468 DECLARE_MULTIPLEXER_BOOL_METHOD(approveRowSetChange
, ::com::sun::star::lang::EventObject
)
469 END_DECLARE_LISTENER_MULTIPLEXER()
471 // ::com::sun::star::sdb::XSQLErrorListener
472 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXSQLErrorMultiplexer
, ::com::sun::star::sdb::XSQLErrorListener
)
473 DECLARE_MULTIPLEXER_VOID_METHOD(errorOccured
, ::com::sun::star::sdb::SQLErrorEvent
)
474 END_DECLARE_LISTENER_MULTIPLEXER()
476 // ::com::sun::star::beans::XPropertyChangeListener
477 DECLARE_PROPERTY_MULTIPLEXER(SbaXPropertyChangeMultiplexer
, ::com::sun::star::beans::XPropertyChangeListener
, propertyChange
, ::com::sun::star::beans::PropertyChangeEvent
, (::com::sun::star::uno::RuntimeException
))
479 // ::com::sun::star::beans::XVetoableChangeListener
480 DECLARE_PROPERTY_MULTIPLEXER(SbaXVetoableChangeMultiplexer
, ::com::sun::star::beans::XVetoableChangeListener
, vetoableChange
, ::com::sun::star::beans::PropertyChangeEvent
, (::com::sun::star::beans::PropertyVetoException
, ::com::sun::star::uno::RuntimeException
))
482 // ::com::sun::star::beans::XPropertiesChangeListener
483 BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXPropertiesChangeMultiplexer
, ::com::sun::star::beans::XPropertiesChangeListener
)
484 DECLARE_MULTIPLEXER_VOID_METHOD(propertiesChange
, ::com::sun::star::uno::Sequence
< ::com::sun::star::beans::PropertyChangeEvent
>)
485 END_DECLARE_LISTENER_MULTIPLEXER()
486 // the SbaXPropertiesChangeMultiplexer doesn't care about the property names a listener logs on for, it simply
487 // forwards _all_ changes to _all_ listeners
490 #endif // _SBA_MULTIPLEXER_HXX