Implemended column header mouse clicks.
[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 #include "wx/icon.h"
19
20 // ---------------------------------------------------------
21 // classes
22 // ---------------------------------------------------------
23
24 class WXDLLIMPEXP_ADV wxDataViewCtrl;
25 class WXDLLIMPEXP_ADV wxDataViewMainWindow;
26 class WXDLLIMPEXP_ADV wxDataViewHeaderWindow;
27
28 // ---------------------------------------------------------
29 // wxDataViewRenderer
30 // ---------------------------------------------------------
31
32 class WXDLLIMPEXP_ADV wxDataViewRenderer: public wxDataViewRendererBase
33 {
34 public:
35 wxDataViewRenderer( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
36 virtual ~wxDataViewRenderer();
37
38 virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
39 virtual wxSize GetSize() = 0;
40
41 virtual bool Activate( wxRect WXUNUSED(cell),
42 wxDataViewListModel *WXUNUSED(model),
43 unsigned int WXUNUSED(col),
44 unsigned int WXUNUSED(row) )
45 { return false; }
46
47 virtual bool LeftClick( wxPoint WXUNUSED(cursor),
48 wxRect WXUNUSED(cell),
49 wxDataViewListModel *WXUNUSED(model),
50 unsigned int WXUNUSED(col),
51 unsigned int WXUNUSED(row) )
52 { return false; }
53 virtual bool RightClick( wxPoint WXUNUSED(cursor),
54 wxRect WXUNUSED(cell),
55 wxDataViewListModel *WXUNUSED(model),
56 unsigned int WXUNUSED(col),
57 unsigned int WXUNUSED(row) )
58 { return false; }
59 virtual bool StartDrag( wxPoint WXUNUSED(cursor),
60 wxRect WXUNUSED(cell),
61 wxDataViewListModel *WXUNUSED(model),
62 unsigned int WXUNUSED(col),
63 unsigned int WXUNUSED(row) )
64 { return false; }
65
66 // Create DC on request
67 virtual wxDC *GetDC();
68
69 private:
70 wxDC *m_dc;
71
72 protected:
73 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer)
74 };
75
76 // ---------------------------------------------------------
77 // wxDataViewCustomRenderer
78 // ---------------------------------------------------------
79
80 class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewRenderer
81 {
82 public:
83 wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"),
84 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
85
86 protected:
87 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
88 };
89
90 // ---------------------------------------------------------
91 // wxDataViewTextRenderer
92 // ---------------------------------------------------------
93
94 class WXDLLIMPEXP_ADV wxDataViewTextRenderer: public wxDataViewCustomRenderer
95 {
96 public:
97 wxDataViewTextRenderer( const wxString &varianttype = wxT("string"),
98 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
99
100 bool SetValue( const wxVariant &value );
101 bool GetValue( wxVariant &value );
102
103 bool Render( wxRect cell, wxDC *dc, int state );
104 wxSize GetSize();
105
106 private:
107 wxString m_text;
108
109 protected:
110 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
111 };
112
113 // ---------------------------------------------------------
114 // wxDataViewBitmapRenderer
115 // ---------------------------------------------------------
116
117 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer: public wxDataViewCustomRenderer
118 {
119 public:
120 wxDataViewBitmapRenderer( const wxString &varianttype = wxT("wxBitmap"),
121 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
122
123 bool SetValue( const wxVariant &value );
124 bool GetValue( wxVariant &value );
125
126 bool Render( wxRect cell, wxDC *dc, int state );
127 wxSize GetSize();
128
129 private:
130 wxIcon m_icon;
131 wxBitmap m_bitmap;
132
133 protected:
134 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer)
135 };
136
137 // ---------------------------------------------------------
138 // wxDataViewToggleRenderer
139 // ---------------------------------------------------------
140
141 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewCustomRenderer
142 {
143 public:
144 wxDataViewToggleRenderer( const wxString &varianttype = wxT("bool"),
145 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
146
147 bool SetValue( const wxVariant &value );
148 bool GetValue( wxVariant &value );
149
150 bool Render( wxRect cell, wxDC *dc, int state );
151 bool Activate( wxRect cell, wxDataViewListModel *model, unsigned int col, unsigned int row );
152 wxSize GetSize();
153
154 private:
155 bool m_toggle;
156
157 protected:
158 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer)
159 };
160
161 // ---------------------------------------------------------
162 // wxDataViewProgressRenderer
163 // ---------------------------------------------------------
164
165 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer: public wxDataViewCustomRenderer
166 {
167 public:
168 wxDataViewProgressRenderer( const wxString &label = wxEmptyString,
169 const wxString &varianttype = wxT("long"),
170 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
171 virtual ~wxDataViewProgressRenderer();
172
173 bool SetValue( const wxVariant &value );
174
175 virtual bool Render( wxRect cell, wxDC *dc, int state );
176 virtual wxSize GetSize();
177
178 private:
179 wxString m_label;
180 int m_value;
181
182 protected:
183 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer)
184 };
185
186 // ---------------------------------------------------------
187 // wxDataViewDateRenderer
188 // ---------------------------------------------------------
189
190 class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer
191 {
192 public:
193 wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"),
194 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE );
195
196 bool SetValue( const wxVariant &value );
197
198 virtual bool Render( wxRect cell, wxDC *dc, int state );
199 virtual wxSize GetSize();
200 virtual bool Activate( wxRect cell,
201 wxDataViewListModel *model, unsigned int col, unsigned int row );
202
203 private:
204 wxDateTime m_date;
205
206 protected:
207 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer)
208 };
209
210 // ---------------------------------------------------------
211 // wxDataViewColumn
212 // ---------------------------------------------------------
213
214 class WXDLLIMPEXP_ADV wxDataViewColumn: public wxDataViewColumnBase
215 {
216 public:
217 wxDataViewColumn( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column,
218 int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
219 wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column,
220 int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE );
221 virtual ~wxDataViewColumn();
222
223 virtual void SetTitle( const wxString &title );
224 virtual void SetBitmap( const wxBitmap &bitmap );
225
226 virtual void SetAlignment( wxAlignment align );
227
228 virtual void SetSortable( bool sortable );
229 virtual bool GetSortable();
230 virtual void SetSortOrder( bool ascending );
231 virtual bool IsSortOrderAscending();
232
233 virtual int GetWidth();
234
235 private:
236 int m_width;
237 int m_fixedWidth;
238
239 protected:
240 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn)
241 };
242
243 // ---------------------------------------------------------
244 // wxDataViewCtrl
245 // ---------------------------------------------------------
246
247 class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase,
248 public wxScrollHelperNative
249 {
250 public:
251 wxDataViewCtrl() : wxScrollHelperNative(this)
252 {
253 Init();
254 }
255
256 wxDataViewCtrl( wxWindow *parent, wxWindowID id,
257 const wxPoint& pos = wxDefaultPosition,
258 const wxSize& size = wxDefaultSize, long style = 0,
259 const wxValidator& validator = wxDefaultValidator )
260 : wxScrollHelperNative(this)
261 {
262 Create(parent, id, pos, size, style, validator );
263 }
264
265 virtual ~wxDataViewCtrl();
266
267 void Init();
268
269 bool Create(wxWindow *parent, wxWindowID id,
270 const wxPoint& pos = wxDefaultPosition,
271 const wxSize& size = wxDefaultSize, long style = 0,
272 const wxValidator& validator = wxDefaultValidator );
273
274 virtual bool AssociateModel( wxDataViewListModel *model );
275 virtual bool AppendColumn( wxDataViewColumn *col );
276
277 virtual void SetSelection( int row ); // -1 for unselect
278 virtual void SetSelectionRange( unsigned int from, unsigned int to );
279 virtual void SetSelections( const wxArrayInt& aSelections);
280 virtual void Unselect( unsigned int row );
281
282 virtual bool IsSelected( unsigned int row ) const;
283 virtual int GetSelection() const;
284 virtual int GetSelections(wxArrayInt& aSelections) const;
285
286 private:
287 friend class wxDataViewMainWindow;
288 friend class wxDataViewHeaderWindow;
289 wxDataViewListModelNotifier *m_notifier;
290 wxDataViewMainWindow *m_clientArea;
291 wxDataViewHeaderWindow *m_headerArea;
292
293 private:
294 void OnSize( wxSizeEvent &event );
295
296 // we need to return a special WM_GETDLGCODE value to process just the
297 // arrows but let the other navigation characters through
298 #ifdef __WXMSW__
299 virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
300 #endif // __WXMSW__
301
302 WX_FORWARD_TO_SCROLL_HELPER()
303
304 private:
305 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl)
306 DECLARE_NO_COPY_CLASS(wxDataViewCtrl)
307 DECLARE_EVENT_TABLE()
308 };
309
310
311 #endif // __GENERICDATAVIEWCTRLH__