00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __FACTTMPL_H__
00022 #define __FACTTMPL_H__
00023
00029 #define CEL_DECLARE_FACTORY(name) \
00030 class celPf##name : public scfImplementation2<celPf##name, \
00031 iCelPropertyClassFactory, iComponent> \
00032 { \
00033 private: \
00034 iObjectRegistry* object_reg; \
00035 \
00036 public: \
00037 celPf##name (iBase* parent) : scfImplementationType (this, parent) { } \
00038 virtual ~celPf##name () { } \
00039 bool Initialize (iObjectRegistry* object_reg); \
00040 virtual const char* GetName() const; \
00041 virtual csPtr<iCelPropertyClass> CreatePropertyClass (const char* name); \
00042 };
00043
00052 #define CEL_IMPLEMENT_FACTORY(name, strname) \
00053 SCF_IMPLEMENT_FACTORY (celPf##name) \
00054 bool celPf##name::Initialize (iObjectRegistry* object_reg) \
00055 { \
00056 celPf##name::object_reg = object_reg; \
00057 csRef<iCelPlLayer> pl = csQueryRegistry<iCelPlLayer> (object_reg); \
00058 if (!pl) return false; \
00059 pl->RegisterPropertyClassFactory(this, 0); \
00060 return true; \
00061 } \
00062 const char* celPf##name::GetName() const \
00063 { \
00064 return strname; \
00065 } \
00066 csPtr<iCelPropertyClass> celPf##name::CreatePropertyClass(const char* name) \
00067 { \
00068 iCelPropertyClass* pc = new celPc##name (object_reg); \
00069 pc->SetName (name); \
00070 return csPtr<iCelPropertyClass> (pc); \
00071 } \
00072
00073
00077 #define CEL_IMPLEMENT_FACTORY_ALT(name, strname, altname) \
00078 SCF_IMPLEMENT_FACTORY (celPf##name) \
00079 bool celPf##name::Initialize (iObjectRegistry* object_reg) \
00080 { \
00081 celPf##name::object_reg = object_reg; \
00082 csRef<iCelPlLayer> pl = csQueryRegistry<iCelPlLayer> (object_reg); \
00083 if (!pl) return false; \
00084 pl->RegisterPropertyClassFactory(this, altname); \
00085 return true; \
00086 } \
00087 const char* celPf##name::GetName() const \
00088 { \
00089 return strname; \
00090 } \
00091 csPtr<iCelPropertyClass> celPf##name::CreatePropertyClass(const char* name) \
00092 { \
00093 iCelPropertyClass* pc = new celPc##name (object_reg); \
00094 pc->SetName (name); \
00095 return csPtr<iCelPropertyClass> (pc); \
00096 } \
00097
00098 #endif