My Project
AttributeClass.h
1 #pragma once
2 #include "AttributeField.h"
3 
4 namespace ParaEngine
5 {
11  {
12  public:
13  CAttributeClass(int nClassID, const char* sClassName, const char* sClassDescription);
14  virtual ~CAttributeClass(){}
15  enum Field_Order
16  {
17  Sort_ByName,
18  Sort_ByCategory,
19  Sort_ByInstallOrder,
20  };
21 
22  public:
33  void AddField(const char* sFieldname, DWORD Type, void* offsetSetFunc, void* offsetGetFunc, const char* sSchematics, const char* sHelpString, bool bOverride);
35  void AddField_Deprecated(const char *fieldName, bool bOverride = true);
37  bool RemoveField(const char* sFieldname);
38  void RemoveAllFields();
39 
41  int GetClassID() const;
43  const char* GetClassName() const;
45  const char* GetClassDescription() const;
46 
48  void SetOrder(Field_Order order);
50  Field_Order GetOrder();
51 
53  int GetFieldNum();
55  CAttributeField* GetField(int nIndex);
56 
62  int GetFieldIndex(const char* sFieldname);
63  int GetFieldIndex(const std::string& sFieldname);
64 
66  CAttributeField* GetField(const char* sFieldname);
67  CAttributeField* GetField(const std::string& sFieldname);
68 
70  virtual IAttributeFields* Create();
71  protected:
72  int m_nClassID;
73  const char* m_sClassName;
74  const char* m_sClassDescription;
75  vector<CAttributeField> m_attributes;
76  Field_Order m_nCurrentOrder;
77  bool m_bSort;
78  private:
83  bool InsertField(CAttributeField& item, bool bOverride);
84 
85  void SortField();
86  };
87 
93  template<typename T>
95  {
96  public:
97  typedef T classType;
98  CAttributeClassImp(int nClassID, const char* sClassName, const char* sClassDescription)
99  : CAttributeClass(nClassID, sClassName, sClassDescription) {};
100  virtual ~CAttributeClassImp(){};
101 
104  {
105  return classType::Create();
106  }
107  };
108 }
void AddField_Deprecated(const char *fieldName, bool bOverride=true)
use of deprecated field takes no effect and will output warning in the log.
Definition: AttributeClass.cpp:69
int GetFieldIndex(const char *sFieldname)
get field index of a given field name.
Definition: AttributeClass.cpp:159
for a single attribute field
Definition: AttributeField.h:19
void AddField(const char *sFieldname, DWORD Type, void *offsetSetFunc, void *offsetGetFunc, const char *sSchematics, const char *sHelpString, bool bOverride)
add a new field.
Definition: AttributeClass.cpp:34
an attribute class is a collection of attribute fields.
Definition: AttributeClass.h:10
bool RemoveField(const char *sFieldname)
remove a field, return true if moved.
Definition: AttributeClass.cpp:78
int GetClassID() const
class ID
Definition: AttributeClass.cpp:19
different physics engine has different winding order.
Definition: EventBinding.h:32
Field_Order GetOrder()
get which order fields are saved.
Definition: AttributeClass.cpp:177
derived attribute class.
Definition: AttributeClass.h:94
int GetFieldNum()
get the total number of field.
Definition: AttributeClass.cpp:182
virtual IAttributeFields * Create()
create an instance of this class object
Definition: AttributeClass.cpp:197
const char * GetClassName() const
class name
Definition: AttributeClass.cpp:24
A common interface for all classes implementing IAttributeFields By implementing this class&#39;s virtual...
Definition: IAttributeFields.h:59
void SetOrder(Field_Order order)
Set which order fields are saved.
Definition: AttributeClass.cpp:116
const char * GetClassDescription() const
class description
Definition: AttributeClass.cpp:29
virtual IAttributeFields * Create()
see class reference if classType::Create is not defined.
Definition: AttributeClass.h:103
CAttributeField * GetField(int nIndex)
get field at the specified index.
Definition: AttributeClass.cpp:187