62 static FXuint nmetaClassTable;
63 static FXuint nmetaClasses;
70 bool isSubClassOf(
const FXMetaClass* metaclass)
const;
92 #define FXDECLARE(classname) \
94 struct FXMapEntry { FX::FXSelector keylo; FX::FXSelector keyhi; long (classname::* func)(FX::FXObject*,FX::FXSelector,void*); }; \
95 static const FX::FXMetaClass metaClass; \
96 static FX::FXObject* manufacture(); \
97 virtual long handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr); \
98 virtual const FX::FXMetaClass* getMetaClass() const { return &metaClass; } \
99 friend FX::FXStream& operator<<(FX::FXStream& store,const classname* obj){return store.saveObject((FX::FXObjectPtr)(obj));} \
100 friend FX::FXStream& operator>>(FX::FXStream& store,classname*& obj){return store.loadObject((FX::FXObjectPtr&)(obj));} \
105 #define FXIMPLEMENT(classname,baseclassname,mapping,nmappings) \
106 FX::FXObject* classname::manufacture(){return new classname;} \
107 const FX::FXMetaClass classname::metaClass(#classname,classname::manufacture,&baseclassname::metaClass,mapping,nmappings,sizeof(classname::FXMapEntry)); \
108 long classname::handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr){ \
109 const FXMapEntry* me=(const FXMapEntry*)metaClass.search(sel); \
110 return me ? (this->* me->func)(sender,sel,ptr) : baseclassname::handle(sender,sel,ptr); \
115 #define FXDECLARE_ABSTRACT(classname) \
117 struct FXMapEntry { FX::FXSelector keylo; FX::FXSelector keyhi; long (classname::* func)(FX::FXObject*,FX::FXSelector,void*); }; \
118 static const FX::FXMetaClass metaClass; \
119 virtual long handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr); \
120 virtual const FX::FXMetaClass* getMetaClass() const { return &metaClass; } \
121 friend FX::FXStream& operator<<(FX::FXStream& store,const classname* obj){return store.saveObject((FX::FXObjectPtr)(obj));} \
122 friend FX::FXStream& operator>>(FX::FXStream& store,classname*& obj){return store.loadObject((FX::FXObjectPtr&)(obj));} \
127 #define FXIMPLEMENT_ABSTRACT(classname,baseclassname,mapping,nmappings) \
128 const FX::FXMetaClass classname::metaClass(#classname,NULL,&baseclassname::metaClass,mapping,nmappings,sizeof(classname::FXMapEntry)); \
129 long classname::handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr){ \
130 const FXMapEntry* me=(const FXMapEntry*)metaClass.search(sel); \
131 return me ? (this->* me->func)(sender,sel,ptr) : baseclassname::handle(sender,sel,ptr); \
136 #define FXMETACLASS(classname) (&classname::metaClass)
140 #define FXDEFMAP(classname) static const classname::FXMapEntry
143 #define FXMAPTYPES(typelo,typehi,func) {FXSEL(typelo,FX::MINKEY),FXSEL(typehi,FX::MAXKEY),&func}
146 #define FXMAPTYPE(type,func) {FXSEL(type,FX::MINKEY),FXSEL(type,FX::MAXKEY),&func}
149 #define FXMAPFUNCS(type,keylo,keyhi,func) {FXSEL(type,keylo),FXSEL(type,keyhi),&func}
152 #define FXMAPFUNC(type,key,func) {FXSEL(type,key),FXSEL(type,key),&func}
164 class FXAPI FXObject {
174 const
FXchar* getClassName() const;
177 bool isMemberOf(const
FXMetaClass* metaclass) const;
180 virtual
long tryHandle(FXObject* sender,FXSelector sel,
void* ptr);
183 virtual
void save(
FXStream& store) const;
Definition: FXObject.h:36
char FXchar
Definition: fxdefs.h:387
Definition: FXObject.h:46
unsigned int FXuint
Definition: fxdefs.h:396
Definition: FXObject.h:47
FXuint FXSelector
Association key.
Definition: FXObject.h:53
#define FXAPI
Definition: fxdefs.h:122
FXString name(const FXString &file)
Return name and extension part of the path name.
FXString search(const FXString &pathlist, const FXString &file)
Search path list for this file, return full path name for first occurrence.
A stream is a way to serialize data and objects into a byte stream.
Definition: FXStream.h:99
Definition: FXObject.h:35
Object is the base class for all objects in FOX; in order to receive messages from the user interface...
Definition: FXObject.h:166
#define FXDECLARE(classname)
Macro to set up class declaration.
Definition: FXObject.h:92