In the generic version of wxDataViewCtrl, all
[wxWidgets.git] / include / wx / generic / dataview.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/generic/dataview.h
3 // Purpose: wxDataViewCtrl generic implementation header
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10 #ifndef __GENERICDATAVIEWCTRLH__
11 #define __GENERICDATAVIEWCTRLH__
12
13 #include "wx/defs.h"
14 #include "wx/object.h"
15 #include "wx/list.h"
16 #include "wx/control.h"
17 #include "wx/scrolwin.h"
18
19 // ---------------------------------------------------------
20 // classes
21 // ---------------------------------------------------------
22
23 class WXDLLIMPEXP_CORE wxDataViewCtrl;
24 class WXDLLIMPEXP_CORE wxDataViewMainWindow;
25 class WXDLLIMPEXP_CORE wxDataViewHeaderWindow;
26
27 // ---------------------------------------------------------
28 // wxDataViewCell
29 // ---------------------------------------------------------
30
31 class wxDataViewCell: public wxDataViewCellBase
32 {
33 public:
34 wxDataViewCell( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
35 ~wxDataViewCell();
36
37 virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
38 virtual wxSize GetSize() = 0;
39
40 virtual bool Activate( wxRect cell,
41 wxDataViewListModel *model, size_t col, size_t row )
42 { return false; }
43
44 virtual bool LeftClick( wxPoint cursor, wxRect cell,
45 wxDataViewListModel *model, size_t col, size_t row )
46 { return false; }
47 virtual bool RightClick( wxPoint cursor, wxRect cell,
48 wxDataViewListModel *model, size_t col, size_t row )
49 { return false; }
50 virtual bool StartDrag( wxPoint cursor, wxRect cell,
51 wxDataViewListModel *model, size_t col, size_t row )
52 { return false; }
53
54 // Create DC on request
55 virtual wxDC *GetDC();
56
57 private:
58 wxDC *m_dc;
59
60 protected:
61 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCell)
62 };
63
64 // ---------------------------------------------------------
65 // wxDataViewCustomCell
66 // ---------------------------------------------------------
67
68 class wxDataViewCustomCell: public wxDataViewCell
69 {
70 public:
71 wxDataViewCustomCell( const wxString &varianttype = wxT("string"),
72 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
73
74 protected:
75 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomCell)
76 };
77
78 // ---------------------------------------------------------
79 // wxDataViewTextCell
80 // ---------------------------------------------------------
81
82 class wxDataViewTextCell: public wxDataViewCustomCell
83 {
84 public:
85 wxDataViewTextCell( const wxString &varianttype = wxT("string"),
86 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
87
88 bool SetValue( const wxVariant &value );
89 bool GetValue( wxVariant &value );
90
91 bool Render( wxRect cell, wxDC *dc, int state );
92 wxSize GetSize();
93
94 protected:
95 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextCell)
96 };
97
98 // ---------------------------------------------------------
99 // wxDataViewToggleCell
100 // ---------------------------------------------------------
101
102 class wxDataViewToggleCell: public wxDataViewCustomCell
103 {
104 public:
105 wxDataViewToggleCell( const wxString &varianttype = wxT("bool"),
106 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
107
108 bool SetValue( const wxVariant &value );
109 bool GetValue( wxVariant &value );
110
111 bool Render( wxRect cell, wxDC *dc, int state );
112 wxSize GetSize();
113
114 protected:
115 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleCell)
116 };
117
118 // ---------------------------------------------------------
119 // wxDataViewProgressCell
120 // ---------------------------------------------------------
121
122 class wxDataViewProgressCell: public wxDataViewCustomCell
123 {
124 public:
125 wxDataViewProgressCell( const wxString &label = wxEmptyString,
126 const wxString &varianttype = wxT("long"),
127 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
128 ~wxDataViewProgressCell();
129
130 bool SetValue( const wxVariant &value );
131
132 virtual bool Render( wxRect cell, wxDC *dc, int state );
133 virtual wxSize GetSize();
134
135 private:
136 wxString m_label;
137 int m_value;
138
139 protected:
140 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressCell)
141 };
142
143 // ---------------------------------------------------------
144 // wxDataViewDateCell
145 // ---------------------------------------------------------
146
147 class wxDataViewDateCell: public wxDataViewCustomCell
148 {
149 public:
150 wxDataViewDateCell( const wxString &varianttype = wxT("datetime"),
151 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE );
152
153 bool SetValue( const wxVariant &value );
154
155 virtual bool Render( wxRect cell, wxDC *dc, int state );
156 virtual wxSize GetSize();
157 virtual bool Activate( wxRect cell,
158 wxDataViewListModel *model, size_t col, size_t row );
159
160 private:
161 wxDateTime m_date;
162
163 protected:
164 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateCell)
165 };
166
167 // ---------------------------------------------------------
168 // wxDataViewColumn
169 // ---------------------------------------------------------
170
171 class WXDLLIMPEXP_CORE wxDataViewColumn: public wxDataViewColumnBase
172 {
173 public:
174 wxDataViewColumn( const wxString &title, wxDataViewCell *cell, size_t model_column, int flags = 0 );
175 virtual ~wxDataViewColumn();
176
177 virtual void SetTitle( const wxString &title );
178
179 void SetWidth( int width ) { m_width = width; }
180 int GetWidth() { return m_width; }
181
182 private:
183 int m_width;
184
185 protected:
186 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn)
187 };
188
189 // ---------------------------------------------------------
190 // wxDataViewCtrl
191 // ---------------------------------------------------------
192
193 class WXDLLIMPEXP_CORE wxDataViewCtrl: public wxDataViewCtrlBase,
194 public wxScrollHelperNative
195 {
196 public:
197 wxDataViewCtrl() : wxScrollHelperNative(this)
198 {
199 Init();
200 }
201
202 wxDataViewCtrl( wxWindow *parent, wxWindowID id,
203 const wxPoint& pos = wxDefaultPosition,
204 const wxSize& size = wxDefaultSize, long style = 0,
205 const wxValidator& validator = wxDefaultValidator )
206 : wxScrollHelperNative(this)
207 {
208 Create(parent, id, pos, size, style, validator );
209 }
210
211 virtual ~wxDataViewCtrl();
212
213 void Init();
214
215 bool Create(wxWindow *parent, wxWindowID id,
216 const wxPoint& pos = wxDefaultPosition,
217 const wxSize& size = wxDefaultSize, long style = 0,
218 const wxValidator& validator = wxDefaultValidator );
219
220 virtual bool AssociateModel( wxDataViewListModel *model );
221 virtual bool AppendColumn( wxDataViewColumn *col );
222
223 private:
224 friend class wxDataViewMainWindow;
225 friend class wxDataViewHeaderWindow;
226 wxDataViewListModelNotifier *m_notifier;
227 wxDataViewMainWindow *m_clientArea;
228 wxDataViewHeaderWindow *m_headerArea;
229
230 private:
231 void OnSize( wxSizeEvent &event );
232
233 // we need to return a special WM_GETDLGCODE value to process just the
234 // arrows but let the other navigation characters through
235 #ifdef __WXMSW__
236 virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
237 #endif // __WXMSW__
238
239 WX_FORWARD_TO_SCROLL_HELPER()
240
241 private:
242 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl)
243 DECLARE_NO_COPY_CLASS(wxDataViewCtrl)
244 DECLARE_EVENT_TABLE()
245 };
246
247
248 #endif // __GENERICDATAVIEWCTRLH__