00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _FL_DATA_FIELDS_H_
00023 #define _FL_DATA_FIELDS_H_
00024
00025 #include "Fl_Variant.h"
00026 #include "Fl_Ptr_List.h"
00027 #include "Fl_Flags.h"
00028
00029 class Fl_Data_Fields;
00030
00032 class FL_API Fl_Data_Field {
00033 friend class Fl_Data_Fields;
00034 public:
00035 Fl_Data_Field(const char *name);
00036
00037 Fl_Variant value;
00038
00049 int width;
00050 int precision;
00051 Fl_Flags flags;
00052 bool visible;
00053
00054 const Fl_String &name() const { return m_name; }
00055 Fl_Variant_Type type() const { return value.type(); }
00056
00057 unsigned buffer_size() const { return value.size(); }
00058 unsigned data_size() const { return m_dataSize; }
00059 void data_size(unsigned sz) { m_dataSize = sz; }
00060
00061 bool is_null() const { return m_dataSize == 0; }
00062
00063
00064 operator int () const { return as_int(); }
00065 operator double () const { return as_float(); }
00066 operator Fl_String () const { return as_string(); }
00067 operator Fl_Date_Time () const { return as_datetime(); }
00068 operator const Fl_Image * () const { return as_image(); }
00069
00070 int as_int() const { return value.as_int(); }
00071 double as_float() const { return value.as_float(); }
00072 Fl_String as_string() const;
00073 bool as_bool() const { return value.as_bool(); }
00074 Fl_Date_Time as_date() const { return value.as_date(); }
00075 Fl_Date_Time as_datetime() const { return value.as_datetime(); }
00076 const Fl_Image *as_image() const { return value.as_image(); }
00077
00078
00079 Fl_Data_Field& operator = (int v) { value = v; return *this; }
00080 Fl_Data_Field& operator = (double v) { value = v; return *this; }
00081 Fl_Data_Field& operator = (Fl_String v) { value = v; return *this; }
00082 Fl_Data_Field& operator = (Fl_Date_Time v) { value = v; return *this; }
00083 Fl_Data_Field& operator = (const char *v) { value = v; return *this; }
00084 Fl_Data_Field& operator = (const Fl_Image *v) { value = v; return *this; }
00085
00086 protected:
00087 Fl_String m_name;
00088 unsigned m_dataSize;
00089 };
00090
00092 class FL_API Fl_Data_Fields {
00093 public:
00094 Fl_Data_Fields() { m_userData = 0; }
00095 ~Fl_Data_Fields() { clear(); }
00096
00097 void clear();
00098 unsigned count() const { return m_list.count(); }
00099 int field_index(const char * fname) const;
00100
00101 Fl_Data_Field& add(const char *fname);
00102 Fl_Data_Field& add(Fl_Data_Field *fld);
00103
00104 const Fl_Data_Field& field(unsigned index) const;
00105 Fl_Data_Field& field(unsigned index);
00106
00107 const Fl_Data_Field& field(int index) const;
00108 Fl_Data_Field& field(int index);
00109
00110 const Fl_Data_Field& field(const char *fname) const;
00111 Fl_Data_Field& field(const char *fname);
00112
00113 Fl_Variant& operator [] (int index);
00114 const Fl_Variant& operator [] (int index) const;
00115 Fl_Variant& operator [] (const char *fname);
00116 const Fl_Variant& operator [] (const char *fname) const;
00117
00118 void user_data(void *d) { m_userData = d; }
00119 void *user_data() const { return m_userData; }
00120
00121 private:
00122 void *m_userData;
00123 Fl_Ptr_List m_list;
00124 static const Fl_Variant m_fieldNotFound;
00125 };
00126
00127 #endif