Added sort order and alignement for column headers.
[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 virtual void SetSortOrder( bool ascending );
228
229 virtual int GetWidth();
230
231 private:
232 int m_width;
233 int m_fixedWidth;
234
235 protected:
236 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn)
237 };
238
239 // ---------------------------------------------------------
240 // wxDataViewCtrl
241 // ---------------------------------------------------------
242
243 class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase,
244 public wxScrollHelperNative
245 {
246 public:
247 wxDataViewCtrl() : wxScrollHelperNative(this)
248 {
249 Init();
250 }
251
252 wxDataViewCtrl( wxWindow *parent, wxWindowID id,
253 const wxPoint& pos = wxDefaultPosition,
254 const wxSize& size = wxDefaultSize, long style = 0,
255 const wxValidator& validator = wxDefaultValidator )
256 : wxScrollHelperNative(this)
257 {
258 Create(parent, id, pos, size, style, validator );
259 }
260
261 virtual ~wxDataViewCtrl();
262
263 void Init();
264
265 bool Create(wxWindow *parent, wxWindowID id,
266 const wxPoint& pos = wxDefaultPosition,
267 const wxSize& size = wxDefaultSize, long style = 0,
268 const wxValidator& validator = wxDefaultValidator );
269
270 virtual bool AssociateModel( wxDataViewListModel *model );
271 virtual bool AppendColumn( wxDataViewColumn *col );
272
273 virtual void SetSelection( int row ); // -1 for unselect
274 virtual void SetSelectionRange( unsigned int from, unsigned int to );
275 virtual void SetSelections( const wxArrayInt& aSelections);
276 virtual void Unselect( unsigned int row );
277
278 virtual bool IsSelected( unsigned int row ) const;
279 virtual int GetSelection() const;
280 virtual int GetSelections(wxArrayInt& aSelections) const;
281
282 private:
283 friend class wxDataViewMainWindow;
284 friend class wxDataViewHeaderWindow;
285 wxDataViewListModelNotifier *m_notifier;
286 wxDataViewMainWindow *m_clientArea;
287 wxDataViewHeaderWindow *m_headerArea;
288
289 private:
290 void OnSize( wxSizeEvent &event );
291
292 // we need to return a special WM_GETDLGCODE value to process just the
293 // arrows but let the other navigation characters through
294 #ifdef __WXMSW__
295 virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
296 #endif // __WXMSW__
297
298 WX_FORWARD_TO_SCROLL_HELPER()
299
300 private:
301 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl)
302 DECLARE_NO_COPY_CLASS(wxDataViewCtrl)
303 DECLARE_EVENT_TABLE()
304 };
305
306
307 #endif // __GENERICDATAVIEWCTRLH__