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
10*0b4ced1dSAndrew Rist  *
11*0b4ced1dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*0b4ced1dSAndrew Rist  *
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.
19*0b4ced1dSAndrew Rist  *
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