1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _OCONNECTIONPOINTHELPER_HXX
29 #define _OCONNECTIONPOINTHELPER_HXX
30 
31 //______________________________________________________________________________________________________________
32 //	includes of other projects
33 //______________________________________________________________________________________________________________
34 
35 #include <com/sun/star/lang/XConnectionPointContainer.hpp>
36 #include <com/sun/star/lang/XConnectionPoint.hpp>
37 #include <cppuhelper/weak.hxx>
38 #include <cppuhelper/propshlp.hxx>
39 
40 //______________________________________________________________________________________________________________
41 //	includes of my own project
42 //______________________________________________________________________________________________________________
43 #include "OConnectionPointContainerHelper.hxx"
44 
45 //______________________________________________________________________________________________________________
46 //	namespaces
47 //______________________________________________________________________________________________________________
48 
49 namespace unocontrols{
50 
51 #define	UNO3_ANY										::com::sun::star::uno::Any
52 #define	UNO3_SEQUENCE									::com::sun::star::uno::Sequence
53 #define	UNO3_TYPE										::com::sun::star::uno::Type
54 #define	UNO3_REFERENCE									::com::sun::star::uno::Reference
55 #define	UNO3_XCONNECTIONPOINTCONTAINER					::com::sun::star::lang::XConnectionPointContainer
56 #define	UNO3_XCONNECTIONPOINT							::com::sun::star::lang::XConnectionPoint
57 #define	UNO3_MUTEX										::osl::Mutex
58 #define	UNO3_RUNTIMEEXCEPTION							::com::sun::star::uno::RuntimeException
59 #define	UNO3_XINTERFACE									::com::sun::star::uno::XInterface
60 #define	UNO3_OMULTITYPEINTERFACECONTAINERHELPER			::cppu::OMultiTypeInterfaceContainerHelper
61 #define	UNO3_LISTENEREXISTEXCEPTION						::com::sun::star::lang::ListenerExistException
62 #define	UNO3_INVALIDLISTENEREXCEPTION					::com::sun::star::lang::InvalidListenerException
63 #define	UNO3_WEAKREFERENCE								::com::sun::star::uno::WeakReference
64 #define	UNO3_OWEAKOBJECT								::cppu::OWeakObject
65 #define	UNO3_OCONNECTIONPOINTCONTAINERHELPER			OConnectionPointContainerHelper
66 
67 //______________________________________________________________________________________________________________
68 //	defines
69 //______________________________________________________________________________________________________________
70 
71 //______________________________________________________________________________________________________________
72 //	class declaration OConnectionPointHelper
73 //______________________________________________________________________________________________________________
74 
75 class OConnectionPointHelper	:	public	UNO3_XCONNECTIONPOINT
76 								,	public	UNO3_OWEAKOBJECT
77 {
78 
79 //______________________________________________________________________________________________________________
80 //	public methods
81 //______________________________________________________________________________________________________________
82 
83 public:
84 
85 	//__________________________________________________________________________________________________________
86 	//	construct/destruct
87 	//__________________________________________________________________________________________________________
88 
89 	/**_________________________________________________________________________________________________________
90 		@short
91 		@descr
92 
93 		@seealso
94 
95 		@param
96 
97 		@return
98 
99 		@onerror
100 	*/
101 
102 	OConnectionPointHelper(	UNO3_MUTEX&				  				aMutex						,
103 							UNO3_OCONNECTIONPOINTCONTAINERHELPER*	pContainerImplementation	,
104 							UNO3_TYPE				  				aType						);
105 
106 	/**_________________________________________________________________________________________________________
107 		@short
108 		@descr
109 
110 		@seealso
111 
112 		@param
113 
114 		@return
115 
116 		@onerror
117 	*/
118 
119 	virtual	~OConnectionPointHelper();
120 
121 	//________________________________________________________________________________________________________
122 	//	XInterface
123 	//________________________________________________________________________________________________________
124 
125 	/**_______________________________________________________________________________________________________
126 		@short		give answer, if interface is supported
127 		@descr		The interfaces are searched by type.
128 
129 		@seealso	XInterface
130 
131 		@param      "rType" is the type of searched interface.
132 
133 		@return		Any		information about found interface
134 
135 		@onerror	A RuntimeException is thrown.
136 	*/
137 
138 	virtual UNO3_ANY SAL_CALL queryInterface( const UNO3_TYPE& aType ) throw( UNO3_RUNTIMEEXCEPTION );
139 
140 	/**_______________________________________________________________________________________________________
141 		@short		increment refcount
142 		@descr		-
143 
144 		@seealso	XInterface
145 		@seealso	release()
146 
147 		@param		-
148 
149 		@return		-
150 
151 		@onerror	A RuntimeException is thrown.
152 	*/
153 
154     virtual void SAL_CALL acquire() throw();
155 
156 	/**_______________________________________________________________________________________________________
157 		@short		decrement refcount
158 		@descr		-
159 
160 		@seealso	XInterface
161 		@seealso	acquire()
162 
163 		@param		-
164 
165 		@return		-
166 
167 		@onerror	A RuntimeException is thrown.
168 	*/
169 
170     virtual void SAL_CALL release() throw();
171 
172 	//__________________________________________________________________________________________________________
173 	//	XConnectionPoint
174 	//__________________________________________________________________________________________________________
175 
176 	/**_________________________________________________________________________________________________________
177 		@short
178 		@descr
179 
180 		@seealso
181 
182 		@param
183 
184 		@return
185 
186 		@onerror
187 	*/
188 
189     virtual UNO3_TYPE SAL_CALL getConnectionType() throw( UNO3_RUNTIMEEXCEPTION );
190 
191 	/**_________________________________________________________________________________________________________
192 		@short
193 		@descr
194 
195 		@seealso
196 
197 		@param
198 
199 		@return
200 
201 		@onerror
202 	*/
203 
204     virtual UNO3_REFERENCE< UNO3_XCONNECTIONPOINTCONTAINER > SAL_CALL getConnectionPointContainer() throw( UNO3_RUNTIMEEXCEPTION );
205 
206 	/**_________________________________________________________________________________________________________
207 		@short
208 		@descr
209 
210 		@seealso
211 
212 		@param
213 
214 		@return
215 
216 		@onerror
217 	*/
218 
219     virtual void SAL_CALL advise( const UNO3_REFERENCE< UNO3_XINTERFACE >& xListener ) throw(	UNO3_LISTENEREXISTEXCEPTION		,
220 																								UNO3_INVALIDLISTENEREXCEPTION	,
221 																								UNO3_RUNTIMEEXCEPTION			);
222 
223 	/**_________________________________________________________________________________________________________
224 		@short
225 		@descr
226 
227 		@seealso
228 
229 		@param
230 
231 		@return
232 
233 		@onerror
234 	*/
235 
236     virtual void SAL_CALL unadvise( const UNO3_REFERENCE< UNO3_XINTERFACE >& xListener ) throw( UNO3_RUNTIMEEXCEPTION );
237 
238 	/**_________________________________________________________________________________________________________
239 		@short
240 		@descr
241 
242 		@seealso
243 
244 		@param
245 
246 		@return
247 
248 		@onerror
249 	*/
250 
251     virtual UNO3_SEQUENCE< UNO3_REFERENCE< UNO3_XINTERFACE > > SAL_CALL getConnections() throw( UNO3_RUNTIMEEXCEPTION );
252 
253 //______________________________________________________________________________________________________________
254 //	private methods
255 //______________________________________________________________________________________________________________
256 
257 private:
258 
259 	/**_________________________________________________________________________________________________________
260 		@short
261 		@descr
262 
263 		@seealso
264 
265 		@param
266 
267 		@return
268 
269 		@onerror
270 	*/
271 
272 	sal_Bool impl_LockContainer();
273 
274 	/**_________________________________________________________________________________________________________
275 		@short
276 		@descr
277 
278 		@seealso
279 
280 		@param
281 
282 		@return
283 
284 		@onerror
285 	*/
286 
287 	void impl_UnlockContainer();
288 
289 //______________________________________________________________________________________________________________
290 //	private variables
291 //______________________________________________________________________________________________________________
292 
293 private:
294 
295 	UNO3_MUTEX&												m_aSharedMutex				;
296 	UNO3_WEAKREFERENCE< UNO3_XCONNECTIONPOINTCONTAINER >	m_oContainerWeakReference	;	// Reference to container-class!. Don't use Reference<...>
297 																							// It is a ring-reference => and must be a wekreference!
298 	UNO3_OCONNECTIONPOINTCONTAINERHELPER*					m_pContainerImplementation	;
299 	UNO3_TYPE												m_aInterfaceType			;
300 	UNO3_REFERENCE< UNO3_XINTERFACE >						m_xLock						;
301 
302 };	// class OConnectionPointHelper
303 
304 }	// namespace unocontrols
305 
306 #endif	// #ifndef _OCONNECTIONPOINTHELPER_HXX
307