1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 28*cdf0e10cSrcweir // my own include 29*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "multiplexer.hxx" 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 34*cdf0e10cSrcweir // includes of other projects 35*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 36*cdf0e10cSrcweir #include <vos/diagnose.hxx> 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 39*cdf0e10cSrcweir // includes of my own project 40*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 43*cdf0e10cSrcweir // namespaces 44*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir using namespace ::cppu ; 47*cdf0e10cSrcweir using namespace ::osl ; 48*cdf0e10cSrcweir using namespace ::com::sun::star::uno ; 49*cdf0e10cSrcweir using namespace ::com::sun::star::awt ; 50*cdf0e10cSrcweir using namespace ::com::sun::star::lang ; 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir namespace unocontrols{ 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 55*cdf0e10cSrcweir // macros 56*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir #define MULTIPLEX( INTERFACE, METHOD, EVENTTYP, EVENT ) \ 59*cdf0e10cSrcweir \ 60*cdf0e10cSrcweir /* First get all interfaces from container with right type.*/ \ 61*cdf0e10cSrcweir OInterfaceContainerHelper* pContainer = m_aListenerHolder.getContainer( ::getCppuType((const Reference< INTERFACE >*)0) ); \ 62*cdf0e10cSrcweir /* Do the follow only, if elements in container exist.*/ \ 63*cdf0e10cSrcweir if( pContainer != NULL ) \ 64*cdf0e10cSrcweir { \ 65*cdf0e10cSrcweir OInterfaceIteratorHelper aIterator( *pContainer ); \ 66*cdf0e10cSrcweir EVENTTYP aLocalEvent = EVENT; \ 67*cdf0e10cSrcweir /* Remark: The control is the event source not the peer.*/ \ 68*cdf0e10cSrcweir /* We must change the source of the event. */ \ 69*cdf0e10cSrcweir aLocalEvent.Source = m_xControl ; \ 70*cdf0e10cSrcweir /* Is the control not destroyed? */ \ 71*cdf0e10cSrcweir if( aLocalEvent.Source.is() == sal_True ) \ 72*cdf0e10cSrcweir { \ 73*cdf0e10cSrcweir if( aIterator.hasMoreElements() ) \ 74*cdf0e10cSrcweir { \ 75*cdf0e10cSrcweir INTERFACE * pListener = (INTERFACE *)aIterator.next(); \ 76*cdf0e10cSrcweir try \ 77*cdf0e10cSrcweir { \ 78*cdf0e10cSrcweir pListener->METHOD( aLocalEvent ); \ 79*cdf0e10cSrcweir } \ 80*cdf0e10cSrcweir catch( RuntimeException& ) \ 81*cdf0e10cSrcweir { \ 82*cdf0e10cSrcweir /* Ignore all system exceptions from the listener! */ \ 83*cdf0e10cSrcweir } \ 84*cdf0e10cSrcweir } \ 85*cdf0e10cSrcweir } \ 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 89*cdf0e10cSrcweir // construct/destruct 90*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir OMRCListenerMultiplexerHelper::OMRCListenerMultiplexerHelper( const Reference< XWindow >& xControl , 93*cdf0e10cSrcweir const Reference< XWindow >& xPeer ) 94*cdf0e10cSrcweir : m_xPeer ( xPeer ) 95*cdf0e10cSrcweir , m_xControl ( xControl ) 96*cdf0e10cSrcweir , m_aListenerHolder ( m_aMutex ) 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir } 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir OMRCListenerMultiplexerHelper::OMRCListenerMultiplexerHelper( const OMRCListenerMultiplexerHelper& /*aCopyInstance*/ ) 101*cdf0e10cSrcweir : XFocusListener() 102*cdf0e10cSrcweir , XWindowListener() 103*cdf0e10cSrcweir , XKeyListener() 104*cdf0e10cSrcweir , XMouseListener() 105*cdf0e10cSrcweir , XMouseMotionListener() 106*cdf0e10cSrcweir , XPaintListener() 107*cdf0e10cSrcweir , XTopWindowListener() 108*cdf0e10cSrcweir , OWeakObject() 109*cdf0e10cSrcweir , m_aListenerHolder ( m_aMutex ) 110*cdf0e10cSrcweir { 111*cdf0e10cSrcweir } 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir OMRCListenerMultiplexerHelper::~OMRCListenerMultiplexerHelper() 114*cdf0e10cSrcweir { 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 118*cdf0e10cSrcweir // XInterface 119*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir Any SAL_CALL OMRCListenerMultiplexerHelper::queryInterface( const Type& rType ) throw( RuntimeException ) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir // Attention: 124*cdf0e10cSrcweir // Don't use mutex or guard in this method!!! Is a method of XInterface. 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir // Ask for my own supported interfaces ... 127*cdf0e10cSrcweir // Attention: XTypeProvider and XInterface are supported by OComponentHelper! 128*cdf0e10cSrcweir Any aReturn ( ::cppu::queryInterface( rType , 129*cdf0e10cSrcweir static_cast< XWindowListener* > ( this ) , 130*cdf0e10cSrcweir static_cast< XKeyListener* > ( this ) , 131*cdf0e10cSrcweir static_cast< XFocusListener* > ( this ) , 132*cdf0e10cSrcweir static_cast< XMouseListener* > ( this ) , 133*cdf0e10cSrcweir static_cast< XMouseMotionListener* > ( this ) , 134*cdf0e10cSrcweir static_cast< XPaintListener* > ( this ) , 135*cdf0e10cSrcweir static_cast< XTopWindowListener* > ( this ) , 136*cdf0e10cSrcweir static_cast< XTopWindowListener* > ( this ) 137*cdf0e10cSrcweir ) 138*cdf0e10cSrcweir ); 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir // If searched interface supported by this class ... 141*cdf0e10cSrcweir if ( aReturn.hasValue() == sal_True ) 142*cdf0e10cSrcweir { 143*cdf0e10cSrcweir // ... return this information. 144*cdf0e10cSrcweir return aReturn ; 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir else 147*cdf0e10cSrcweir { 148*cdf0e10cSrcweir // Else; ... ask baseclass for interfaces! 149*cdf0e10cSrcweir return OWeakObject::queryInterface( rType ); 150*cdf0e10cSrcweir } 151*cdf0e10cSrcweir } 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 154*cdf0e10cSrcweir // XInterface 155*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir void SAL_CALL OMRCListenerMultiplexerHelper::acquire() throw() 158*cdf0e10cSrcweir { 159*cdf0e10cSrcweir // Attention: 160*cdf0e10cSrcweir // Don't use mutex or guard in this method!!! Is a method of XInterface. 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir // Forward to baseclass 163*cdf0e10cSrcweir OWeakObject::acquire(); 164*cdf0e10cSrcweir } 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 167*cdf0e10cSrcweir // XInterface 168*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir void SAL_CALL OMRCListenerMultiplexerHelper::release() throw() 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir // Attention: 173*cdf0e10cSrcweir // Don't use mutex or guard in this method!!! Is a method of XInterface. 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir // Forward to baseclass 176*cdf0e10cSrcweir OWeakObject::release(); 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 180*cdf0e10cSrcweir // operator 181*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir OMRCListenerMultiplexerHelper::operator Reference< XInterface >() const 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir return ((OWeakObject*)this) ; 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 189*cdf0e10cSrcweir // operator 190*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir //OMRCListenerMultiplexerHelper& OMRCListenerMultiplexerHelper::operator= ( const OMRCListenerMultiplexerHelper& aCopyInstance ) 193*cdf0e10cSrcweir //{ 194*cdf0e10cSrcweir // return this ; 195*cdf0e10cSrcweir //} 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 198*cdf0e10cSrcweir // container method 199*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::setPeer( const Reference< XWindow >& xPeer ) 202*cdf0e10cSrcweir { 203*cdf0e10cSrcweir MutexGuard aGuard( m_aMutex ); 204*cdf0e10cSrcweir if( m_xPeer != xPeer ) 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir if( m_xPeer.is() ) 207*cdf0e10cSrcweir { 208*cdf0e10cSrcweir // get all types from the listener added to the peer 209*cdf0e10cSrcweir Sequence< Type > aContainedTypes = m_aListenerHolder.getContainedTypes(); 210*cdf0e10cSrcweir const Type* pArray = aContainedTypes.getConstArray(); 211*cdf0e10cSrcweir sal_Int32 nCount = aContainedTypes.getLength(); 212*cdf0e10cSrcweir // loop over all listener types and remove the listeners from the peer 213*cdf0e10cSrcweir for( sal_Int32 i=0; i<nCount; i++ ) 214*cdf0e10cSrcweir impl_unadviseFromPeer( m_xPeer, pArray[i] ); 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir m_xPeer = xPeer; 217*cdf0e10cSrcweir if( m_xPeer.is() ) 218*cdf0e10cSrcweir { 219*cdf0e10cSrcweir // get all types from the listener added to the peer 220*cdf0e10cSrcweir Sequence< Type > aContainedTypes = m_aListenerHolder.getContainedTypes(); 221*cdf0e10cSrcweir const Type* pArray = aContainedTypes.getConstArray(); 222*cdf0e10cSrcweir sal_Int32 nCount = aContainedTypes.getLength(); 223*cdf0e10cSrcweir // loop over all listener types and add the listeners to the peer 224*cdf0e10cSrcweir for( sal_Int32 i = 0; i < nCount; i++ ) 225*cdf0e10cSrcweir impl_adviseToPeer( m_xPeer, pArray[i] ); 226*cdf0e10cSrcweir } 227*cdf0e10cSrcweir } 228*cdf0e10cSrcweir } 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 231*cdf0e10cSrcweir // container method 232*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::disposeAndClear() 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir EventObject aEvent ; 237*cdf0e10cSrcweir aEvent.Source = m_xControl ; 238*cdf0e10cSrcweir m_aListenerHolder.disposeAndClear( aEvent ); 239*cdf0e10cSrcweir } 240*cdf0e10cSrcweir 241*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 242*cdf0e10cSrcweir // container method 243*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::advise( const Type& aType , 246*cdf0e10cSrcweir const Reference< XInterface >& xListener ) 247*cdf0e10cSrcweir { 248*cdf0e10cSrcweir MutexGuard aGuard( m_aMutex ); 249*cdf0e10cSrcweir if( m_aListenerHolder.addInterface( aType, xListener ) == 1 ) 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir // the first listener is added 252*cdf0e10cSrcweir if( m_xPeer.is() ) 253*cdf0e10cSrcweir { 254*cdf0e10cSrcweir impl_adviseToPeer( m_xPeer, aType ); 255*cdf0e10cSrcweir } 256*cdf0e10cSrcweir } 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir 259*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 260*cdf0e10cSrcweir // container method 261*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::unadvise( const Type& aType , 264*cdf0e10cSrcweir const Reference< XInterface >& xListener ) 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir MutexGuard aGuard( m_aMutex ); 267*cdf0e10cSrcweir if( m_aListenerHolder.removeInterface( aType, xListener ) == 0 ) 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir // the last listener is removed 270*cdf0e10cSrcweir if ( m_xPeer.is() ) 271*cdf0e10cSrcweir { 272*cdf0e10cSrcweir impl_unadviseFromPeer( m_xPeer, aType ); 273*cdf0e10cSrcweir } 274*cdf0e10cSrcweir } 275*cdf0e10cSrcweir } 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 278*cdf0e10cSrcweir // XEventListener 279*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir void SAL_CALL OMRCListenerMultiplexerHelper::disposing( const EventObject& /*aSource*/ ) throw( RuntimeException ) 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir MutexGuard aGuard( m_aMutex ); 284*cdf0e10cSrcweir // peer is disposed, clear the reference 285*cdf0e10cSrcweir m_xPeer = Reference< XWindow >(); 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 289*cdf0e10cSrcweir // XFcousListener 290*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::focusGained(const FocusEvent& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir /* 295*cdf0e10cSrcweir OInterfaceContainerHelper * pCont = aListenerHolder.getContainer( ::getCppuType((const Reference< XFocusListener >*)0) ); 296*cdf0e10cSrcweir if( pCont ) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir OInterfaceIteratorHelper aIt( *pCont ); 299*cdf0e10cSrcweir FocusEvent aEvt = e; 300*cdf0e10cSrcweir // Reamark: The control is the event source not the peer. We must change 301*cdf0e10cSrcweir // the source of the event 302*cdf0e10cSrcweir xControl.queryHardRef( ((XInterface*)NULL)->getSmartUik(), aEvt.Source ); 303*cdf0e10cSrcweir //.is the control not destroyed 304*cdf0e10cSrcweir if( aEvt.Source.is() ) 305*cdf0e10cSrcweir { 306*cdf0e10cSrcweir if( aIt.hasMoreElements() ) 307*cdf0e10cSrcweir { 308*cdf0e10cSrcweir XFocusListener * pListener = (XFocusListener *)aIt.next(); 309*cdf0e10cSrcweir try 310*cdf0e10cSrcweir { 311*cdf0e10cSrcweir pListener->focusGained( aEvt ); 312*cdf0e10cSrcweir } 313*cdf0e10cSrcweir catch( RuntimeException, e ) 314*cdf0e10cSrcweir { 315*cdf0e10cSrcweir // ignore all usr system exceptions from the listener 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir } 318*cdf0e10cSrcweir } 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir */ 321*cdf0e10cSrcweir MULTIPLEX( XFocusListener, focusGained, FocusEvent, aEvent ) 322*cdf0e10cSrcweir } 323*cdf0e10cSrcweir 324*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 325*cdf0e10cSrcweir // XFcousListener 326*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::focusLost(const FocusEvent& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 329*cdf0e10cSrcweir { 330*cdf0e10cSrcweir MULTIPLEX( XFocusListener, focusLost, FocusEvent, aEvent ) 331*cdf0e10cSrcweir } 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 334*cdf0e10cSrcweir // XWindowListener 335*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 336*cdf0e10cSrcweir 337*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowResized(const WindowEvent& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir MULTIPLEX( XWindowListener, windowResized, WindowEvent, aEvent ) 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 343*cdf0e10cSrcweir // XWindowListener 344*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 345*cdf0e10cSrcweir 346*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowMoved(const WindowEvent& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 347*cdf0e10cSrcweir { 348*cdf0e10cSrcweir MULTIPLEX( XWindowListener, windowMoved, WindowEvent, aEvent ) 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir 351*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 352*cdf0e10cSrcweir // XWindowListener 353*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 354*cdf0e10cSrcweir 355*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowShown(const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 356*cdf0e10cSrcweir { 357*cdf0e10cSrcweir MULTIPLEX( XWindowListener, windowShown, EventObject, aEvent ) 358*cdf0e10cSrcweir } 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 361*cdf0e10cSrcweir // XWindowListener 362*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowHidden(const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir MULTIPLEX( XWindowListener, windowHidden, EventObject, aEvent ) 367*cdf0e10cSrcweir } 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 370*cdf0e10cSrcweir // XKeyListener 371*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::keyPressed(const KeyEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir MULTIPLEX( XKeyListener, keyPressed, KeyEvent, aEvent ) 376*cdf0e10cSrcweir } 377*cdf0e10cSrcweir 378*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 379*cdf0e10cSrcweir // XKeyListener 380*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 381*cdf0e10cSrcweir 382*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::keyReleased(const KeyEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 383*cdf0e10cSrcweir { 384*cdf0e10cSrcweir MULTIPLEX( XKeyListener, keyReleased, KeyEvent, aEvent ) 385*cdf0e10cSrcweir } 386*cdf0e10cSrcweir 387*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 388*cdf0e10cSrcweir // XMouseListener 389*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 390*cdf0e10cSrcweir 391*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::mousePressed(const MouseEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir MULTIPLEX( XMouseListener, mousePressed, MouseEvent, aEvent ) 394*cdf0e10cSrcweir } 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 397*cdf0e10cSrcweir // XMouseListener 398*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 399*cdf0e10cSrcweir 400*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::mouseReleased(const MouseEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 401*cdf0e10cSrcweir { 402*cdf0e10cSrcweir MULTIPLEX( XMouseListener, mouseReleased, MouseEvent, aEvent ) 403*cdf0e10cSrcweir } 404*cdf0e10cSrcweir 405*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 406*cdf0e10cSrcweir // XMouseListener 407*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::mouseEntered(const MouseEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 410*cdf0e10cSrcweir { 411*cdf0e10cSrcweir MULTIPLEX( XMouseListener, mouseEntered, MouseEvent, aEvent ) 412*cdf0e10cSrcweir } 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 415*cdf0e10cSrcweir // XMouseListener 416*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::mouseExited(const MouseEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 419*cdf0e10cSrcweir { 420*cdf0e10cSrcweir MULTIPLEX( XMouseListener, mouseExited, MouseEvent, aEvent ) 421*cdf0e10cSrcweir } 422*cdf0e10cSrcweir 423*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 424*cdf0e10cSrcweir // XMouseMotionListener 425*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 426*cdf0e10cSrcweir 427*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::mouseDragged(const MouseEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 428*cdf0e10cSrcweir { 429*cdf0e10cSrcweir MULTIPLEX( XMouseMotionListener, mouseDragged, MouseEvent, aEvent ) 430*cdf0e10cSrcweir } 431*cdf0e10cSrcweir 432*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 433*cdf0e10cSrcweir // XMouseMotionListener 434*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::mouseMoved(const MouseEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 437*cdf0e10cSrcweir { 438*cdf0e10cSrcweir MULTIPLEX( XMouseMotionListener, mouseMoved, MouseEvent, aEvent ) 439*cdf0e10cSrcweir } 440*cdf0e10cSrcweir 441*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 442*cdf0e10cSrcweir // XPaintListener 443*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 444*cdf0e10cSrcweir 445*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowPaint(const PaintEvent& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 446*cdf0e10cSrcweir { 447*cdf0e10cSrcweir MULTIPLEX( XPaintListener, windowPaint, PaintEvent, aEvent ) 448*cdf0e10cSrcweir } 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 451*cdf0e10cSrcweir // XTopWindowListener 452*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowOpened(const EventObject& aEvent) throw( UNO3_RUNTIMEEXCEPTION ) 455*cdf0e10cSrcweir { 456*cdf0e10cSrcweir MULTIPLEX( XTopWindowListener, windowOpened, EventObject, aEvent ) 457*cdf0e10cSrcweir } 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 460*cdf0e10cSrcweir // XTopWindowListener 461*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowClosing( const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir MULTIPLEX( XTopWindowListener, windowClosing, EventObject, aEvent ) 466*cdf0e10cSrcweir } 467*cdf0e10cSrcweir 468*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 469*cdf0e10cSrcweir // XTopWindowListener 470*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 471*cdf0e10cSrcweir 472*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowClosed( const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 473*cdf0e10cSrcweir { 474*cdf0e10cSrcweir MULTIPLEX( XTopWindowListener, windowClosed, EventObject, aEvent ) 475*cdf0e10cSrcweir } 476*cdf0e10cSrcweir 477*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 478*cdf0e10cSrcweir // XTopWindowListener 479*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 480*cdf0e10cSrcweir 481*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowMinimized( const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 482*cdf0e10cSrcweir { 483*cdf0e10cSrcweir MULTIPLEX( XTopWindowListener, windowMinimized, EventObject, aEvent ) 484*cdf0e10cSrcweir } 485*cdf0e10cSrcweir 486*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 487*cdf0e10cSrcweir // XTopWindowListener 488*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 489*cdf0e10cSrcweir 490*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowNormalized( const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 491*cdf0e10cSrcweir { 492*cdf0e10cSrcweir MULTIPLEX( XTopWindowListener, windowNormalized, EventObject, aEvent ) 493*cdf0e10cSrcweir } 494*cdf0e10cSrcweir 495*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 496*cdf0e10cSrcweir // XTopWindowListener 497*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowActivated( const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 500*cdf0e10cSrcweir { 501*cdf0e10cSrcweir MULTIPLEX( XTopWindowListener, windowActivated, EventObject, aEvent ) 502*cdf0e10cSrcweir } 503*cdf0e10cSrcweir 504*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 505*cdf0e10cSrcweir // XTopWindowListener 506*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 507*cdf0e10cSrcweir 508*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::windowDeactivated( const EventObject& aEvent ) throw( UNO3_RUNTIMEEXCEPTION ) 509*cdf0e10cSrcweir { 510*cdf0e10cSrcweir MULTIPLEX( XTopWindowListener, windowDeactivated, EventObject, aEvent ) 511*cdf0e10cSrcweir } 512*cdf0e10cSrcweir 513*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 514*cdf0e10cSrcweir // protected method 515*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 516*cdf0e10cSrcweir 517*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::impl_adviseToPeer( const Reference< XWindow >& xPeer , 518*cdf0e10cSrcweir const Type& aType ) 519*cdf0e10cSrcweir { 520*cdf0e10cSrcweir // add a listener to the source (peer) 521*cdf0e10cSrcweir if( aType == ::getCppuType((const Reference< XWindowListener >*)0) ) 522*cdf0e10cSrcweir xPeer->addWindowListener( this ); 523*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XKeyListener >*)0) ) 524*cdf0e10cSrcweir xPeer->addKeyListener( this ); 525*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XFocusListener >*)0) ) 526*cdf0e10cSrcweir xPeer->addFocusListener( this ); 527*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XMouseListener >*)0) ) 528*cdf0e10cSrcweir xPeer->addMouseListener( this ); 529*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XMouseMotionListener >*)0) ) 530*cdf0e10cSrcweir xPeer->addMouseMotionListener( this ); 531*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XPaintListener >*)0) ) 532*cdf0e10cSrcweir xPeer->addPaintListener( this ); 533*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XTopWindowListener >*)0) ) 534*cdf0e10cSrcweir { 535*cdf0e10cSrcweir Reference< XTopWindow > xTop( xPeer, UNO_QUERY ); 536*cdf0e10cSrcweir if( xTop.is() ) 537*cdf0e10cSrcweir xTop->addTopWindowListener( this ); 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir else 540*cdf0e10cSrcweir { 541*cdf0e10cSrcweir VOS_ENSHURE( sal_False, "unknown listener" ); 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir } 544*cdf0e10cSrcweir 545*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 546*cdf0e10cSrcweir // protected method 547*cdf0e10cSrcweir //____________________________________________________________________________________________________________ 548*cdf0e10cSrcweir 549*cdf0e10cSrcweir void OMRCListenerMultiplexerHelper::impl_unadviseFromPeer( const Reference< XWindow >& xPeer , 550*cdf0e10cSrcweir const Type& aType ) 551*cdf0e10cSrcweir { 552*cdf0e10cSrcweir // the last listener is removed, remove the listener from the source (peer) 553*cdf0e10cSrcweir if( aType == ::getCppuType((const Reference< XWindowListener >*)0) ) 554*cdf0e10cSrcweir xPeer->removeWindowListener( this ); 555*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XKeyListener >*)0) ) 556*cdf0e10cSrcweir xPeer->removeKeyListener( this ); 557*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XFocusListener >*)0) ) 558*cdf0e10cSrcweir xPeer->removeFocusListener( this ); 559*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XMouseListener >*)0) ) 560*cdf0e10cSrcweir xPeer->removeMouseListener( this ); 561*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XMouseMotionListener >*)0) ) 562*cdf0e10cSrcweir xPeer->removeMouseMotionListener( this ); 563*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XPaintListener >*)0) ) 564*cdf0e10cSrcweir xPeer->removePaintListener( this ); 565*cdf0e10cSrcweir else if( aType == ::getCppuType((const Reference< XTopWindowListener >*)0) ) 566*cdf0e10cSrcweir { 567*cdf0e10cSrcweir Reference< XTopWindow > xTop( xPeer, UNO_QUERY ); 568*cdf0e10cSrcweir if( xTop.is() ) 569*cdf0e10cSrcweir xTop->removeTopWindowListener( this ); 570*cdf0e10cSrcweir } 571*cdf0e10cSrcweir else 572*cdf0e10cSrcweir { 573*cdf0e10cSrcweir VOS_ENSHURE( sal_False, "unknown listener" ); 574*cdf0e10cSrcweir } 575*cdf0e10cSrcweir } 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir } // namespace unocontrols 578