![]() |
Main Page
Class Hierarchy
Alphabetical List
Compound List
File List
Compound Members
![]() |
00001 ///////////////////////////////////////////////////////////////////////////// 00002 // 00003 // DbControl 00004 // 00005 ///////////////////////////////////////////////////////////////////////////// 00006 // 00007 // Hakki Dogusan 00008 // dogusanh@tr.net 00009 // http://www.dynaset.org/dogusanh 00010 // 00011 ///////////////////////////////////////////////////////////////////////////// 00012 #ifndef DBCONTROL_H 00013 #define DBCONTROL_H 00014 00015 #ifndef FXBASEOBJECT_H 00016 #include "FXBaseObject.h" 00017 #endif 00018 namespace FXEX { 00019 class DbField; 00020 00021 /** 00022 * DbControl is an object which is a storage unit for some type of in-memory database (I think?) 00023 */ 00024 class FXAPI DbControl : public FXBaseObject { 00025 FXDECLARE(DbControl) 00026 typedef FXObjectListOf<DbField> DbFields; 00027 00028 public: 00029 enum { 00030 ID_DB_FIRST=50000, 00031 ID_OPEN, 00032 ID_CLOSE, 00033 ID_FIELD, // field operation 00034 ID_FOCUSIN, 00035 ID_FOCUSOUT, 00036 ID_INSERT, // record operation 00037 ID_EDIT, 00038 ID_KILL, 00039 ID_POST, 00040 ID_CANCEL, 00041 ID_QUERY, // navigation 00042 ID_SCROLL, 00043 ID_FIRST, 00044 ID_PRIOR, 00045 ID_NEXT, 00046 ID_LAST, 00047 ID_PRINT, // misc operations 00048 ID_DB_LAST, 00049 }; 00050 00051 public: 00052 /// Current mode of operation 00053 enum DbMode { 00054 DB_INACTIVE, 00055 DB_BROWSE, 00056 DB_INSERT, 00057 DB_EDIT 00058 }; 00059 00060 // Current position of data pointer 00061 enum DbPosition { 00062 DB_BOF = -4, 00063 DB_EOF = -3, 00064 DB_FIRST = -2, 00065 DB_PRIOR = -1, 00066 DB_CURRENT = 0, 00067 DB_NEXT = 1, 00068 DB_LAST = 2, 00069 DB_FIND = 3 00070 }; 00071 00072 public: 00073 /// ctor 00074 DbControl(FXWindow* own,FXObject* tgt=NULL,FXSelector sel=0); 00075 00076 /// dtor 00077 virtual ~DbControl(); 00078 00079 public: 00080 /// accessor methods 00081 FXbool open(); 00082 FXbool close(); 00083 FXbool insert(); 00084 FXbool post(); 00085 FXbool cancel(); 00086 FXbool kill(); //Delete 00087 FXbool edit(); 00088 FXbool query(); 00089 FXbool first(); 00090 FXbool prior(); 00091 FXbool next(); 00092 FXbool last(); 00093 FXbool print(); 00094 00095 /// are we at the bottom of the dataset 00096 FXbool isBof() const; 00097 00098 /// are we are the end of the file 00099 FXbool isEof() const; 00100 00101 public: 00102 /// get the current mode of operation 00103 DbMode getMode() const { return mode; } 00104 00105 /// get pointer to specific column (by column number), from current row 00106 DbField* getField(FXint i=-1) const; // i=-1 => current focused field 00107 00108 /// get pointer to specific column (by column name), from current row 00109 DbField* getField(const FXString&) const; // NULL => current focused field 00110 00111 /// return the query applied to the data 00112 FXString getQuery() const { return query_; } 00113 00114 /// set the query applied to the data 00115 void setQuery(const FXString& q) { query_=q; } 00116 00117 protected: 00118 /// add specified field to database 00119 void addField(DbField* field) { fields.append(field); } 00120 00121 /// add field using field name/title for FXchar type 00122 void addField(const FXString& name,const FXString& title,FXchar& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00123 00124 /// add field using field name/title for FXuchar type 00125 void addField(const FXString& name,const FXString& title,FXuchar& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00126 00127 /// add field using field name/title for FXshort type 00128 void addField(const FXString& name,const FXString& title,FXshort& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00129 00130 /// add field using field name/title for FXushort type 00131 void addField(const FXString& name,const FXString& title,FXushort& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00132 00133 /// add field using field name/title for FXint type 00134 void addField(const FXString& name,const FXString& title,FXint& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00135 00136 /// add field using field name/title for FXuint type 00137 void addField(const FXString& name,const FXString& title,FXuint& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00138 00139 /// add field using field name/title for FXFloat type 00140 void addField(const FXString& name,const FXString& title,FXfloat& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00141 00142 /// add field using field name/title for FXdouble type 00143 void addField(const FXString& name,const FXString& title,FXdouble& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00144 00145 /// add field using field name/title for FXString type 00146 void addField(const FXString& name,const FXString& title,FXString& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00147 00148 /// add field using field name/title for DateFiled type 00149 void addField(const FXString& name,const FXString& title,DateField& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00150 00151 /// add field using field name/title for CurrencyField type 00152 void addField(const FXString& name,const FXString& title,CurrencyField& value) { fields.append(new DbField(name,title,value,this,ID_FIELD)); } 00153 00154 protected: 00155 00156 /// return widget owner 00157 FXWindow* getOwner() const { return owner; } 00158 00159 /// return handle to list of database fields 00160 DbFields& getFields() { return fields; } 00161 00162 private: 00163 /// these virtual methods are meant to be handled by the actual database instance object 00164 virtual FXbool doOpen() { return FALSE; } 00165 virtual FXbool doClose() { return FALSE; } 00166 virtual FXbool doClear() { return FALSE; } 00167 virtual FXbool doInsert() { return FALSE; } 00168 virtual FXbool doPost() { return FALSE; } 00169 virtual FXbool doCancel() { return FALSE; } 00170 virtual FXbool doKill() { return FALSE; } 00171 virtual FXbool doEdit() { return FALSE; } 00172 virtual FXbool doQuery() { return FALSE; } 00173 virtual FXbool doFetch(DbPosition&) { return FALSE; } 00174 virtual FXbool doPrint() { return FALSE; } 00175 virtual FXbool doShowError(const FXString&) { return FALSE; } 00176 00177 public: 00178 long onFieldChanged(FXObject*, FXSelector, void*); 00179 long onFieldUpdate(FXObject*, FXSelector, void*); 00180 long onFieldFocusIn(FXObject*, FXSelector, void*); 00181 long onFieldFocusOut(FXObject*, FXSelector, void*); 00182 long onCmdOpen(FXObject*, FXSelector, void*); 00183 long onUpdOpen(FXObject*, FXSelector, void*); 00184 long onCmdClose(FXObject*, FXSelector, void*); 00185 long onUpdClose(FXObject*, FXSelector, void*); 00186 long onCmdInsert(FXObject*, FXSelector, void*); 00187 long onUpdInsert(FXObject*, FXSelector, void*); 00188 long onCmdKill(FXObject*, FXSelector, void*); 00189 long onUpdKill(FXObject*, FXSelector, void*); 00190 long onCmdPost(FXObject*, FXSelector, void*); 00191 long onUpdPost(FXObject*, FXSelector, void*); 00192 long onCmdCancel(FXObject*, FXSelector, void*); 00193 long onUpdCancel(FXObject*, FXSelector, void*); 00194 long onCmdQuery(FXObject*, FXSelector, void*); 00195 long onUpdQuery(FXObject*, FXSelector, void*); 00196 long onCmdFirst(FXObject*, FXSelector, void*); 00197 long onUpdFirst(FXObject*, FXSelector, void*); 00198 long onCmdPrior(FXObject*, FXSelector, void*); 00199 long onUpdPrior(FXObject*, FXSelector, void*); 00200 long onCmdNext(FXObject*, FXSelector, void*); 00201 long onUpdNext(FXObject*, FXSelector, void*); 00202 long onCmdLast(FXObject*, FXSelector, void*); 00203 long onUpdLast(FXObject*, FXSelector, void*); 00204 long onCmdPrint(FXObject*, FXSelector, void*); 00205 long onUpdPrint(FXObject*, FXSelector, void*); 00206 00207 private: 00208 FXWindow* owner; 00209 DbMode mode; 00210 DbFields fields; 00211 DbField* focusedField; 00212 FXString query_; 00213 DbPosition position; 00214 void setMode(DbMode m) { mode=m; } 00215 FXbool before(FXuint sel, void* ptr); 00216 FXbool after(FXuint sel, void* ptr); 00217 00218 protected: 00219 /// serialisation 00220 DbControl(){} 00221 00222 private: 00223 /// disable access to these operations 00224 DbControl(const DbControl&); 00225 DbControl& operator=(const DbControl&); 00226 }; 00227 00228 } // namespace FXEX 00229 #endif // DBCONTROL_H