My Project
IAttributeFields.h
1 #pragma once
2 #include "AttributeClassIDTable.h"
3 #include "AttributeField.h"
4 #include "AttributeClass.h"
5 
7 #define Member_Offset(x, cls) (int)&(((cls *)0)->x)
8 
9 #define ATTRIBUTE_DEFINE_CLASS(clsName) \
10  virtual int GetAttributeClassID(){return IAttributeFields::GetAttributeClassID();}\
11  virtual const char* GetAttributeClassName(){ static const char name[] = #clsName; return name; }
12 
16 #define PROPERTY_FIELD(name, cls, member, datatype) \
17  static void Set##name(cls* c, datatype v) {c->member = v;};\
18  static datatype Get##name(cls* c) {return c->member;};
19 
20 #define ATTRIBUTE_METHOD(clsName, name) static HRESULT name(clsName* cls)
21 #define ATTRIBUTE_METHOD1(clsName, name, dataType) static HRESULT name(clsName* cls, dataType p1)
22 #define ATTRIBUTE_METHOD2(clsName, name, dataType) static HRESULT name(clsName* cls, dataType p1,dataType p2)
23 #define ATTRIBUTE_METHOD3(clsName, name, dataType) static HRESULT name(clsName* cls, dataType p1,dataType p2,dataType p3)
24 #define ATTRIBUTE_METHOD4(clsName, name, dataType) static HRESULT name(clsName* cls, dataType p1,dataType p2,dataType p3,dataType p4)
25 
29 #define ATTRIBUTE_SUPPORT_CREATE_FACTORY(classname) \
30  virtual CAttributeClass* CreateAttributeClass(){ \
31  return new CAttributeClassImp<classname>(GetAttributeClassID(), GetAttributeClassName(), GetAttributeClassDescription()); \
32  };\
33  static classname * Create() { \
34  classname * pObj = new classname(); \
35  pObj->AddToAutoReleasePool();\
36  return pObj;\
37  };
38 
39 namespace ParaEngine
40 {
41  class CDynamicAttributesSet;
42  class CDynamicAttributeField;
43 
59  class IAttributeFields : public IObject
60  {
61  public:
63  IAttributeFields(void);
64  virtual ~IAttributeFields(void);
65 
66  public:
68  // implementation of IAttributeFields
69 
71  virtual int GetAttributeClassID();
73  virtual const char* GetAttributeClassName(){ static const char name[] = "IAttributeFields"; return name; }
75  virtual const char* GetAttributeClassDescription(){ static const char desc[] = ""; return desc; }
76 
78  virtual int InstallFields(CAttributeClass* pClass, bool bOverride);
79 
81  virtual int GetChildAttributeColumnCount();
83  virtual int GetChildAttributeObjectCount(int nColumnIndex = 0);
84  virtual IAttributeFields* GetChildAttributeObject(int nRowIndex, int nColumnIndex = 0);
86  virtual IAttributeFields* GetChildAttributeObject(const std::string& sName);
87 
88  ATTRIBUTE_METHOD1(IAttributeFields, GetName_s, const char**) { *p1 = cls->GetIdentifier().c_str(); return S_OK; }
89  ATTRIBUTE_METHOD1(IAttributeFields, SetName_s, const char*) { cls->SetIdentifier(p1); return S_OK; }
90  ATTRIBUTE_METHOD(IAttributeFields, PrintObject_s){ cls->PrintObject(); return S_OK; }
91  ATTRIBUTE_METHOD(IAttributeFields, AddRef_s){ cls->addref(); return S_OK; }
92  ATTRIBUTE_METHOD1(IAttributeFields, GetRefCount_s, int*) { *p1 = cls->GetRefCount(); return S_OK; }
93 
94  ATTRIBUTE_METHOD1(IAttributeFields, SetTime_s, int) { cls->SetTime(p1); return S_OK; }
95  ATTRIBUTE_METHOD1(IAttributeFields, GetTime_s, int*) { *p1 = cls->GetTime(); return S_OK; }
96 
97  ATTRIBUTE_METHOD(IAttributeFields, Release_s){ cls->Release(); return S_OK; }
98  public:
100  //
101  // implementation of the following virtual functions are optional
102  //
104 
105  virtual const std::string& GetIdentifier();
106  virtual void SetIdentifier(const std::string& sID);
107 
109  virtual bool IsModified(){ return false; };
111  virtual void SetModified(bool bModified){};
112 
114  virtual bool ValidateFields(){ return true; };
116  virtual string GetValidationMessage(){ return ""; };
117 
123  virtual bool ResetField(int nFieldID){ return false; };
124 
131  virtual bool InvokeEditor(int nFieldID, const std::string& sParameters){ return false; };
132 
134  virtual bool AddChildAttributeObject(IAttributeFields* pChild, int nRowIndex = -1, int nColumnIndex = 0);
135 
139  virtual void* QueryObjectByName(const std::string& sObjectType);
140 
144  virtual void* QueryObject(int nObjectType);
145 
147  virtual int GetTime();
148  virtual void SetTime(int nTime);
149 
151  //
152  // Dynamic field method
153  //
155 
161  virtual CDynamicAttributeField* GetDynamicField(const std::string& sName);
162 
168  virtual CDynamicAttributeField* GetDynamicField(int nIndex);
169 
171  virtual const char* GetDynamicFieldNameByIndex(int nIndex);
172 
174  virtual int GetDynamicFieldCount();
175 
182  virtual int SetDynamicField(const std::string& sName, const CVariable& value);
183 
185  virtual int AddDynamicField(const std::string& sName, ATTRIBUTE_FIELDTYPE dwType);
186 
188  virtual void RemoveAllDynamicFields();
189 
193  virtual int SaveDynamicFieldsToString(std::string& output);
194 
198  virtual int LoadDynamicFieldsFromString(const std::string& input);
199  public:
204  void PrintObject();
205 
206  static HRESULT GetAttributeClassID_s(IAttributeFields* cls, int* p1) { *p1 = cls->GetAttributeClassID(); return S_OK; }
207  static HRESULT GetAttributeClassName_s(IAttributeFields* cls, const char** p1) { *p1 = cls->GetAttributeClassName(); return S_OK; }
208 
215  static bool OpenWithDefaultEditor(const char* sFilename, bool bWaitOnReturn = false);
216 
217  protected:
220  virtual CDynamicAttributesSet* GetDynamicAttributes(bool bCreateIfNotExist = false);
221  private:
222  CDynamicAttributesSet* m_pDynamicAttributes;
223  };
224 
225 
226 }
virtual void RemoveAllDynamicFields()
remove all dynamic fields
Definition: IAttributeFields.cpp:221
virtual bool ResetField(int nFieldID)
Reset the field to its initial or default value.
Definition: IAttributeFields.h:123
virtual int AddDynamicField(const std::string &sName, ATTRIBUTE_FIELDTYPE dwType)
add dynamic field and return field index
Definition: IAttributeFields.cpp:211
virtual bool ValidateFields()
validate all fields and return true if validation passed.
Definition: IAttributeFields.h:114
an attribute class is a collection of attribute fields.
Definition: AttributeClass.h:10
virtual int LoadDynamicFieldsFromString(const std::string &input)
load only text dynamic fields from string
Definition: IAttributeFields.cpp:87
virtual CAttributeClass * CreateAttributeClass()
initialize fields
Definition: IAttributeFields.cpp:130
virtual int GetChildAttributeObjectCount(int nColumnIndex=0)
get the number of child objects (row count) in the given column.
Definition: IAttributeFields.cpp:245
virtual void * QueryObjectByName(const std::string &sObjectType)
convert to object of a given type.
Definition: IAttributeFields.cpp:279
different physics engine has different winding order.
Definition: EventBinding.h:32
represent any kind of static or animated variable, such as: string, double, float, int, bool, Vector3, Quaternion, or animated data with multiple time, value keys.
Definition: Variable.h:75
virtual void SetModified(bool bModified)
set whether any field has been modified.
Definition: IAttributeFields.h:111
virtual const char * GetDynamicFieldNameByIndex(int nIndex)
get field name by index
Definition: IAttributeFields.cpp:189
virtual bool InvokeEditor(int nFieldID, const std::string &sParameters)
Invoke an (external) editor for a given field.
Definition: IAttributeFields.h:131
base class for object, such as CBaseObject, IAttributeObject, GUI object.
Definition: PERef.h:287
virtual int SetDynamicField(const std::string &sName, const CVariable &value)
set a dynamic field with a given name.
Definition: IAttributeFields.cpp:201
virtual void * QueryObject(int nObjectType)
convert to object of a given type.
Definition: IAttributeFields.cpp:287
static bool OpenWithDefaultEditor(const char *sFilename, bool bWaitOnReturn=false)
Open a given file with the default registered editor in the game engine.
Definition: IAttributeFields.cpp:168
virtual string GetValidationMessage()
get the recent validation message due to the most recent call to ValidateFields() ...
Definition: IAttributeFields.h:116
virtual int GetChildAttributeColumnCount()
we support multi-dimensional child object.
Definition: IAttributeFields.cpp:260
virtual const char * GetAttributeClassDescription()
a static string, describing the attribute class object
Definition: IAttributeFields.h:75
Definition: enum_maker.hpp:46
A common interface for all classes implementing IAttributeFields By implementing this class&#39;s virtual...
Definition: IAttributeFields.h:59
virtual int GetTime()
get the current local time in case it is animated in milli seconds frames.
Definition: IAttributeFields.cpp:295
virtual int InstallFields(CAttributeClass *pClass, bool bOverride)
this class should be implemented if one wants to add new attribute.
Definition: IAttributeFields.cpp:304
void PrintObject()
print the content of this object to a text file at temp/doc/[ClassName].txt.
Definition: IAttributeFields.cpp:115
a group of dynamic attributes
Definition: DynamicAttributesSet.h:7
CAttributeClass * GetAttributeClass()
get the main attribute class object.
Definition: IAttributeFields.cpp:147
for a dynamic attribute field.
Definition: DynamicAttributeField.h:11
virtual const char * GetAttributeClassName()
a static string, describing the attribute class object&#39;s name
Definition: IAttributeFields.h:73
virtual int SaveDynamicFieldsToString(std::string &output)
save only text dynamic fields to fieldname = value text strings.
Definition: IAttributeFields.cpp:55
virtual int GetAttributeClassID()
attribute class ID should be identical, unless one knows how overriding rules work.
Definition: IAttributeFields.cpp:228
virtual bool AddChildAttributeObject(IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0)
add child object.
Definition: IAttributeFields.cpp:274
virtual int GetDynamicFieldCount()
how many dynamic field this object currently have.
Definition: IAttributeFields.cpp:195
ATTRIBUTE_FIELDTYPE
a list of all attribute type this is also used for all variable type supported.
Definition: Variable.h:10
virtual bool IsModified()
whether some of the fields are modified.It is up to the implementation class to provide this function...
Definition: IAttributeFields.h:109
virtual CDynamicAttributeField * GetDynamicField(const std::string &sName)
Get a dynamic field with a given name.
Definition: IAttributeFields.cpp:177