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