sync master with lastest vba changes
[ooovba.git] / binfilter / inc / bf_so3 / iface.hxx
blob21251ddc81390080019547a00a3f5a7098d621fa
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: iface.hxx,v $
10 * $Revision: 1.6.6.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _IFACE_HXX
32 #define _IFACE_HXX
34 #ifndef _SFXHINT_HXX //autogen
35 #include <bf_svtools/hint.hxx>
36 #endif
37 #ifndef _GEN_HXX //autogen
38 #include <tools/gen.hxx>
39 #endif
40 #ifndef _SVBORDER_HXX
41 #include <tools/svborder.hxx>
42 #endif
43 #ifndef _SHL_HXX //autogen
44 #include <tools/shl.hxx>
45 #endif
46 #include <bf_so3/factory.hxx>
47 #include <bf_so3/so2dll.hxx>
49 #include <sot/object.hxx>
52 #ifndef INCLUDED_SO3DLLAPI_H
53 #include "bf_so3/so3dllapi.h"
54 #endif
56 struct IUnknown;
58 namespace binfilter {
60 /*************************************************************************
61 *************************************************************************/
62 class SvSoIPCClient;
63 class SvSoIPCService;
65 // Zugriff auf Dlldaten
66 #define SOAPP SoDll::GetOrCreate()
68 /**************************************************************************
69 **************************************************************************/
70 #define SO2_DECL_INTERFACE() \
71 virtual ::IUnknown * GetInterface( const SvGlobalName & ); \
72 ::IUnknown * GetMemberInterface( const SvGlobalName & );\
75 #define SO2_DECL_STANDARD_CLASS_DLL(ClassName,FacName) \
76 SO2_DECL_BASIC_CLASS_DLL(ClassName,FacName) \
77 SO2_DECL_INTERFACE() \
78 SO2_DECL_INVARIANT()
80 #define SO2_DECL_STANDARD_CLASS(ClassName) \
81 SO2_DECL_BASIC_CLASS(ClassName) \
82 SO2_DECL_INTERFACE() \
83 SO2_DECL_INVARIANT()
85 /**************************************************************************
86 **************************************************************************/
87 #define SO2_IMPL_INTERFACE(ClassName) \
88 ::IUnknown * __EXPORT ClassName::GetInterface( const SvGlobalName & rName ) \
89 { \
90 ::IUnknown * p = GetMemberInterface( rName ); \
91 return p; \
92 } \
95 #define SO2_IMPL_CLASS_DLL(ClassName,FactoryName,GlobalName) \
96 SO2_IMPL_BASIC_CLASS_DLL(ClassName,FactoryName,GlobalName) \
97 SO2_IMPL_INTERFACE(ClassName) \
98 SO2_IMPL_INVARIANT(ClassName)
100 #define SO2_IMPL_CLASS(ClassName,FactoryName,GlobalName) \
101 SotFactory * ClassName::pFactory = NULL; \
102 SO2_IMPL_CLASS_DLL(ClassName,FactoryName,GlobalName)
104 /**************************************************************************
105 **************************************************************************/
106 #define SO2_IMPL_INTERFACE1(ClassName,Super1) \
107 ::IUnknown * __EXPORT ClassName::GetInterface( const SvGlobalName & rName ) \
109 ::IUnknown * p = GetMemberInterface( rName ); \
110 if( !p ) \
111 p = Super1::GetInterface( rName ); \
112 return p; \
115 #define SO2_IMPL_CLASS1_DLL(ClassName,FactoryName,Super1,GlobalName) \
116 SO2_IMPL_BASIC_CLASS1_DLL(ClassName,FactoryName,Super1,GlobalName) \
117 SO2_IMPL_INTERFACE1(ClassName,Super1) \
118 SO2_IMPL_INVARIANT1(ClassName,Super1)
120 #define SO2_IMPL_CLASS1(ClassName,FactoryName,Super1,GlobalName) \
121 SotFactory * ClassName::pFactory = NULL; \
122 SO2_IMPL_CLASS1_DLL(ClassName,FactoryName,Super1,GlobalName)
124 #define SO2_IMPL_STANDARD_CLASS1_DLL(ClassName,FactoryName,Super1,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
125 SO2_IMPL_CLASS1_DLL(ClassName,FactoryName,Super1, \
126 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15))
128 #define SO2_IMPL_STANDARD_CLASS1(ClassName,FactoryName,Super1,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
129 SO2_IMPL_CLASS1(ClassName,FactoryName,Super1, \
130 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15))
132 /**************************************************************************
133 **************************************************************************/
134 #define SO2_IMPL_INTERFACE2(ClassName,Super1,Super2) \
135 ::IUnknown * __EXPORT ClassName::GetInterface( const SvGlobalName & rName ) \
137 ::IUnknown * p = GetMemberInterface( rName ); \
138 if( !p ) \
139 p = Super1::GetInterface( rName ); \
140 if( !p ) \
141 p = Super2::GetInterface( rName ); \
142 return p; \
145 #define SO2_IMPL_CLASS2_DLL(ClassName,FactoryName,Super1,Super2,GlobalName) \
146 SO2_IMPL_BASIC_CLASS2_DLL(ClassName,FactoryName,Super1,Super2,GlobalName) \
147 SO2_IMPL_INTERFACE2(ClassName,Super1,Super2) \
148 SO2_IMPL_INVARIANT2(ClassName,Super1,Super2)
150 #define SO2_IMPL_CLASS2(ClassName,FactoryName,Super1,Super2,GlobalName) \
151 SotFactory * ClassName::pFactory = NULL; \
152 SO2_IMPL_CLASS2_DLL(ClassName,FactoryName,Super1,Super2,GlobalName)
154 #define SO2_IMPL_STANDARD_CLASS2(ClassName,FactoryName,Super1,Super2,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
155 SO2_IMPL_CLASS2(ClassName,FactoryName,Super1,Super2, \
156 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15))
158 #define SO2_IMPL_STANDARD_CLASS2_DLL(ClassName,FactoryName,Super1,Super2,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
159 SO2_IMPL_CLASS2_DLL(ClassName,FactoryName,Super1,Super2, \
160 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15))
162 /**************************************************************************
163 **************************************************************************/
164 #define SO2_IMPL_INTERFACE3(ClassName,Super1,Super2,Super3) \
165 ::IUnknown * __EXPORT ClassName::GetInterface( const SvGlobalName & rName ) \
167 ::IUnknown * p = GetMemberInterface( rName ); \
168 if( !p ) \
169 p = Super1::GetInterface( rName ); \
170 if( !p ) \
171 p = Super2::GetInterface( rName ); \
172 if( !p ) \
173 p = Super3::GetInterface( rName ); \
174 return p; \
177 #define SO2_IMPL_CLASS3_DLL(ClassName,FactoryName,Super1,Super2,Super3,GlobalName) \
178 SO2_IMPL_BASIC_CLASS3_DLL(ClassName,FactoryName,Super1,Super2,Super3,GlobalName) \
179 SO2_IMPL_INTERFACE3(ClassName,Super1,Super2,Super3) \
180 SO2_IMPL_INVARIANT3(ClassName,Super1,Super2,Super3)
182 #define SO2_IMPL_CLASS3(ClassName,FactoryName,Super1,Super2,Super3,GlobalName) \
183 SotFactory * ClassName::pFactory = NULL; \
184 SO2_IMPL_CLASS3_DLL(ClassName,FactoryName,Super1,Super2,Super3,GlobalName)
186 #define SO2_IMPL_STANDARD_CLASS3(ClassName,FactoryName,Super1,Super2,Super3,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
187 SO2_IMPL_CLASS3(ClassName,FactoryName,Super1,Super2,Super3, \
188 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15))
190 #define SO2_IMPL_STANDARD_CLASS3_DLL(ClassName,FactoryName,Super1,Super2,Super3,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
191 SO2_IMPL_CLASS3_DLL(ClassName,FactoryName,Super1,Super2,Super3, \
192 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15)
194 /**************************************************************************
195 **************************************************************************/
196 #define SO2_IMPL_INTERFACE4(ClassName,Super1,Super2,Super3,Super4) \
197 ::IUnknown * __EXPORT ClassName::GetInterface( const SvGlobalName & rName ) \
199 ::IUnknown * p = GetMemberInterface( rName ); \
200 if( !p ) \
201 p = Super1::GetInterface( rName ); \
202 if( !p ) \
203 p = Super2::GetInterface( rName ); \
204 if( !p ) \
205 p = Super3::GetInterface( rName ); \
206 if( !p ) \
207 p = Super4::GetInterface( rName ); \
208 return p; \
211 #define SO2_IMPL_CLASS4_DLL(ClassName,FactoryName,Super1,Super2,Super3,Super4,GlobalName ) \
212 SO2_IMPL_BASIC_CLASS4_DLL(ClassName,FactoryName,Super1,Super2,Super3,Super4,GlobalName ) \
213 SO2_IMPL_INTERFACE4(ClassName,Super1,Super2,Super3,Super4) \
214 SO2_IMPL_INVARIANT4(ClassName,Super1,Super2,Super3,Super4)
216 #define SO2_IMPL_CLASS4(ClassName,FactoryName,Super1,Super2,Super3,Super4,GlobalName) \
217 SotFactory * ClassName::pFactory = NULL; \
218 SO2_IMPL_CLASS4_DLL(ClassName,FactoryName,Super1,Super2,Super3,Super4,GlobalName)
220 #define SO2_IMPL_STANDARD_CLASS4(ClassName,FactoryName,Super1,Super2,Super3,Super4,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
221 SO2_IMPL_CLASS4(ClassName,FactoryName,Super1,Super2,Super3,Super4,\
222 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15))
224 #define SO2_IMPL_STANDARD_CLASS4_DLL(ClassName,FactoryName,Super1,Super2,Super3,Super4,n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15) \
225 SO2_IMPL_CLASS4_DLL(ClassName,FactoryName,Super1,Super2,Super3,Super4,\
226 SvGlobalName(n1,n2,n3,b8,b9,b10,b11,b12,b13,b14,b15))
229 //==================class SvObject========================================
230 #ifdef MSC
231 #pragma warning(disable: 4250)
232 #endif
234 class SO3_DLLPUBLIC SvObject : virtual public SotObject
236 friend struct IUnknown;
237 friend class SvSoIPCService;
238 friend class SvSoIPCClient;
239 friend class SvFactory;
241 private:
242 SO3_DLLPRIVATE union
244 ::IUnknown * pObj; // IUnknown Interface
245 SvSoIPCClient * pClient; // Client, falls !Owner()
246 SvSoIPCService * pService; // Service Punkt, falls Owner()
248 USHORT nExtCount; // externer Referenzzaehler
250 #if defined (GCC) && (defined(C281) || defined(C290) || defined(C291))
251 public:
252 #else
253 protected:
254 #endif
255 virtual ~SvObject();
256 SO3_DLLPRIVATE void DeInit( ::IUnknown * );
257 SO3_DLLPRIVATE void DeInit( SvSoIPCService * );
258 SO3_DLLPRIVATE void DeInit( SvSoIPCClient * );
259 virtual void MakeUnknown();
260 public:
261 SvObject();
262 SO2_DECL_STANDARD_CLASS_DLL(SvObject,SOAPP)
263 void Init( SvSoIPCClient * pObj );
264 void OwnerInit( SvSoIPCService * pObj );
265 SvSoIPCService * GetIPCService() const;
266 SvSoIPCClient * GetIPCClient() const;
268 ::IUnknown * DownAggInterface( const SvGlobalName & rName );
269 ::IUnknown * AggInterface( const SvGlobalName & rName );
271 UINT32 ReleaseRef(); // Nur fur DBG_UTIL
272 private:
273 // Kopieren und Zuweisen dieses Objekttyps ist nicht erlaubt
274 SO3_DLLPRIVATE SvObject & operator = ( const SvObject & );
275 SO3_DLLPRIVATE SvObject( const SvObject & );
278 //==================class SvObjectRef======================================
279 #ifndef SO2_DECL_SVOBJECT_DEFINED
280 #define SO2_DECL_SVOBJECT_DEFINED
281 class SO3_DLLPUBLIC SvObjectRef
283 PRV_SV_DECL_REF(SvObject)
285 #endif
286 SO2_IMPL_REF(SvObject)
288 //==================class SvObject*List====================================
289 #if !defined( SO_EXTERN ) || defined( SO2_SVOBJECTLIST )
290 SV_DECL_REF_LIST(SvObject,SvObject*)
291 SV_IMPL_REF_LIST(SvObject,SvObject*)
292 #endif
294 //==================class SvFactory_Impl===================================
295 #if !defined( SO_EXTERN )
296 struct IClassFactory;
297 class SO3_DLLPRIVATE SvFactory_Impl : public SvObject
298 /* [Beschreibung]
302 friend class ImpFactory;
303 friend class SvFactory;
304 private:
305 IClassFactory * pObjI;
306 SvFactory * pFact;
307 public:
308 SO3_DLLPRIVATE SvFactory_Impl();
309 SO3_DLLPRIVATE SvFactory_Impl( SvFactory * );
310 SO3_DLLPRIVATE ~SvFactory_Impl();
312 SO2_DECL_STANDARD_CLASS_DLL( SvFactory_Impl, SOAPP )
314 SO3_DLLPRIVATE IClassFactory * GetClassFactory() const;
316 #endif
318 //=========================================================================
319 #define OLE2_MAPMODE MAP_100TH_MM
321 #if defined (_INC_WINDOWS) || defined (_WINDOWS_)
322 RECT GetSysRect( const Rectangle & rRect );
323 Rectangle GetSvRect( const RECT & rRect );
324 #endif
326 #ifdef DBG_UTIL
327 ByteString SvPrint( const SvBorder & );
328 ByteString SvPrint( const Rectangle & );
329 ByteString SvPrint( const Point & );
330 ByteString SvPrint( const Size & );
331 #endif
333 //=========================================================================
337 #endif // _IFACE_HXX