xref: /trunk/main/idl/inc/basobj.hxx (revision 67e470da)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _BASOBJ_HXX
25 #define _BASOBJ_HXX
26 
27 #include <tools/ref.hxx>
28 #include <bastype.hxx>
29 #include <tools/pstm.hxx>
30 
31 class SvTokenStream;
32 class SvMetaObject;
33 class SvAttributeList;
34 class SvIdlDataBase;
35 
36 typedef SvMetaObject * (*CreateMetaObjectType)();
37 #define IDL_WRITE_COMPILER  0x8000
38 #define IDL_WRITE_BROWSER   0x4000
39 #define IDL_WRITE_CALLING   0x2000
40 #define IDL_WRITE_MASK      0xE000
41 
42 #define C_PREF	"C_"
43 
44 enum WriteType
45 {
46 	WRITE_IDL, WRITE_ODL, WRITE_SLOTMAP, WRITE_C_HEADER, WRITE_C_SOURCE,
47 	WRITE_CXX_HEADER, WRITE_CXX_SOURCE, WRITE_DOCU
48 };
49 
50 enum
51 {
52 	WA_METHOD = 0x1,	WA_VARIABLE = 0x2,	WA_ARGUMENT = 0x4,
53 	WA_STRUCT = 0x8,	WA_READONLY = 0x10
54 };
55 typedef int WriteAttribute;
56 
57 /******************** Meta Factory **************************************/
58 #ifdef IDL_COMPILER
59 
60 #define PRV_SV_DECL_META_FACTORY( Class )                               \
61     static SvAttributeList * pAttribList;                               \
62     static SvMetaObject * Create() { return new Class; }                \
63     static const char *   GetClassName() { return #Class; }
64 
65 #define PRV_SV_IMPL_META_FACTORY( Class )                               \
66     SvAttributeList * Class::pAttribList = NULL;
67 
68 #else
69 
70 #define PRV_SV_DECL_META_FACTORY( Class )
71 
72 #define PRV_SV_IMPL_META_FACTORY( Class )
73 
74 #endif // IDL_COMPILER
75 
76 #define SV_DECL_META_FACTORY( Class, CLASS_ID )                         \
77     SV_DECL_PERSIST( Class, CLASS_ID )                                  \
78     PRV_SV_DECL_META_FACTORY( Class )
79 
80 
81 #define SV_DECL_META_FACTORY1( Class, Super1, CLASS_ID )                \
82     SV_DECL_PERSIST1( Class, Super1, CLASS_ID )                         \
83     PRV_SV_DECL_META_FACTORY( Class )
84 
85 #define SV_IMPL_META_FACTORY( Class )                                   \
86     PRV_SV_IMPL_META_FACTORY( Class )                                   \
87     SV_IMPL_PERSIST( Class )
88 
89 
90 #define SV_IMPL_META_FACTORY1( Class, Super1 )                          \
91     PRV_SV_IMPL_META_FACTORY( Class )                                   \
92     SV_IMPL_PERSIST1( Class, Super1 )
93 
94 
95 /******************** class SvMetaObject ********************************/
96 class SvMetaObject : public SvPersistBase
97 {
98 public:
99             SV_DECL_META_FACTORY1( SvMetaObject, SvPersistBase, 14 )
100             SvMetaObject();
101 
102 #ifdef IDL_COMPILER
103     static void			WriteTab( SvStream & rOutStm, sal_uInt16 nTab );
104 	static sal_Bool			TestAndSeekSpaceOnly( SvStream &, sal_uLong nBegPos );
105 	static void			Back2Delemitter( SvStream & );
106 	static void 		WriteStars( SvStream & );
107 
108     virtual sal_Bool        ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
109     virtual void        WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab );
110 
111     virtual void        Write( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab,
112 	 						   WriteType, WriteAttribute = 0 );
113 
114     virtual void        WriteCxx( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab );
115     virtual void        WriteHxx( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab );
116 #endif
117 };
118 SV_DECL_IMPL_REF(SvMetaObject)
119 //SV_DECL_IMPL_PERSIST_LIST(SvMetaObject,SvMetaObject *)
120 SV_DECL_PERSIST_LIST(SvMetaObject,SvMetaObject *)
121 SV_IMPL_PERSIST_LIST(SvMetaObject,SvMetaObject *)
122 
123 
124 class SvMetaObjectMemberStack
125 {
126     SvMetaObjectMemberList aList;
127 public:
SvMetaObjectMemberStack()128             SvMetaObjectMemberStack() {;}
129 
Push(SvMetaObject * pObj)130     void            Push( SvMetaObject * pObj )
131                     { aList.Insert( pObj, LIST_APPEND ); }
Pop()132     SvMetaObject *  Pop() { return aList.Remove( aList.Count() -1 ); }
Top() const133     SvMetaObject *  Top() const { return aList.GetObject( aList.Count() -1 ); }
Clear()134     void            Clear() { aList.Clear(); }
Count() const135     sal_uLong     Count() const { return aList.Count(); }
136 
Get(TypeId nType)137     SvMetaObject *  Get( TypeId nType )
138                     {
139                         SvMetaObject * pObj = aList.Last();
140                         while( pObj )
141                         {
142                             if( pObj->IsA( nType ) )
143                                 return pObj;
144                             pObj = aList.Prev();
145                         }
146                         return NULL;
147                     }
148 };
149 
150 /******************** class SvMetaName **********************************/
151 class SvMetaName : public SvMetaObject
152 {
153     SvString      aName;
154     SvHelpContext aHelpContext;
155     SvHelpText    aHelpText;
156     SvString      aConfigName;
157     SvString      aDescription;
158 
159 protected:
160 #ifdef IDL_COMPILER
161     virtual sal_Bool ReadNameSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
162     		void DoReadContextSvIdl( SvIdlDataBase &, SvTokenStream & rInStm,
163 									 char c = '\0' );
164     virtual void ReadContextSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
165     virtual void WriteContextSvIdl( SvIdlDataBase & rBase,
166                                     SvStream & rOutStm, sal_uInt16 nTab );
167     virtual void ReadAttributesSvIdl( SvIdlDataBase & rBase,
168                                       SvTokenStream & rInStm );
169     virtual void WriteAttributesSvIdl( SvIdlDataBase & rBase,
170                                        SvStream & rOutStm, sal_uInt16 nTab );
171     virtual void WriteAttributes( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab,
172 	 						   		WriteType, WriteAttribute = 0);
173     virtual void WriteContext( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab,
174 	 						   		WriteType, WriteAttribute = 0);
175 #endif
176 public:
177             SV_DECL_META_FACTORY1( SvMetaName, SvMetaObject, 15 )
178             SvMetaName();
179 
180     virtual sal_Bool        		SetName( const ByteString & rName, SvIdlDataBase * = NULL  );
SetDescription(const ByteString & rText)181     void        				SetDescription( const ByteString& rText )
182 								{ aDescription = rText; }
GetHelpContext() const183     const SvHelpContext& 		GetHelpContext() const { return aHelpContext; }
GetName() const184     virtual const SvString &    GetName() const { return aName; }
GetHelpText() const185     virtual const SvString &    GetHelpText() const { return aHelpText; }
GetConfigName() const186     virtual const SvString &	GetConfigName() const{ return aConfigName; }
GetDescription() const187     virtual const SvString&     GetDescription() const{ return aDescription; }
188 
189 #ifdef IDL_COMPILER
190 	virtual sal_Bool 		Test( SvIdlDataBase &, SvTokenStream & rInStm );
191     virtual sal_Bool        ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
192     virtual void        WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab );
193     virtual void        Write( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab,
194 	 						  		WriteType, WriteAttribute = 0);
195 	void				WriteDescription( SvStream& rOutStm );
196 #endif
197 };
198 SV_DECL_IMPL_REF(SvMetaName)
199 SV_DECL_IMPL_PERSIST_LIST(SvMetaName,SvMetaName *)
200 
201 
202 /******************** class SvMetaReference *****************************/
203 SV_DECL_REF(SvMetaReference)
204 class SvMetaReference : public SvMetaName
205 {
206 protected:
207     SvMetaReferenceRef  aRef;
208 public:
209             SV_DECL_META_FACTORY1( SvMetaReference, SvMetaName, 17 )
210             SvMetaReference();
211 
GetName() const212     const SvString &    GetName() const
213                         {
214 							return ( !aRef.Is()
215 									|| SvMetaName::GetName().Len() )
216 								? SvMetaName::GetName()
217 								: aRef->GetName();
218                         }
219 
GetHelpText() const220     const SvString &    GetHelpText() const
221 						{
222 							return ( !aRef.Is()
223 									|| SvMetaName::GetHelpText().Len() )
224 								? SvMetaName::GetHelpText()
225 								: aRef->GetHelpText();
226 						}
227 
GetConfigName() const228     const SvString &    GetConfigName() const
229 						{
230 							return ( !aRef.Is()
231 									|| SvMetaName::GetConfigName().Len() )
232 								? SvMetaName::GetConfigName()
233 								: aRef->GetConfigName();
234 						}
235 
GetDescription() const236     const SvString &    GetDescription() const
237 						{
238 							return ( !aRef.Is()
239 									|| SvMetaName::GetDescription().Len() )
240 								? SvMetaName::GetDescription()
241 								: aRef->GetDescription();
242 						}
GetRef() const243     SvMetaReference *   GetRef() const { return aRef; }
SetRef(SvMetaReference * pRef)244     void                SetRef( SvMetaReference * pRef  )
245                         { aRef = pRef; }
246 };
247 SV_IMPL_REF(SvMetaReference)
248 SV_DECL_IMPL_PERSIST_LIST(SvMetaReference,SvMetaReference *)
249 
250 
251 /******************** class SvMetaExtern *********************************/
252 class SvMetaModule;
253 class SvMetaExtern : public SvMetaReference
254 {
255     SvMetaModule *          pModule;    // in welchem Modul enthalten
256 
257     SvUUId                  aUUId;
258     SvVersion               aVersion;
259 	sal_Bool					bReadUUId;
260 	sal_Bool					bReadVersion;
261 public:
262                         SV_DECL_META_FACTORY1( SvMetaExtern, SvMetaName, 16 )
263                         SvMetaExtern();
264 
265     SvMetaModule *      GetModule() const;
266 
267     const SvGlobalName &GetUUId() const;
GetVersion() const268     const SvVersion &   GetVersion() const { return aVersion; }
269 #ifdef IDL_COMPILER
270     void				SetModule( SvIdlDataBase & rBase );
271     virtual sal_Bool        ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
272     virtual void        WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab );
273 
274     virtual void        Write( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab,
275 	 						 	WriteType, WriteAttribute = 0);
276 protected:
277 	virtual void        ReadAttributesSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
278     virtual void        WriteAttributesSvIdl( SvIdlDataBase & rBase,
279                                               SvStream & rOutStm, sal_uInt16 nTab );
280     virtual void        WriteAttributes( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab,
281 			 						 	WriteType, WriteAttribute = 0);
282 #endif
283 };
284 SV_DECL_IMPL_REF(SvMetaExtern)
285 SV_DECL_IMPL_PERSIST_LIST(SvMetaExtern,SvMetaExtern *)
286 
287 
288 #endif // _BASOBJ_HXX
289 
290 
291