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