Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef _SBA_MULTIPLEX_HXX
21 : #define _SBA_MULTIPLEX_HXX
22 :
23 : #include <com/sun/star/beans/XVetoableChangeListener.hpp>
24 : #include <com/sun/star/form/XUpdateListener.hpp>
25 : #include <com/sun/star/form/XErrorListener.hpp>
26 : #include <com/sun/star/form/XRestoreListener.hpp>
27 : #include <com/sun/star/form/XInsertListener.hpp>
28 : #include <com/sun/star/form/XDeleteListener.hpp>
29 : #include <com/sun/star/form/XPositioningListener.hpp>
30 : #include <com/sun/star/form/XDatabaseParameterListener.hpp>
31 : #include <com/sun/star/form/XLoadListener.hpp>
32 : #include <com/sun/star/beans/XPropertyStateChangeListener.hpp>
33 : #include <com/sun/star/beans/XPropertiesChangeListener.hpp>
34 : #include <com/sun/star/beans/XPropertyChangeListener.hpp>
35 : #include <com/sun/star/form/XSubmitListener.hpp>
36 : #include <com/sun/star/form/XResetListener.hpp>
37 : #include <com/sun/star/util/XRefreshListener.hpp>
38 : #include <com/sun/star/sdb/XSQLErrorListener.hpp>
39 : #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
40 : #include <com/sun/star/sdbc/XRowSetListener.hpp>
41 : #include <com/sun/star/frame/XStatusListener.hpp>
42 : #include <comphelper/stl_types.hxx>
43 : #include <comphelper/uno3.hxx>
44 : #include <cppuhelper/interfacecontainer.hxx>
45 : #include <cppuhelper/queryinterface.hxx>
46 : #include <cppuhelper/weak.hxx>
47 :
48 : namespace dbaui
49 : {
50 : //------------------------------------------------------------------
51 : // TODO : replace this class if MM provides an WeakSubObject in cppu
52 0 : class OSbaWeakSubObject : public ::cppu::OWeakObject
53 : {
54 : protected:
55 : ::cppu::OWeakObject& m_rParent;
56 :
57 : public:
58 0 : OSbaWeakSubObject(::cppu::OWeakObject& rParent) : m_rParent(rParent) { }
59 :
60 0 : virtual void SAL_CALL acquire() throw() { m_rParent.acquire(); }
61 0 : virtual void SAL_CALL release() throw() { m_rParent.release(); }
62 : };
63 :
64 : //------------------------------------------------------------------
65 : // declaration of a listener multiplexer class
66 : #define BEGIN_DECLARE_LISTENER_MULTIPLEXER(classname, listenerclass) \
67 : class classname \
68 : :public OSbaWeakSubObject \
69 : ,public listenerclass \
70 : ,public ::cppu::OInterfaceContainerHelper \
71 : { \
72 : public: \
73 : classname( ::cppu::OWeakObject& rSource, \
74 : ::osl::Mutex& rMutex); \
75 : DECLARE_UNO3_DEFAULTS(classname, OSbaWeakSubObject); \
76 : virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( \
77 : const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); \
78 : \
79 : /* ::com::sun::star::lang::XEventListener */ \
80 : virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); \
81 :
82 :
83 : #define DECLARE_MULTIPLEXER_VOID_METHOD(methodname, eventtype) \
84 : virtual void SAL_CALL methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException); \
85 :
86 : #define DECLARE_MULTIPLEXER_BOOL_METHOD(methodname, eventtype) \
87 : virtual sal_Bool SAL_CALL methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException); \
88 :
89 :
90 : #define END_DECLARE_LISTENER_MULTIPLEXER() \
91 : /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators */ \
92 : void * SAL_CALL operator new( size_t size ) throw() { return OSbaWeakSubObject::operator new(size); } \
93 : void SAL_CALL operator delete( void * p ) throw() { OSbaWeakSubObject::operator delete(p); } \
94 : }; \
95 :
96 : //------------------------------------------------------------------
97 : // implementation of a listener multiplexer class
98 :
99 : #define IMPLEMENT_LISTENER_MULTIPLEXER_CORE(classname, listenerclass) \
100 : \
101 : /*................................................................*/ \
102 : classname::classname(::cppu::OWeakObject& rSource, ::osl::Mutex& _rMutex) \
103 : :OSbaWeakSubObject(rSource) \
104 : ,OInterfaceContainerHelper(_rMutex) \
105 : { \
106 : } \
107 : \
108 : ::com::sun::star::uno::Any SAL_CALL classname::queryInterface( \
109 : const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException) \
110 : { \
111 : ::com::sun::star::uno::Any aReturn = \
112 : OSbaWeakSubObject::queryInterface(_rType); \
113 : if (!aReturn.hasValue()) \
114 : aReturn = ::cppu::queryInterface(_rType, \
115 : static_cast< listenerclass* >(this), \
116 : static_cast< ::com::sun::star::lang::XEventListener* >(static_cast< listenerclass* >(this)) \
117 : ); \
118 : \
119 : return aReturn; \
120 : } \
121 : /*................................................................*/ \
122 : void SAL_CALL classname::disposing(const ::com::sun::star::lang::EventObject& ) throw(::com::sun::star::uno::RuntimeException)\
123 : { \
124 : } \
125 :
126 :
127 : #define IMPLEMENT_LISTENER_MULTIPLEXER_VOID_METHOD(classname, listenerclass, methodname, eventtype) \
128 : void SAL_CALL classname::methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException) \
129 : { \
130 : eventtype aMulti(e); \
131 : aMulti.Source = &m_rParent; \
132 : ::cppu::OInterfaceIteratorHelper aIt(*this); \
133 : while (aIt.hasMoreElements()) \
134 : static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \
135 : } \
136 :
137 : #define IMPLEMENT_LISTENER_MULTIPLEXER_BOOL_METHOD(classname, listenerclass, methodname, eventtype) \
138 : /*................................................................*/ \
139 : sal_Bool SAL_CALL classname::methodname(const eventtype& e) throw (::com::sun::star::uno::RuntimeException) \
140 : { \
141 : eventtype aMulti(e); \
142 : aMulti.Source = &m_rParent; \
143 : ::cppu::OInterfaceIteratorHelper aIt(*this); \
144 : sal_Bool bResult = sal_True; \
145 : while (bResult && aIt.hasMoreElements()) \
146 : bResult = static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \
147 : return bResult; \
148 : } \
149 :
150 : //------------------------------------------------------------------
151 : // helper for classes which do event multiplexing
152 : #define IMPLEMENT_LISTENER_ADMINISTRATION(classname, listenernamespace, listenerdesc, multiplexer, braodcasterclass, broadcaster) \
153 : /*................................................................*/ \
154 : 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)\
155 : { \
156 : multiplexer.addInterface(l); \
157 : if (multiplexer.getLength() == 1) \
158 : { \
159 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
160 : if (xBroadcaster.is()) \
161 : xBroadcaster->add##listenerdesc(&multiplexer); \
162 : } \
163 : } \
164 : /*................................................................*/ \
165 : 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)\
166 : { \
167 : if (multiplexer.getLength() == 1) \
168 : { \
169 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
170 : if (xBroadcaster.is()) \
171 : xBroadcaster->remove##listenerdesc(&multiplexer); \
172 : } \
173 : multiplexer.removeInterface(l); \
174 : } \
175 :
176 :
177 : #define STOP_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
178 : if (multiplexer.getLength()) \
179 : { \
180 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
181 : if (xBroadcaster.is()) \
182 : xBroadcaster->remove##listenerdesc(&multiplexer); \
183 : } \
184 :
185 : #define START_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
186 : if (multiplexer.getLength()) \
187 : { \
188 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
189 : if (xBroadcaster.is()) \
190 : xBroadcaster->add##listenerdesc(&multiplexer); \
191 : } \
192 :
193 :
194 :
195 : //------------------------------------------------------------------
196 : // declaration of property listener multiplexers
197 : // (with support for specialized and unspecialized property listeners)
198 :
199 : #define DECLARE_PROPERTY_MULTIPLEXER(classname, listenerclass, methodname, eventtype, exceptions) \
200 : class classname \
201 : :public OSbaWeakSubObject \
202 : ,public listenerclass \
203 : { \
204 : typedef ::cppu::OMultiTypeInterfaceContainerHelperVar< \
205 : ::rtl::OUString, ::rtl::OUStringHash, ::comphelper::UStringEqual > ListenerContainerMap; \
206 : ListenerContainerMap m_aListeners; \
207 : \
208 : public: \
209 : classname( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); \
210 : DECLARE_UNO3_DEFAULTS(classname, OSbaWeakSubObject); \
211 : virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( \
212 : const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); \
213 : \
214 : /* ::com::sun::star::lang::XEventListener */ \
215 : virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); \
216 : \
217 : virtual void SAL_CALL methodname(const eventtype& e) throw exceptions; \
218 : \
219 : public: \
220 : void addInterface(const ::rtl::OUString& rName, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rListener); \
221 : void removeInterface(const ::rtl::OUString& rName, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rListener); \
222 : \
223 : void disposeAndClear(); \
224 : \
225 : sal_Int32 getOverallLen() const; \
226 : \
227 : ::cppu::OInterfaceContainerHelper* getContainer(const ::rtl::OUString& rName) \
228 : { return m_aListeners.getContainer(rName); } \
229 : \
230 : protected: \
231 : void Notify(::cppu::OInterfaceContainerHelper& rListeners, const eventtype& e); \
232 : }; \
233 :
234 :
235 : //------------------------------------------------------------------
236 : // implementation of property listener multiplexers
237 : #define IMPLEMENT_PROPERTY_MULTIPLEXER(classname, listenerclass, methodname, eventtype, exceptions) \
238 : /*................................................................*/ \
239 : classname::classname(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex) \
240 : :OSbaWeakSubObject(rSource) \
241 : ,m_aListeners(rMutex) \
242 : { \
243 : } \
244 : \
245 : ::com::sun::star::uno::Any SAL_CALL classname::queryInterface( \
246 : const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException) \
247 : { \
248 : ::com::sun::star::uno::Any aReturn = \
249 : OSbaWeakSubObject::queryInterface(_rType); \
250 : if (!aReturn.hasValue()) \
251 : aReturn = ::cppu::queryInterface(_rType, \
252 : static_cast< listenerclass* >(this), \
253 : static_cast< ::com::sun::star::lang::XEventListener* >(static_cast< listenerclass* >(this)) \
254 : ); \
255 : \
256 : return aReturn; \
257 : } \
258 : /*................................................................*/ \
259 : void SAL_CALL classname::disposing(const ::com::sun::star::lang::EventObject& ) throw(::com::sun::star::uno::RuntimeException)\
260 : { \
261 : } \
262 : \
263 : void SAL_CALL classname::methodname(const eventtype& e) throw exceptions \
264 : { \
265 : ::cppu::OInterfaceContainerHelper* pListeners = m_aListeners.getContainer(e.PropertyName); \
266 : if (pListeners) \
267 : Notify(*pListeners, e); \
268 : \
269 : /* do the notification for the unspecialized listeners, too */ \
270 : pListeners = m_aListeners.getContainer(::rtl::OUString()); \
271 : if (pListeners) \
272 : Notify(*pListeners, e); \
273 : } \
274 : \
275 : void classname::addInterface(const ::rtl::OUString& rName, \
276 : const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & rListener) \
277 : { \
278 : m_aListeners.addInterface(rName, rListener); \
279 : } \
280 : \
281 : void classname::removeInterface(const ::rtl::OUString& rName, \
282 : const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & rListener) \
283 : { \
284 : m_aListeners.removeInterface(rName, rListener); \
285 : } \
286 : \
287 : void classname::disposeAndClear() \
288 : { \
289 : ::com::sun::star::lang::EventObject aEvt(m_rParent); \
290 : m_aListeners.disposeAndClear(aEvt); \
291 : } \
292 : \
293 : sal_Int32 classname::getOverallLen() const \
294 : { \
295 : sal_Int32 nLen = 0; \
296 : ::com::sun::star::uno::Sequence< ::rtl::OUString > aContained = m_aListeners.getContainedTypes(); \
297 : const ::rtl::OUString* pContained = aContained.getConstArray(); \
298 : for ( sal_Int32 i=0; i<aContained.getLength(); ++i, ++pContained) \
299 : nLen += m_aListeners.getContainer(*pContained)->getLength(); \
300 : return nLen; \
301 : } \
302 : \
303 : void classname::Notify(::cppu::OInterfaceContainerHelper& rListeners, const eventtype& e) \
304 : { \
305 : eventtype aMulti(e); \
306 : aMulti.Source = &m_rParent; \
307 : ::cppu::OInterfaceIteratorHelper aIt(rListeners); \
308 : while (aIt.hasMoreElements()) \
309 : static_cast< listenerclass*>(aIt.next())->methodname(aMulti); \
310 : } \
311 :
312 : //------------------------------------------------------------------
313 : // helper for classes which do property event multiplexing
314 : #define IMPLEMENT_PROPERTY_LISTENER_ADMINISTRATION(classname, listenerdesc, multiplexer, braodcasterclass, broadcaster) \
315 : /*................................................................*/ \
316 : 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)\
317 : { \
318 : multiplexer.addInterface(rName, l); \
319 : if (multiplexer.getOverallLen() == 1) \
320 : { \
321 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
322 : if (xBroadcaster.is()) \
323 : xBroadcaster->add##listenerdesc(::rtl::OUString(), &multiplexer); \
324 : } \
325 : } \
326 : /*................................................................*/ \
327 : 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)\
328 : { \
329 : if (multiplexer.getOverallLen() == 1) \
330 : { \
331 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
332 : if (xBroadcaster.is()) \
333 : xBroadcaster->remove##listenerdesc(::rtl::OUString(), &multiplexer); \
334 : } \
335 : multiplexer.removeInterface(rName, l); \
336 : } \
337 :
338 : #define STOP_PROPERTY_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
339 : if (multiplexer.getOverallLen()) \
340 : { \
341 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
342 : if (xBroadcaster.is()) \
343 : xBroadcaster->remove##listenerdesc(::rtl::OUString(), &multiplexer); \
344 : } \
345 :
346 : #define START_PROPERTY_MULTIPLEXER_LISTENING(listenerdesc, multiplexer, braodcasterclass, broadcaster) \
347 : if (multiplexer.getOverallLen()) \
348 : { \
349 : ::com::sun::star::uno::Reference< braodcasterclass > xBroadcaster(broadcaster, ::com::sun::star::uno::UNO_QUERY); \
350 : if (xBroadcaster.is()) \
351 : xBroadcaster->add##listenerdesc(::rtl::OUString(), &multiplexer); \
352 : } \
353 :
354 :
355 :
356 : //==================================================================
357 : // some listener multiplexers
358 : //==================================================================
359 : // ::com::sun::star::frame::XStatusListener
360 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXStatusMultiplexer, ::com::sun::star::frame::XStatusListener)
361 : DECLARE_MULTIPLEXER_VOID_METHOD(statusChanged, ::com::sun::star::frame::FeatureStateEvent)
362 :
363 : private:
364 : ::com::sun::star::frame::FeatureStateEvent m_aLastKnownStatus;
365 : public: \
366 0 : inline ::com::sun::star::frame::FeatureStateEvent getLastEvent( ) const { return m_aLastKnownStatus; }
367 0 : END_DECLARE_LISTENER_MULTIPLEXER()
368 :
369 : // ::com::sun::star::form::XLoadListener
370 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXLoadMultiplexer, ::com::sun::star::form::XLoadListener)
371 : DECLARE_MULTIPLEXER_VOID_METHOD(loaded, ::com::sun::star::lang::EventObject)
372 : DECLARE_MULTIPLEXER_VOID_METHOD(unloaded, ::com::sun::star::lang::EventObject)
373 : DECLARE_MULTIPLEXER_VOID_METHOD(unloading, ::com::sun::star::lang::EventObject)
374 : DECLARE_MULTIPLEXER_VOID_METHOD(reloading, ::com::sun::star::lang::EventObject)
375 : DECLARE_MULTIPLEXER_VOID_METHOD(reloaded, ::com::sun::star::lang::EventObject)
376 0 : END_DECLARE_LISTENER_MULTIPLEXER()
377 :
378 : // ::com::sun::star::form::XDatabaseParameterListener
379 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXParameterMultiplexer, ::com::sun::star::form::XDatabaseParameterListener)
380 : DECLARE_MULTIPLEXER_BOOL_METHOD(approveParameter, ::com::sun::star::form::DatabaseParameterEvent)
381 0 : END_DECLARE_LISTENER_MULTIPLEXER()
382 :
383 : // ::com::sun::star::form::XSubmitListener
384 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXSubmitMultiplexer, ::com::sun::star::form::XSubmitListener)
385 : DECLARE_MULTIPLEXER_BOOL_METHOD(approveSubmit, ::com::sun::star::lang::EventObject)
386 0 : END_DECLARE_LISTENER_MULTIPLEXER()
387 :
388 : // ::com::sun::star::form::XResetListener
389 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXResetMultiplexer, ::com::sun::star::form::XResetListener)
390 : DECLARE_MULTIPLEXER_BOOL_METHOD(approveReset, ::com::sun::star::lang::EventObject)
391 : DECLARE_MULTIPLEXER_VOID_METHOD(resetted, ::com::sun::star::lang::EventObject)
392 0 : END_DECLARE_LISTENER_MULTIPLEXER()
393 :
394 : // ::com::sun::star::sdbc::XRowSetListener
395 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXRowSetMultiplexer, ::com::sun::star::sdbc::XRowSetListener)
396 : DECLARE_MULTIPLEXER_VOID_METHOD(cursorMoved, ::com::sun::star::lang::EventObject)
397 : DECLARE_MULTIPLEXER_VOID_METHOD(rowChanged, ::com::sun::star::lang::EventObject)
398 : DECLARE_MULTIPLEXER_VOID_METHOD(rowSetChanged, ::com::sun::star::lang::EventObject)
399 0 : END_DECLARE_LISTENER_MULTIPLEXER()
400 :
401 : // ::com::sun::star::sdb::XRowSetApproveListener
402 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXRowSetApproveMultiplexer, ::com::sun::star::sdb::XRowSetApproveListener)
403 : DECLARE_MULTIPLEXER_BOOL_METHOD(approveCursorMove, ::com::sun::star::lang::EventObject)
404 : DECLARE_MULTIPLEXER_BOOL_METHOD(approveRowChange, ::com::sun::star::sdb::RowChangeEvent)
405 : DECLARE_MULTIPLEXER_BOOL_METHOD(approveRowSetChange, ::com::sun::star::lang::EventObject)
406 0 : END_DECLARE_LISTENER_MULTIPLEXER()
407 :
408 : // ::com::sun::star::sdb::XSQLErrorListener
409 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXSQLErrorMultiplexer, ::com::sun::star::sdb::XSQLErrorListener)
410 : DECLARE_MULTIPLEXER_VOID_METHOD(errorOccured, ::com::sun::star::sdb::SQLErrorEvent)
411 0 : END_DECLARE_LISTENER_MULTIPLEXER()
412 :
413 : // ::com::sun::star::beans::XPropertyChangeListener
414 0 : DECLARE_PROPERTY_MULTIPLEXER(SbaXPropertyChangeMultiplexer, ::com::sun::star::beans::XPropertyChangeListener, propertyChange, ::com::sun::star::beans::PropertyChangeEvent, (::com::sun::star::uno::RuntimeException))
415 :
416 : // ::com::sun::star::beans::XVetoableChangeListener
417 0 : 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))
418 :
419 : // ::com::sun::star::beans::XPropertiesChangeListener
420 0 : BEGIN_DECLARE_LISTENER_MULTIPLEXER(SbaXPropertiesChangeMultiplexer, ::com::sun::star::beans::XPropertiesChangeListener)
421 : DECLARE_MULTIPLEXER_VOID_METHOD(propertiesChange, ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyChangeEvent >)
422 0 : END_DECLARE_LISTENER_MULTIPLEXER()
423 : // the SbaXPropertiesChangeMultiplexer doesn't care about the property names a listener logs on for, it simply
424 : // forwards _all_ changes to _all_ listeners
425 : }
426 :
427 : #endif // _SBA_MULTIPLEXER_HXX
428 :
429 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|