1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: dbgrid.h 3 // Purpose: Displays a wxDbTable in a wxGrid. 4 // Author: Roger Gammans, Paul Gammans 5 // Modified by: 6 // Created: 7 // RCS-ID: $Id: dbgrid.h 61872 2009-09-09 22:37:05Z VZ $ 8 // Copyright: (c) 1999 The Computer Surgery (roger@computer-surgery.co.uk) 9 // Licence: wxWindows licence 10 /////////////////////////////////////////////////////////////////////////////// 11 // Branched From : dbgrid.h,v 1.19 2001/03/28 11:16:01 12 /////////////////////////////////////////////////////////////////////////////// 13 14 #ifndef _WX_GENERIC_DBGRID_H_ 15 #define _WX_GENERIC_DBGRID_H_ 16 17 #if wxUSE_ODBC 18 #if wxUSE_GRID 19 20 #include "wx/log.h" 21 #include "wx/dbtable.h" 22 #include "wx/dynarray.h" 23 #include "wx/grid.h" 24 #include "wx/dbkeyg.h" 25 26 #define wxGRID_VALUE_DBAUTO wxT("dbauto") 27 28 WX_DECLARE_USER_EXPORTED_OBJARRAY(GenericKey,keyarray,WXDLLIMPEXP_DBGRID); 29 30 static const int wxUSE_QUERY = -1; 31 32 class WXDLLIMPEXP_DBGRID wxDbGridColInfoBase 33 { 34 public: 35 //Default ctor wxDbGridColInfoBase()36 wxDbGridColInfoBase() { } wxDbGridColInfoBase(int colNo,wxString type,wxString title)37 wxDbGridColInfoBase(int colNo, 38 wxString type, wxString title) : 39 DbCol(colNo), 40 wxtypename(type), 41 Title(title) 42 { } 43 //Copy Ctor wxDbGridColInfoBase(const wxDbGridColInfoBase & ref)44 wxDbGridColInfoBase(const wxDbGridColInfoBase& ref) 45 { 46 DbCol = ref.DbCol; 47 wxtypename = ref.wxtypename; 48 Title = ref.Title; 49 } 50 //Empty destructor for member obj's ~wxDbGridColInfoBase()51 ~wxDbGridColInfoBase() {} 52 53 int DbCol; 54 wxString wxtypename; 55 wxString Title; 56 }; 57 58 59 class WXDLLIMPEXP_DBGRID wxDbGridColInfo 60 { 61 public: wxDbGridColInfo(int colNo,wxString type,wxString title,wxDbGridColInfo * next)62 wxDbGridColInfo(int colNo, 63 wxString type, 64 wxString title, 65 wxDbGridColInfo *next) : 66 m_data(colNo,type,title) 67 { 68 m_next=next; 69 } 70 71 //Empty List ~wxDbGridColInfo()72 ~wxDbGridColInfo() { delete m_next; } 73 74 //Recurse to find length. Length()75 int Length() { return (m_next ? m_next->Length() +1 : 1); } 76 77 // Adds a new column info (2 step creation) AddColInfo(int colNo,wxString type,wxString title)78 void AddColInfo (int colNo, 79 wxString type, 80 wxString title) 81 { 82 GetLast()->m_next = new wxDbGridColInfo (colNo, type, title, NULL); 83 } 84 85 // Searches last GetLast()86 wxDbGridColInfo *GetLast() { return (m_next ? m_next->GetLast() : this); } 87 88 89 protected: 90 wxDbGridColInfoBase m_data; 91 wxDbGridColInfo *m_next; 92 93 friend class wxDbGridTableBase; 94 }; 95 96 97 class WXDLLIMPEXP_DBGRID wxDbGridCellAttrProvider : public wxGridCellAttrProvider 98 { 99 public: 100 wxDbGridCellAttrProvider(); 101 wxDbGridCellAttrProvider(wxDbTable *tab, wxDbGridColInfoBase* ColInfo); 102 virtual ~wxDbGridCellAttrProvider(); 103 104 virtual wxGridCellAttr *GetAttr(int row, int col, 105 wxGridCellAttr::wxAttrKind kind) const; 106 virtual void AssignDbTable(wxDbTable *tab); 107 private: 108 wxDbTable *m_data; 109 wxDbGridColInfoBase *m_ColInfo; 110 }; 111 112 113 class WXDLLIMPEXP_DBGRID wxDbGridTableBase : public wxGridTableBase 114 { 115 public: 116 wxDbGridTableBase(wxDbTable *tab, wxDbGridColInfo *ColInfo, 117 int count = wxUSE_QUERY, bool takeOwnership = true); 118 virtual ~wxDbGridTableBase(); 119 GetNumberRows()120 virtual int GetNumberRows() 121 { 122 wxLogDebug(wxT(" GetNumberRows() = %i"),m_rowtotal); 123 return m_rowtotal; 124 } GetNumberCols()125 virtual int GetNumberCols() 126 { 127 wxLogDebug(wxT(" GetNumberCols() = %i"),m_nocols); 128 return m_nocols; 129 } 130 virtual bool IsEmptyCell(int row, int col) ; 131 virtual wxString GetValue(int row, int col) ; 132 virtual void SetValue(int row, int col, const wxString& value); 133 virtual bool CanHaveAttributes(); 134 virtual wxString GetTypeName(int row, int col); 135 virtual bool CanGetValueAs(int row, int col, const wxString& typeName); 136 virtual bool CanSetValueAs(int row, int col, const wxString& typeName); 137 virtual long GetValueAsLong(int row, int col); 138 virtual double GetValueAsDouble(int row, int col); 139 virtual bool GetValueAsBool(int row, int col); 140 virtual void SetValueAsLong(int row, int col, long value); 141 virtual void SetValueAsDouble(int row, int col, double value); 142 virtual void SetValueAsBool(int row, int col, bool value); 143 virtual void *GetValueAsCustom(int row, int col, const wxString& typeName); 144 virtual void SetValueAsCustom(int row, int col, const wxString& typeName, void* value); 145 146 147 virtual wxString GetColLabelValue(int col); 148 149 virtual bool AssignDbTable(wxDbTable *tab, int count = wxUSE_QUERY, bool takeOwnership=true); 150 virtual void ValidateRow(int row); UpdateRow(int row)151 virtual bool UpdateRow(int row) const 152 { 153 if (m_row != row) 154 return true; 155 else 156 return Writeback(); 157 } 158 159 private: 160 //Operates on the current row 161 bool Writeback() const; 162 163 typedef wxGridTableBase inherited; 164 keyarray m_keys; 165 wxDbTable *m_data; 166 bool m_dbowner; 167 int m_rowtotal; 168 int m_nocols; 169 int m_row; 170 wxDbGridColInfoBase *m_ColInfo; 171 bool m_rowmodified; 172 }; 173 174 #endif // #if wxUSE_GRID 175 #endif // #if wxUSE_ODBC 176 177 #endif // _WX_GENERIC_DBGRID_H_ 178