]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/generic/dataview.h
wxDC::StretchBlit() for wxMac and wxMSW (patch 1611973)
[wxWidgets.git] / include / wx / generic / dataview.h
... / ...
CommitLineData
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
24class WXDLLIMPEXP_ADV wxDataViewCtrl;
25class WXDLLIMPEXP_ADV wxDataViewMainWindow;
26class WXDLLIMPEXP_ADV wxDataViewHeaderWindow;
27
28// ---------------------------------------------------------
29// wxDataViewRenderer
30// ---------------------------------------------------------
31
32class WXDLLIMPEXP_ADV wxDataViewRenderer: public wxDataViewRendererBase
33{
34public:
35 wxDataViewRenderer( const wxString &varianttype,
36 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
37 int align = wxDVR_DEFAULT_ALIGNMENT );
38 virtual ~wxDataViewRenderer();
39
40 virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
41 virtual wxSize GetSize() const = 0;
42
43 virtual void SetAlignment( int align )
44 { m_align=align; }
45 virtual int GetAlignment() const
46 { return m_align; }
47
48 virtual void SetMode( wxDataViewCellMode mode )
49 { m_mode=mode; }
50 virtual wxDataViewCellMode GetMode() const
51 { return m_mode; }
52
53 virtual bool Activate( wxRect WXUNUSED(cell),
54 wxDataViewListModel *WXUNUSED(model),
55 unsigned int WXUNUSED(col),
56 unsigned int WXUNUSED(row) )
57 { return false; }
58
59 virtual bool LeftClick( 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 virtual bool RightClick( wxPoint WXUNUSED(cursor),
66 wxRect WXUNUSED(cell),
67 wxDataViewListModel *WXUNUSED(model),
68 unsigned int WXUNUSED(col),
69 unsigned int WXUNUSED(row) )
70 { return false; }
71 virtual bool StartDrag( wxPoint WXUNUSED(cursor),
72 wxRect WXUNUSED(cell),
73 wxDataViewListModel *WXUNUSED(model),
74 unsigned int WXUNUSED(col),
75 unsigned int WXUNUSED(row) )
76 { return false; }
77
78 // Create DC on request
79 virtual wxDC *GetDC();
80
81private:
82 wxDC *m_dc;
83 int m_align;
84 wxDataViewCellMode m_mode;
85
86protected:
87 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer)
88};
89
90// ---------------------------------------------------------
91// wxDataViewCustomRenderer
92// ---------------------------------------------------------
93
94class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewRenderer
95{
96public:
97 wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"),
98 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
99 int align = wxDVR_DEFAULT_ALIGNMENT );
100
101protected:
102 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
103};
104
105// ---------------------------------------------------------
106// wxDataViewTextRenderer
107// ---------------------------------------------------------
108
109class WXDLLIMPEXP_ADV wxDataViewTextRenderer: public wxDataViewCustomRenderer
110{
111public:
112 wxDataViewTextRenderer( const wxString &varianttype = wxT("string"),
113 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
114 int align = wxDVR_DEFAULT_ALIGNMENT );
115
116 bool SetValue( const wxVariant &value );
117 bool GetValue( wxVariant &value ) const;
118
119 bool Render( wxRect cell, wxDC *dc, int state );
120 wxSize GetSize() const;
121
122private:
123 wxString m_text;
124
125protected:
126 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
127};
128
129// ---------------------------------------------------------
130// wxDataViewBitmapRenderer
131// ---------------------------------------------------------
132
133class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer: public wxDataViewCustomRenderer
134{
135public:
136 wxDataViewBitmapRenderer( const wxString &varianttype = wxT("wxBitmap"),
137 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
138 int align = wxDVR_DEFAULT_ALIGNMENT );
139
140 bool SetValue( const wxVariant &value );
141 bool GetValue( wxVariant &value ) const;
142
143 bool Render( wxRect cell, wxDC *dc, int state );
144 wxSize GetSize() const;
145
146private:
147 wxIcon m_icon;
148 wxBitmap m_bitmap;
149
150protected:
151 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer)
152};
153
154// ---------------------------------------------------------
155// wxDataViewToggleRenderer
156// ---------------------------------------------------------
157
158class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewCustomRenderer
159{
160public:
161 wxDataViewToggleRenderer( const wxString &varianttype = wxT("bool"),
162 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
163 int align = wxDVR_DEFAULT_ALIGNMENT );
164
165 bool SetValue( const wxVariant &value );
166 bool GetValue( wxVariant &value ) const;
167
168 bool Render( wxRect cell, wxDC *dc, int state );
169 bool Activate( wxRect cell, wxDataViewListModel *model, unsigned int col,
170 unsigned int row );
171 wxSize GetSize() const;
172
173private:
174 bool m_toggle;
175
176protected:
177 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer)
178};
179
180// ---------------------------------------------------------
181// wxDataViewProgressRenderer
182// ---------------------------------------------------------
183
184class WXDLLIMPEXP_ADV wxDataViewProgressRenderer: public wxDataViewCustomRenderer
185{
186public:
187 wxDataViewProgressRenderer( const wxString &label = wxEmptyString,
188 const wxString &varianttype = wxT("long"),
189 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
190 int align = wxDVR_DEFAULT_ALIGNMENT );
191 virtual ~wxDataViewProgressRenderer();
192
193 bool SetValue( const wxVariant &value );
194 bool GetValue( wxVariant& value ) const;
195
196 virtual bool Render( wxRect cell, wxDC *dc, int state );
197 virtual wxSize GetSize() const;
198
199private:
200 wxString m_label;
201 int m_value;
202
203protected:
204 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer)
205};
206
207// ---------------------------------------------------------
208// wxDataViewDateRenderer
209// ---------------------------------------------------------
210
211class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer
212{
213public:
214 wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"),
215 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
216 int align = wxDVR_DEFAULT_ALIGNMENT );
217
218 bool SetValue( const wxVariant &value );
219 bool GetValue( wxVariant& value ) const;
220
221 virtual bool Render( wxRect cell, wxDC *dc, int state );
222 virtual wxSize GetSize() const;
223 virtual bool Activate( wxRect cell,
224 wxDataViewListModel *model, unsigned int col, unsigned int row );
225
226private:
227 wxDateTime m_date;
228
229protected:
230 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer)
231};
232
233// ---------------------------------------------------------
234// wxDataViewColumn
235// ---------------------------------------------------------
236
237class WXDLLIMPEXP_ADV wxDataViewColumn: public wxDataViewColumnBase
238{
239 friend class wxDataViewHeaderWindowBase;
240 friend class wxDataViewHeaderWindow;
241 friend class wxDataViewHeaderWindowMSW;
242
243public:
244 wxDataViewColumn( const wxString &title, wxDataViewRenderer *renderer,
245 unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH,
246 wxAlignment align = wxALIGN_CENTER,
247 int flags = wxDATAVIEW_COL_RESIZABLE );
248 wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *renderer,
249 unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH,
250 wxAlignment align = wxALIGN_CENTER,
251 int flags = wxDATAVIEW_COL_RESIZABLE );
252 virtual ~wxDataViewColumn();
253
254 // setters:
255
256 virtual void SetTitle( const wxString &title )
257 { m_title=title; }
258 virtual void SetAlignment( wxAlignment align )
259 { m_align=align; }
260 virtual void SetMinWidth( int minWidth )
261 { m_minWidth=minWidth; }
262 virtual void SetWidth( int width );
263 virtual void SetSortable( bool sortable );
264 virtual void SetResizeable( bool resizeable );
265 virtual void SetHidden( bool hidden );
266 virtual void SetSortOrder( bool ascending );
267
268
269 // getters:
270
271 virtual wxString GetTitle() const
272 { return m_title; }
273 virtual wxAlignment GetAlignment() const
274 { return m_align; }
275 virtual int GetWidth() const
276 { return m_width; }
277 virtual int GetMinWidth() const
278 { return m_minWidth; }
279 virtual bool IsSortable() const
280 { return (m_flags & wxDATAVIEW_COL_SORTABLE) != 0; }
281 virtual bool IsResizeable() const
282 { return (m_flags & wxDATAVIEW_COL_RESIZABLE) != 0; }
283 virtual bool IsHidden() const
284 { return (m_flags & wxDATAVIEW_COL_HIDDEN) != 0; }
285 virtual bool IsSortOrderAscending() const;
286
287
288private:
289 int m_width;
290 int m_minWidth;
291 int m_flags;
292 wxAlignment m_align;
293 wxString m_title;
294
295 void Init(int width);
296
297 // like SetWidth() but does not ask the header window of the
298 // wxDataViewCtrl to reflect the width-change.
299 void SetInternalWidth(int width);
300
301protected:
302 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn)
303};
304
305// ---------------------------------------------------------
306// wxDataViewCtrl
307// ---------------------------------------------------------
308
309class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase,
310 public wxScrollHelperNative
311{
312 friend class wxDataViewMainWindow;
313 friend class wxDataViewHeaderWindowBase;
314 friend class wxDataViewHeaderWindow;
315 friend class wxDataViewHeaderWindowMSW;
316 friend class wxDataViewColumn;
317
318public:
319 wxDataViewCtrl() : wxScrollHelperNative(this)
320 {
321 Init();
322 }
323
324 wxDataViewCtrl( wxWindow *parent, wxWindowID id,
325 const wxPoint& pos = wxDefaultPosition,
326 const wxSize& size = wxDefaultSize, long style = 0,
327 const wxValidator& validator = wxDefaultValidator )
328 : wxScrollHelperNative(this)
329 {
330 Create(parent, id, pos, size, style, validator );
331 }
332
333 virtual ~wxDataViewCtrl();
334
335 void Init();
336
337 bool Create(wxWindow *parent, wxWindowID id,
338 const wxPoint& pos = wxDefaultPosition,
339 const wxSize& size = wxDefaultSize, long style = 0,
340 const wxValidator& validator = wxDefaultValidator );
341
342 virtual bool AssociateModel( wxDataViewListModel *model );
343 virtual bool AppendColumn( wxDataViewColumn *col );
344
345 virtual void SetSelection( int row ); // -1 for unselect
346 virtual void SetSelectionRange( unsigned int from, unsigned int to );
347 virtual void SetSelections( const wxArrayInt& aSelections);
348 virtual void Unselect( unsigned int row );
349
350 virtual bool IsSelected( unsigned int row ) const;
351 virtual int GetSelection() const;
352 virtual int GetSelections(wxArrayInt& aSelections) const;
353
354public: // utility functions not part of the API
355
356 // returns the "best" width for the idx-th column
357 unsigned int GetBestColumnWidth(int WXUNUSED(idx)) const
358 {
359 return GetClientSize().GetWidth() / GetColumnCount();
360 }
361
362 // updates the header window after a change in a column setting
363 void OnColumnChange();
364
365private:
366 wxDataViewListModelNotifier *m_notifier;
367 wxDataViewMainWindow *m_clientArea;
368 wxDataViewHeaderWindow *m_headerArea;
369
370private:
371 void OnSize( wxSizeEvent &event );
372
373 // we need to return a special WM_GETDLGCODE value to process just the
374 // arrows but let the other navigation characters through
375#ifdef __WXMSW__
376 virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
377#endif // __WXMSW__
378
379 WX_FORWARD_TO_SCROLL_HELPER()
380
381private:
382 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl)
383 DECLARE_NO_COPY_CLASS(wxDataViewCtrl)
384 DECLARE_EVENT_TABLE()
385};
386
387
388#endif // __GENERICDATAVIEWCTRLH__