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