My Project
DataTable.h
1 #pragma once
2 #include <map>
3 #include <vector>
4 #include <string>
5 #include "Type.h"
6 using namespace std;
7 namespace ParaEngine
8 {
9  enum DATAROW_STATE{
10  DataRow_Detached=1,
11  DataRow_Unchanged=2,
12  DataRow_Added=4,
13  DataRow_Deleted=8,
14  DataRow_Modified=16
15  };
16  class CDataColumnInfo:public IObject
17  {
18  public:
19  CDataColumnInfo():m_bReadonly(false),m_bAllowNull(true),m_nMaxLength(-1),m_parent(NULL),m_datatype(IType::GetType("string")){m_type=IType::GetType("void");}
20  CDataColumnInfo(IType* ptype):m_bReadonly(false),m_bAllowNull(true),m_nMaxLength(-1),m_parent(NULL),m_datatype(ptype){m_type=IType::GetType("void");}
21  CDataColumnInfo(const string&szColumnName);
22  CDataColumnInfo(const string&szColumnName,IType* ptype);
23 
24  virtual const IType* GetType()const { return m_type; };
25  //memcpy data and assign the string data
26  virtual IObject* Clone()const;
27  virtual void Clone(IObject *obj)const;
28 
33  virtual const char* GetCaption()const;
34  //if szText==null or length==0, the m_szCaption will be cleared.
35  virtual void SetCaption(const char* szText);
36 
37  virtual const char* GetColumnName()const{return m_szColumnName.c_str();}
38  virtual void SetColumnName(const char* szText){m_szColumnName=szText;}
39 
40  virtual bool GetReadOnly()const{return m_bReadonly;}
41  virtual void SetReadOnly(bool readonly){m_bReadonly=readonly;}
42 
43  virtual int GetMaxLength()const{return m_nMaxLength;}
44  virtual void SetMaxLength(int maxlength){m_nMaxLength=maxlength;}//may need update something in its parent
45 
46  virtual bool GetAllowNull()const {return m_bAllowNull;}
47  virtual void SetAllowNull(bool allownull){m_bAllowNull=allownull;}
48 
49  virtual const IType* GetDataType()const{return m_datatype;}
50  friend class CDataTable;
51  friend class CDataRow;
52  friend class CColumnCollection;
53  protected:
54  IType* m_datatype;
55  CBaseTable* m_parent;
56  string m_szCaption;
57  string m_szColumnName;
58  bool m_bReadonly;
59  bool m_bAllowNull;
60  int m_nMaxLength;//-1 means unbound
61  IType* m_type;
62  };
63  class CDataRow;
64  class CDataCellItem:public IObject
65  {
66  public:
67  CDataCellItem(IObject* data,CDataRow* parent,CDataColumnInfo* columninfo);
68  virtual ~CDataCellItem();
69  virtual const IType* GetType()const { return m_type; };
73  IObject* Clone()const;
74  void Clone(IObject*)const ;
78  //use the different type's parse function to convert the string to the type, only the value types can be converted
79  virtual CDataCellItem& operator =(const string& value);
80  //convert input to correct type, only the value types can be converted
81  virtual CDataCellItem& operator =(int value);
82  //convert input to correct type, only the value types can be converted
83  virtual CDataCellItem& operator =(bool value);
84  //convert input to correct type, only the value types can be converted
85  virtual CDataCellItem& operator =(float value);
86  //convert input to correct type, only the value types can be converted
87  virtual CDataCellItem& operator =(double value);
88  //convert input to correct type, if not value type, the value's refcount is increased.
89  virtual CDataCellItem& operator =(IObject& value);
90  //if value==null, call setnull
91  //convert input to correct type, if not value type, the value's refcount is increased.
92  virtual CDataCellItem& operator =(CDataCellItem* value);
93  virtual operator string();
94  virtual operator int();
95  virtual operator bool();
96  virtual operator float();
97  virtual operator double();
98  virtual operator const char*();
99  virtual operator IObject*();
100  bool IsNull(){return m_data==NULL;}
101  //if column allow null, return true and release the m_data, else return false;
102  bool SetNull();
103  bool IsValid()const{return m_bIsValid;}
104  protected:
105  IObject* m_data;
106  CDataRow* m_parent;
107  CDataColumnInfo* m_columninfo;
108  bool m_bIsValid;
109  IType* m_type;
110  };
111 
112  class CDataColumnInfo;
113  class CColumnCollection:public ICollection<CDataColumnInfo>
114  {
115  public:
116  enum ColumnCollectionAction
117  {
118  ColumnAction_Add,//add one
119  ColumnAction_Remove,//remove one
120  ColumnAction_Refresh//complete change
121  };
122  CColumnCollection(CDataTable* parent):m_parent(parent),m_row(NULL){}
123  CColumnCollection(CDataRow* row):m_parent(NULL),m_row(row){}
124  virtual CDataColumnInfo* GetAt(int index);
125  virtual const CDataColumnInfo* GetAt(int index)const;
126  virtual CDataColumnInfo* GetAt(const string& szName);
127  virtual const CDataColumnInfo* GetAt(const string& szName)const;
128  virtual void Clear();
132  virtual int Remove(int index);
133  virtual int IndexOf(const string& szName)const;
134  virtual void Add();
135  virtual void Add(CDataColumnInfo *obj);
140  virtual void Add(const char* szName);
141  virtual void Add(const char* szName,IType* pType);
142  virtual int Size()const{return m_data.Size();}
143  virtual int Resize(int newsize){return m_data.Resize(newsize);}
144 // virtual void SetOnChangeMethod(void(*newmethod)(int,CDataColumnInfo*) ){m_onchange=newmethod;}
145  protected:
147  map<string,int> m_map;
148  CDataTable *m_parent;
149  CDataRow *m_row;
150 // void(*m_onchange)(int eAction,CDataColumnInfo* obj) ;
151  private:
152  virtual int Insert(CDataColumnInfo* obj, int index){return -1;}
153  virtual int SetAt(CDataColumnInfo* obj, int index){return -1;}
154  virtual int Remove(){return -1;};
155  virtual int IndexOf(const CDataColumnInfo *obj)const{return -1;};
156  virtual int CopySetAt(const CDataColumnInfo *obj, int index){return -1;};
157  virtual void CopyAdd(const CDataColumnInfo *obj){};
158  virtual int CopyInsert(CDataColumnInfo* obj, int index){return -1;};
159  static int ColumnNameCounter;
160  };
167  {
168  public:
169  CDataRow();
170  virtual ~CDataRow();
171  //also clone children rows recursively
172  virtual IObject* Clone()const;
173  virtual void Clone(IObject *obj)const;
174 
175  //return the editable children rows collection
176  virtual ICollection<CDataRow>* GetChildRows();
177 
178  //check input data, encapsulate it into a CDataCellItem
179  virtual int SetAt(IObject&obj, int index);
180 
181  virtual const CDataCellItem* GetAt(int index)const;
182  virtual CDataCellItem* GetAt(int index);
183 
185  virtual void Delete();
186  virtual int Resize(int newsize);
187 
191  virtual void BeingEdit(){m_bEditing=true;}
192 
193  virtual void CancelEdit(){}
198  virtual int EndEdit();
199 
200  virtual int GetRowState(){return m_eRowState;}
201 
202  //Gets a readonly data
203  const CDataCellItem& operator [](const string& szName)const;
204  const CDataCellItem& operator [](int index)const{return *GetAt(index);}
205  //Get a writable data
206  CDataCellItem& operator[](const string& szName);
207  CDataCellItem& operator[](int index){return *GetAt(index);}
208 
209  virtual CColumnCollection* ColumnInfos(){return m_ColumnInfo;}
210 
211  protected:
212 
213  Collection_Vector<CDataRow> m_children;
214  //this info has higher priority over the table's columninfo
215  //if set, the functions will use this instead of the table's
216  CColumnCollection* m_ColumnInfo;
217 
218  bool m_bEditing;//if the row is being edited. if true, the validation will not trigger automatically
219  int m_eRowState;//DATAROW_STATE
220  };
221 
222  //support adding and removing undo
223  class CDataTable:public CBaseTable
224  {
225  public:
226  CDataTable();
227  virtual ~CDataTable();
228  virtual CColumnCollection* GetColumnInfos(){return m_ColumnInfo;}
229  protected:
230  CColumnCollection* m_ColumnInfo;
231  string m_szTableName;
232 
233  };
234 
235 }
Definition: DataTable.h:64
Definition: GLType.h:217
IType is for type information and validating It contains type information of an object.
Definition: Type.h:75
Definition: ICollection.h:11
Definition: DataTable.h:113
different physics engine has different winding order.
Definition: EventBinding.h:32
Although this class inherits the CRefCounted interface, I don&#39;t manage it in GC.
Definition: BaseTable.h:17
virtual void BeingEdit()
Begin the edit transaction.
Definition: DataTable.h:191
Definition: DataTable.h:223
Definition: BaseTable.h:114
base class for object, such as CBaseObject, IAttributeObject, GUI object.
Definition: PERef.h:287
Definition: enum_maker.hpp:46
Definition: DataTable.h:16
Default behavior of the collection adds only reference.
Definition: ICollection.h:35
children of data row is some addition data rows.
Definition: DataTable.h:166