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