1 /* NAME:
2 E3Main.h
3
4 DESCRIPTION:
5 Header file for E3Main.c.
6
7 COPYRIGHT:
8 Copyright (c) 1999-2004, Quesa Developers. All rights reserved.
9
10 For the current release of Quesa, please see:
11
12 <http://www.quesa.org/>
13
14 Redistribution and use in source and binary forms, with or without
15 modification, are permitted provided that the following conditions
16 are met:
17
18 o Redistributions of source code must retain the above copyright
19 notice, this list of conditions and the following disclaimer.
20
21 o Redistributions in binary form must reproduce the above
22 copyright notice, this list of conditions and the following
23 disclaimer in the documentation and/or other materials provided
24 with the distribution.
25
26 o Neither the name of Quesa nor the names of its contributors
27 may be used to endorse or promote products derived from this
28 software without specific prior written permission.
29
30 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
34 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
36 TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
37 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
38 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
39 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
40 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41 ___________________________________________________________________________
42 */
43 #ifndef E3MAIN_HDR
44 #define E3MAIN_HDR
45 //=============================================================================
46 // Include files
47 //-----------------------------------------------------------------------------
48 // Include files go here
49
50 #include <new>
51
52
53 #include "E3Memory.h"
54
55
56 //=============================================================================
57 // C++ preamble
58 //-----------------------------------------------------------------------------
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62
63
64
65
66 //=============================================================================
67 // Constants
68 //-----------------------------------------------------------------------------
69 enum
70 {
71 kQ3XMethodTypeNewObjectClass = Q3_METHOD_TYPE('n', 'e', 'w', 'c')
72 };
73
74
75 //=============================================================================
76 // Macros
77 //-----------------------------------------------------------------------------
78
79 #define Q3_CLASS_ENUMS(_type, _class, _parentClass) \
80 public : \
81 enum \
82 { \
83 eClassDepth = _parentClass::eClassDepth + 1 , \
84 eClassType = _type , \
85 eParentType = _parentClass::eClassType \
86 } ; \
87 private :
88
89
90
91 #define Q3_CLASS_INFO_IS_CLASS(_classInfo, _class) ((_classInfo)->IsClass ( _class::eClassType, _class::eClassDepth ))
92 #define Q3_OBJECT_IS_CLASS(_object, _class) ((_object)->IsClass ( _class::eClassType, _class::eClassDepth ))
93
94
95 #define Q3_REGISTER_CLASS(_Name, _metaHandler, _instanceClass ) \
96 E3ClassTree::RegisterClass ( _instanceClass::eParentType, \
97 _instanceClass::eClassType, \
98 _Name, \
99 _metaHandler, \
100 sizeof ( _instanceClass ) \
101 )
102
103 //=============================================================================
104 // Types
105 //-----------------------------------------------------------------------------
106
107
108
109 class E3Root : public E3ClassInfo
110 {
111 const TQ3XObjectDisposeMethod disposeMethod ;
112 const TQ3XObjectNewMethod newMethod ;
113 const TQ3XObjectDeleteMethod deleteMethod ;
114 const TQ3XObjectDuplicateMethod duplicateMethod ;
115
116 public :
117
118 const TQ3XObjectSubmitMethod submitRenderMethod ; // Used in attributes and geometry so must be at this level
119 const TQ3XObjectSubmitMethod submitPickMethod ; // Used in attributes and geometry so must be at this level
120 const TQ3XObjectSubmitMethod submitBoundsMethod ; // Used in attributes and geometry so must be at this level
121 const TQ3XObjectSubmitMethod submitWriteMethod ; // Used in elements and shared so must be at this level
122
123
124 E3Root (
125 TQ3XMetaHandler newClassMetaHandler,
126 E3ClassInfo* newParent
127 ) ; // constructor
128
129 friend struct OpaqueTQ3Object ;
130 } ;
131
132
133
134 class E3SharedInfo : public E3Root
135 {
136 /* TQ3XObjectDisposeMethod disposeMethod ;
137 TQ3XObjectNewMethod newMethod ;
138 TQ3XObjectDeleteMethod deleteMethod ;
139 TQ3XObjectDuplicateMethod duplicateMethod ;*/
140
141 public :
142
143 E3SharedInfo (
144 TQ3XMetaHandler newClassMetaHandler,
145 E3ClassInfo* newParent
146 ) ; // constructor
147 } ;
148
149
150
151
152 class E3ShapeInfo : public E3SharedInfo
153 {
154 /* TQ3XObjectDisposeMethod disposeMethod ;
155 TQ3XObjectNewMethod newMethod ;
156 TQ3XObjectDeleteMethod deleteMethod ;
157 TQ3XObjectDuplicateMethod duplicateMethod ;*/
158
159 public :
160
161 E3ShapeInfo (
162 TQ3XMetaHandler newClassMetaHandler,
163 E3ClassInfo* newParent
164 ) ; // constructor
165 } ;
166
167
168
169
170 // root object data
171 struct OpaqueTQ3Object
172 {
173 enum
174 {
175 eClassDepth = 0 ,
176 eClassType = kQ3ObjectTypeRoot
177 } ;
178 private :
179
180 TQ3ObjectType quesaTag ;
181 E3ClassInfoPtr theClass ;
182 TQ3SetObject theSet ;
183
184 #if Q3_DEBUG
185 TQ3Object prev ;
186 TQ3Object next ;
187 struct TQ3StackCrawlRec* stackCrawl ;
188 friend TQ3Status E3Memory_ForgetRecording ( void ) ;
189 friend TQ3Uns32 E3Memory_CountRecords ( void ) ;
190 friend TQ3Object E3Memory_NextRecordedObject ( TQ3Object inObject ) ;
191 friend TQ3Status E3Memory_DumpRecording ( const char* fileName, const char* memo ) ;
192 #endif
193
194
195 // Private methods :
196
197 void Verify () ;
198 TQ3Status InitialiseInstanceData ( E3ClassInfoPtr theClass ,
199 TQ3Boolean sharedParams ,
200 const void *paramData ) ;
201 void DeleteInstanceData ( E3ClassInfoPtr theClass ) ;
202 TQ3Status DuplicateInstanceData ( TQ3Object newObject ,
203 E3ClassInfoPtr theClass ) ;
204
205
206
207 public :
208
209
210 TQ3Status Dispose ( void ) ;
211 void DestroyInstance ( void ) ;
212 TQ3Object DuplicateInstance ( void ) ;
213 void* FindLeafInstanceData ( void ) ;
214 TQ3ObjectType GetObjectType ( TQ3ObjectType baseType ) ;
GetLeafTypeOpaqueTQ3Object215 TQ3ObjectType GetLeafType ( void ) { return GetClass ()->GetType () ; }
216 TQ3Object GetLeafObject ( void ) ;
IsObjectValidOpaqueTQ3Object217 TQ3Boolean IsObjectValid ( void ) { return (TQ3Boolean) ( quesaTag == kQ3ObjectTypeQuesa ) ; }
IsClassOpaqueTQ3Object218 TQ3Boolean IsClass ( TQ3ObjectType queryClass, TQ3Int32 queryDepth )
219 { return (TQ3Boolean) ( theClass->ownAndParentTypes [ queryDepth ] == queryClass ) ; }
220
221
222 // Locate a class
223 E3ClassInfoPtr GetClass ( void ) ;
224 TQ3XFunctionPointer GetMethod ( TQ3XMethodType methodType ) ;
225
226
227
228 TQ3Status AddElement ( TQ3ElementType theType, const void *theData ) ;
229 TQ3Status GetElement ( TQ3ElementType theType, void *theData ) ;
230 TQ3Boolean ContainsElement ( TQ3ElementType theType ) ;
231 TQ3Status GetNextElementType ( TQ3ElementType *theType ) ;
232 TQ3Status EmptyElements ( void ) ;
233 TQ3Status ClearElement ( TQ3ElementType theType ) ;
234 TQ3Status GetSet ( TQ3SetObject *set ) ;
235 TQ3Status SetSet ( TQ3SetObject set ) ;
236 TQ3Status SubmitElements ( TQ3ViewObject inView ) ;
237
238
239 friend class E3ClassTree ;
240 friend class E3ClassInfo ;
241 friend TQ3Status e3root_new ( TQ3Object theObject, void *privateData, void *paramData ) ;
242 friend TQ3Status e3root_duplicate ( TQ3Object fromObject, const void *fromPrivateData, TQ3Object toObject, void *toPrivateData) ;
243 friend void e3root_delete ( TQ3Object theObject, void *privateData ) ;
244 } ;
245
246
247
248 // Shared object data
249 class E3Shared : public OpaqueTQ3Object
250 {
251 Q3_CLASS_ENUMS ( kQ3ObjectTypeShared, E3Shared, OpaqueTQ3Object )
252 TQ3Uns32 refCount;
253 TQ3Uns32 editIndex;
254
255 friend TQ3Status e3shared_new ( E3Shared* theObject, void *privateData, void *paramData ) ;
256 friend void e3shared_dispose ( E3Shared* theObject ) ;
257 friend TQ3Status e3shared_duplicate ( TQ3Object fromObject,
258 const void *fromPrivateData,
259 TQ3Object toObject,
260 void *toPrivateData ) ;
261
262 public :
263
264
265 E3Shared* GetReference ( void ) ;
266 TQ3Boolean IsReferenced ( void ) ;
267 TQ3Uns32 GetReferenceCount ( void ) ;
268 TQ3Uns32 GetEditIndex ( void ) ;
269 TQ3Status Edited ( void ) ;
270 } ;
271
272
273
274 class E3Shape : public E3Shared
275 {
276 Q3_CLASS_ENUMS ( kQ3SharedTypeShape, E3Shape, E3Shared )
277 // Currently empty
278 } ;
279
280
281
282
283
284 //=============================================================================
285 // Function prototypes
286 //-----------------------------------------------------------------------------
287 TQ3Status E3Initialize(void);
288 TQ3Status E3Exit(void);
289 TQ3Boolean E3IsInitialized(void);
290 TQ3Status E3GetVersion(TQ3Uns32 *majorRevision, TQ3Uns32 *minorRevision);
291 TQ3Status E3GetReleaseVersion(TQ3Uns32 *releaseRevision);
292
293 TQ3Status E3ObjectHierarchy_GetTypeFromString(const TQ3ObjectClassNameString objectClassString, TQ3ObjectType *objectClassType);
294 TQ3Status E3ObjectHierarchy_GetStringFromType(TQ3ObjectType objectClassType, TQ3ObjectClassNameString objectClassString);
295 TQ3Boolean E3ObjectHierarchy_IsTypeRegistered(TQ3ObjectType objectClassType);
296 TQ3Boolean E3ObjectHierarchy_IsNameRegistered(const char *objectClassName);
297 TQ3Status E3ObjectHierarchy_GetSubClassData(TQ3ObjectType objectClassType, TQ3SubClassData *subClassData);
298 TQ3Status E3ObjectHierarchy_EmptySubClassData(TQ3SubClassData *subClassData);
299
300 TQ3Status E3Object_CleanDispose(TQ3Object *object);
301 TQ3Object E3Object_Duplicate(TQ3Object theObject);
302 TQ3Status E3Object_Submit(TQ3Object theObject, TQ3ViewObject theView);
303 TQ3Boolean E3Object_IsDrawable(TQ3Object theObject);
304 TQ3Boolean E3Object_IsWritable(TQ3Object theObject, TQ3FileObject theFile);
305 TQ3ObjectType E3Object_GetType(TQ3Object theObject);
306 TQ3Boolean E3Object_IsType(TQ3Object theObject, TQ3ObjectType theType);
307
308 TQ3Boolean E3Shared_IsOfMyClass ( TQ3Object object ) ;
309 TQ3ObjectType E3Shared_GetType(TQ3SharedObject sharedObject);
E3Shared_Edited(TQ3SharedObject sharedObject)310 inline TQ3Status E3Shared_Edited ( TQ3SharedObject sharedObject )
311 { return ( (E3Shared*) sharedObject )->Edited () ; }
312
313 TQ3Boolean E3Shape_IsOfMyClass ( TQ3Object object ) ;
314 TQ3ObjectType E3Shape_GetType(TQ3ShapeObject theShape);
315 TQ3Status E3Shape_GetSet(TQ3ShapeObject theShape, TQ3SetObject *theSet);
316 TQ3Status E3Shape_SetSet(TQ3ShapeObject theShape, TQ3SetObject theSet);
E3Shape_SubmitElements(TQ3ShapeObject inShape,TQ3ViewObject inView)317 inline TQ3Status E3Shape_SubmitElements( TQ3ShapeObject inShape, TQ3ViewObject inView )
318 { return inShape->SubmitElements ( inView ) ; }
319
320 TQ3Status E3Bitmap_Empty(TQ3Bitmap *theBitmap);
321 TQ3Uns32 E3Bitmap_GetImageSize(TQ3Uns32 theWidth, TQ3Uns32 theHeight);
322 TQ3Boolean E3Bitmap_GetBit(const TQ3Bitmap *theBitmap, TQ3Uns32 x, TQ3Uns32 y);
323 TQ3Status E3Bitmap_SetBit(TQ3Bitmap *theBitmap, TQ3Uns32 x, TQ3Uns32 y, TQ3Boolean theState);
324
325
326
327
328
329 //=============================================================================
330 // C++ postamble
331 //-----------------------------------------------------------------------------
332 #ifdef __cplusplus
333 }
334 #endif
335
336 #endif
337
338