Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members

DbField.h

Go to the documentation of this file.
00001 /////////////////////////////////////////////////////////////////////////////
00002 //
00003 // DbField
00004 //
00005 /////////////////////////////////////////////////////////////////////////////
00006 //
00007 // Hakki Dogusan
00008 // dogusanh@tr.net
00009 // http://www.dynaset.org/dogusanh
00010 //
00011 /////////////////////////////////////////////////////////////////////////////
00012 #ifndef DBFIELD_H
00013 #define DBFIELD_H
00014 
00015 #ifndef FXBASEOBJECT_H
00016 #include "FXBaseObject.h"
00017 #endif
00018 namespace FXEX {
00019 
00020 /**
00021  * CurrencyField is a field type (which holds a currency value) for use with the DB Control object
00022  */
00023 class FXAPI CurrencyField {
00024   private:
00025     void set(const FXString& s);
00026     FXString get() const;
00027     FXdouble currency;
00028   public:
00029     CurrencyField() : currency(0) {}
00030     CurrencyField(const CurrencyField& from) : currency(from.currency) {}
00031     CurrencyField(const FXString& s) { set(s); }
00032     CurrencyField(FXdouble d) : currency(d){}
00033     CurrencyField& operator=(const CurrencyField& from) { currency=from.currency; return *this; }
00034     CurrencyField& operator=(const FXString& s) { set(s); return *this; }
00035     CurrencyField& operator=(const FXdouble d) { currency=d; return *this; }
00036     operator FXString() const { return get(); }
00037     operator FXdouble() const { return currency; }
00038     FXString asString() const { return get(); }
00039     FXdouble asDouble() const { return currency; }
00040     virtual ~CurrencyField() {}
00041   };
00042 
00043 
00044 /**
00045  * DateField is a field type (which holds dates) for use with the DB Control object
00046  */
00047 class FXAPI DateField {
00048   private:
00049     void set(const FXString& s);
00050     FXString get() const;
00051     void setDate(FXint year, FXint month, FXint day);
00052     void getDate(FXint& year, FXint& month, FXint& day) const;
00053     FXint date;
00054   public:
00055     DateField() : date(0){}
00056     DateField(const DateField& from) : date(from.date){}
00057     DateField(const FXString& s) { set(s); }
00058     DateField(const FXint i) : date(i){}
00059     DateField& operator=(const DateField& from) { date=from.date; return *this; }
00060     DateField& operator=(const FXString& s) { set(s); return *this; }
00061     DateField& operator=(const FXint i) { date=i; return *this; }
00062     operator FXString() const { return get(); }
00063     operator FXint() const { return date; }
00064     FXString asString() const { return get(); }
00065     FXint    asInt() const { return date; }
00066     virtual ~DateField() {}
00067   };
00068 
00069 
00070 /**
00071  * DbField is the field container for use with the DB Control object
00072  */
00073 class FXAPI DbField : public FXBaseObject {
00074   FXDECLARE(DbField)
00075 
00076   private:
00077     FXString  name_;
00078     FXString  title_;
00079     FXuint    type_;
00080 
00081   public:
00082     long onCmdValue(FXObject*,FXSelector,void*);
00083     long onUpdValue(FXObject*,FXSelector,void*);
00084     long onCmdOption(FXObject*,FXSelector,void*);
00085     long onUpdOption(FXObject*,FXSelector,void*);
00086     long onFocusIn(FXObject*,FXSelector,void*);
00087     long onFocusOut(FXObject*,FXSelector,void*);
00088 
00089   public:
00090     enum {
00091       DT_VOID=0,
00092       DT_CHAR,
00093       DT_UCHAR,
00094       DT_SHORT,
00095       DT_USHORT,
00096       DT_INT,
00097       DT_UINT,
00098       DT_FLOAT,
00099       DT_DOUBLE,
00100       DT_STRING,
00101       DT_DATE,
00102       DT_CURRENCY,
00103       DT_LAST
00104       };
00105 
00106   public:
00107     enum {
00108       ID_VALUE=FXBaseObject::ID_LAST, /// Will cause the DbField to ask sender for value
00109       ID_OPTION=ID_VALUE+10001,       /// ID_OPTION+i will set the value to i where -10000<=i<=10000
00110       ID_LAST=ID_OPTION+10000
00111       };
00112 
00113   public:
00114     /// no data
00115     DbField() : FXBaseObject(), type_(DT_VOID) { flags|=FLAG_ENABLED; }
00116 
00117     /// CHAR data
00118     DbField(const FXString& name,const FXString& title,FXchar& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_CHAR) {data=&value; flags|=FLAG_ENABLED;}
00119 
00120     /// UCHAR data
00121     DbField(const FXString& name,const FXString& title,FXuchar& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_UCHAR) {data=&value; flags|=FLAG_ENABLED;}
00122 
00123     /// SHORT data
00124     DbField(const FXString& name,const FXString& title,FXshort& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_SHORT) {data=&value; flags|=FLAG_ENABLED;}
00125 
00126     /// USHORT data
00127     DbField(const FXString& name,const FXString& title,FXushort& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_USHORT) {data=&value; flags|=FLAG_ENABLED;}
00128 
00129     /// INT data
00130     DbField(const FXString& name,const FXString& title,FXint& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_INT) {data=&value; flags|=FLAG_ENABLED;}
00131 
00132     /// UINT data
00133     DbField(const FXString& name,const FXString& title,FXuint& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_UINT) {data=&value; flags|=FLAG_ENABLED;}
00134 
00135     /// FLOAT data
00136     DbField(const FXString& name,const FXString& title,FXfloat& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_FLOAT) {data=&value; flags|=FLAG_ENABLED;}
00137 
00138     /// DOUBLE data
00139     DbField(const FXString& name,const FXString& title,FXdouble& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_DOUBLE) {data=&value; flags|=FLAG_ENABLED;}
00140 
00141     /// STRING data
00142     DbField(const FXString& name,const FXString& title,FXString& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_STRING) {data=&value; flags|=FLAG_ENABLED;}
00143 
00144     /// DateField data
00145     DbField(const FXString& name,const FXString& title,DateField& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_DATE) {data=&value; flags|=FLAG_ENABLED;}
00146 
00147     /// CurrencyField data
00148     DbField(const FXString& name,const FXString& title,CurrencyField& value,FXObject* tgt=NULL,FXSelector sel=0) : FXBaseObject(tgt,sel), name_(name), title_(title), type_(DT_CURRENCY) {data=&value; flags|=FLAG_ENABLED;}
00149 
00150     /// get name of field
00151     FXString getName() const { return name_; }
00152 
00153     /// get title of field
00154     FXString getTitle() const { return title_; }
00155 
00156     /// get field type
00157     FXuint getType() const { return type_; }
00158 
00159     /// is field focused
00160     FXbool hasFocus() const { return (flags&FLAG_FOCUSED)!=0; }
00161 
00162     /// set field focused
00163     void setFocus();
00164 
00165     /// stop focus on field
00166     void killFocus();
00167 
00168     /// is field editable
00169     FXbool isEditable() const { return (flags&FLAG_READONLY)==0; }
00170 
00171     /// set field editable
00172     void setEditable(FXbool edit=TRUE) { if(edit) flags&=~FLAG_READONLY; else flags|=FLAG_READONLY; }
00173 
00174     /// dtor
00175     virtual ~DbField(){}
00176   };
00177 
00178 } // namespace FXEX
00179 #endif // DBFIELD_H