replace m_insertCallback with a virtual function, contrary to the old comments a...
[wxWidgets.git] / include / wx / gtk / dataview.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/dataview.h
3 // Purpose: wxDataViewCtrl GTK+2 implementation header
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10 #ifndef _WX_GTKDATAVIEWCTRL_H_
11 #define _WX_GTKDATAVIEWCTRL_H_
12
13 #include "wx/list.h"
14
15 // ---------------------------------------------------------
16 // classes
17 // ---------------------------------------------------------
18
19 class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl;
20 class WXDLLIMPEXP_FWD_ADV wxDataViewCtrlInternal;
21
22
23 // ---------------------------------------------------------
24 // wxDataViewRenderer
25 // ---------------------------------------------------------
26
27 class WXDLLIMPEXP_ADV wxDataViewRenderer: public wxDataViewRendererBase
28 {
29 public:
30 wxDataViewRenderer( const wxString &varianttype,
31 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
32 int align = wxDVR_DEFAULT_ALIGNMENT );
33
34 virtual void SetMode( wxDataViewCellMode mode );
35 virtual wxDataViewCellMode GetMode() const;
36
37 virtual void SetAlignment( int align );
38 virtual int GetAlignment() const;
39
40 // implementation
41 GtkCellRenderer* GetGtkHandle() { return m_renderer; }
42 void GtkInitHandlers();
43 virtual bool GtkHasAttributes() { return false; }
44 void GtkUpdateAlignment();
45
46 protected:
47 GtkCellRenderer *m_renderer;
48 int m_alignment;
49
50 protected:
51 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer)
52 };
53
54 // ---------------------------------------------------------
55 // wxDataViewTextRenderer
56 // ---------------------------------------------------------
57
58 class WXDLLIMPEXP_ADV wxDataViewTextRenderer: public wxDataViewRenderer
59 {
60 public:
61 wxDataViewTextRenderer( const wxString &varianttype = wxT("string"),
62 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
63 int align = wxDVR_DEFAULT_ALIGNMENT );
64
65 bool SetValue( const wxVariant &value );
66 bool GetValue( wxVariant &value ) const;
67
68 void SetAlignment( int align );
69
70 protected:
71 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
72 };
73
74 // ---------------------------------------------------------
75 // wxDataViewTextRendererAttr
76 // ---------------------------------------------------------
77
78 class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr: public wxDataViewTextRenderer
79 {
80 public:
81 wxDataViewTextRendererAttr( const wxString &varianttype = wxT("string"),
82 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
83 int align = wxDVR_DEFAULT_ALIGNMENT );
84
85 // implementation
86 bool GtkHasAttributes() { return true; }
87
88 protected:
89 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr)
90 };
91
92 // ---------------------------------------------------------
93 // wxDataViewBitmapRenderer
94 // ---------------------------------------------------------
95
96 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer: public wxDataViewRenderer
97 {
98 public:
99 wxDataViewBitmapRenderer( const wxString &varianttype = wxT("wxBitmap"),
100 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
101 int align = wxDVR_DEFAULT_ALIGNMENT );
102
103 bool SetValue( const wxVariant &value );
104 bool GetValue( wxVariant &value ) const;
105
106 protected:
107 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer)
108 };
109
110 // ---------------------------------------------------------
111 // wxDataViewToggleRenderer
112 // ---------------------------------------------------------
113
114 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewRenderer
115 {
116 public:
117 wxDataViewToggleRenderer( const wxString &varianttype = wxT("bool"),
118 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
119 int align = wxDVR_DEFAULT_ALIGNMENT );
120
121 bool SetValue( const wxVariant &value );
122 bool GetValue( wxVariant &value ) const;
123
124 protected:
125 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer)
126 };
127
128 // ---------------------------------------------------------
129 // wxDataViewCustomRenderer
130 // ---------------------------------------------------------
131
132 class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewRenderer
133 {
134 public:
135 wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"),
136 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
137 int align = wxDVR_DEFAULT_ALIGNMENT,
138 bool no_init = false );
139 virtual ~wxDataViewCustomRenderer();
140
141
142 virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
143
144 void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
145
146 virtual wxSize GetSize() const = 0;
147
148 virtual bool Activate( wxRect WXUNUSED(cell),
149 wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) )
150 { return false; }
151
152 virtual bool LeftClick( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell),
153 wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) )
154 { return false; }
155 virtual bool StartDrag( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell),
156 wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) )
157 { return false; }
158
159 // Create DC on request
160 virtual wxDC *GetDC();
161
162
163 protected:
164
165 bool Init(wxDataViewCellMode mode, int align);
166
167 private:
168 wxDC *m_dc;
169
170 public:
171 // Internal, temporay for RenderText.
172 GtkCellRenderer *m_text_renderer;
173 GdkWindow *window;
174 GtkWidget *widget;
175 void *background_area;
176 void *cell_area;
177 void *expose_area;
178 int flags;
179
180 protected:
181 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
182 };
183
184 // ---------------------------------------------------------
185 // wxDataViewProgressRenderer
186 // ---------------------------------------------------------
187
188 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer: public wxDataViewCustomRenderer
189 {
190 public:
191 wxDataViewProgressRenderer( const wxString &label = wxEmptyString,
192 const wxString &varianttype = wxT("long"),
193 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
194 int align = wxDVR_DEFAULT_ALIGNMENT );
195 virtual ~wxDataViewProgressRenderer();
196
197 bool SetValue( const wxVariant &value );
198 bool GetValue( wxVariant &value ) const;
199
200 virtual bool Render( wxRect cell, wxDC *dc, int state );
201 virtual wxSize GetSize() const;
202
203 private:
204 wxString m_label;
205 int m_value;
206
207 protected:
208 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer)
209 };
210
211 // ---------------------------------------------------------
212 // wxDataViewIconTextRenderer
213 // ---------------------------------------------------------
214
215 class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer: public wxDataViewCustomRenderer
216 {
217 public:
218 wxDataViewIconTextRenderer( const wxString &varianttype = wxT("wxDataViewIconText"),
219 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
220 int align = wxDVR_DEFAULT_ALIGNMENT );
221 virtual ~wxDataViewIconTextRenderer();
222
223 bool SetValue( const wxVariant &value );
224 bool GetValue( wxVariant &value ) const;
225
226 virtual bool Render( wxRect cell, wxDC *dc, int state );
227 virtual wxSize GetSize() const;
228
229 virtual bool HasEditorCtrl() { return true; }
230 virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value );
231 virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value );
232
233 private:
234 wxDataViewIconText m_value;
235
236 protected:
237 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer)
238 };
239
240 // ---------------------------------------------------------
241 // wxDataViewDateRenderer
242 // ---------------------------------------------------------
243
244 class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer
245 {
246 public:
247 wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"),
248 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
249 int align = wxDVR_DEFAULT_ALIGNMENT );
250
251 bool SetValue( const wxVariant &value );
252 bool GetValue( wxVariant &value ) const;
253
254 virtual bool Render( wxRect cell, wxDC *dc, int state );
255 virtual wxSize GetSize() const;
256 virtual bool Activate( wxRect cell,
257 wxDataViewModel *model, const wxDataViewItem &item, unsigned int col );
258
259 private:
260 wxDateTime m_date;
261
262 protected:
263 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer)
264 };
265
266 // ---------------------------------------------------------
267 // wxDataViewColumn
268 // ---------------------------------------------------------
269
270 class WXDLLIMPEXP_ADV wxDataViewColumn: public wxDataViewColumnBase
271 {
272 public:
273 wxDataViewColumn( const wxString &title, wxDataViewRenderer *renderer,
274 unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH,
275 wxAlignment align = wxALIGN_CENTER,
276 int flags = wxDATAVIEW_COL_RESIZABLE );
277 wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *renderer,
278 unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH,
279 wxAlignment align = wxALIGN_CENTER,
280 int flags = wxDATAVIEW_COL_RESIZABLE );
281
282 virtual ~wxDataViewColumn();
283
284
285 // setters:
286
287 virtual void SetTitle( const wxString &title );
288 virtual void SetBitmap( const wxBitmap &bitmap );
289
290 virtual void SetOwner( wxDataViewCtrl *owner );
291
292 virtual void SetAlignment( wxAlignment align );
293
294 virtual void SetSortable( bool sortable );
295 virtual void SetSortOrder( bool ascending );
296
297 virtual void SetResizeable( bool resizeable );
298 virtual void SetHidden( bool hidden );
299
300 virtual void SetMinWidth( int minWidth );
301 virtual void SetWidth( int width );
302
303 virtual void SetReorderable( bool reorderable );
304
305 // getters:
306
307 virtual wxString GetTitle() const;
308 virtual wxAlignment GetAlignment() const;
309
310 virtual bool IsSortable() const;
311 virtual bool IsSortOrderAscending() const;
312 virtual bool IsResizeable() const;
313 virtual bool IsHidden() const;
314
315 virtual int GetWidth() const;
316 virtual int GetMinWidth() const;
317
318 virtual bool IsReorderable() const;
319
320 // implementation
321 GtkWidget* GetGtkHandle() { return m_column; }
322 GtkWidget* GetConstGtkHandle() const { return m_column; }
323
324 private:
325 // holds the GTK handle
326 GtkWidget *m_column;
327
328 // holds GTK handles for title/bitmap in the header
329 GtkWidget *m_image;
330 GtkWidget *m_label;
331
332 // delayed connection to mouse events
333 friend class wxDataViewCtrl;
334 void OnInternalIdle();
335 bool m_isConnected;
336
337 void Init(wxAlignment align, int flags, int width);
338
339 protected:
340 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn)
341 };
342
343 WX_DECLARE_LIST_WITH_DECL(wxDataViewColumn, wxDataViewColumnList,
344 class WXDLLIMPEXP_ADV);
345
346 // ---------------------------------------------------------
347 // wxDataViewCtrl
348 // ---------------------------------------------------------
349
350 class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase
351 {
352 public:
353 wxDataViewCtrl()
354 {
355 Init();
356 }
357
358 wxDataViewCtrl( wxWindow *parent, wxWindowID id,
359 const wxPoint& pos = wxDefaultPosition,
360 const wxSize& size = wxDefaultSize, long style = 0,
361 const wxValidator& validator = wxDefaultValidator )
362 {
363 Create(parent, id, pos, size, style, validator );
364 }
365
366 virtual ~wxDataViewCtrl();
367
368 void Init();
369
370 bool Create(wxWindow *parent, wxWindowID id,
371 const wxPoint& pos = wxDefaultPosition,
372 const wxSize& size = wxDefaultSize, long style = 0,
373 const wxValidator& validator = wxDefaultValidator );
374
375 virtual bool AssociateModel( wxDataViewModel *model );
376
377 virtual bool PrependColumn( wxDataViewColumn *col );
378 virtual bool AppendColumn( wxDataViewColumn *col );
379 virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col );
380
381 virtual unsigned int GetColumnCount() const;
382 virtual wxDataViewColumn* GetColumn( unsigned int pos ) const;
383 virtual bool DeleteColumn( wxDataViewColumn *column );
384 virtual bool ClearColumns();
385 virtual int GetColumnPosition( const wxDataViewColumn *column ) const;
386
387 virtual wxDataViewColumn *GetSortingColumn() const;
388
389 virtual wxDataViewItem GetSelection() const;
390 virtual int GetSelections( wxDataViewItemArray & sel ) const;
391 virtual void SetSelections( const wxDataViewItemArray & sel );
392 virtual void Select( const wxDataViewItem & item );
393 virtual void Unselect( const wxDataViewItem & item );
394 virtual bool IsSelected( const wxDataViewItem & item ) const;
395 virtual void SelectAll();
396 virtual void UnselectAll();
397
398 virtual void EnsureVisible( const wxDataViewItem& item,
399 const wxDataViewColumn *column = NULL );
400 virtual void HitTest( const wxPoint &point,
401 wxDataViewItem &item,
402 wxDataViewColumn *&column ) const;
403 virtual wxRect GetItemRect( const wxDataViewItem &item,
404 const wxDataViewColumn *column = NULL ) const;
405
406 virtual void Expand( const wxDataViewItem & item );
407 virtual void Collapse( const wxDataViewItem & item );
408
409 static wxVisualAttributes
410 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
411
412 wxWindow *GetMainWindow() { return (wxWindow*) this; }
413
414 GtkWidget *GtkGetTreeView() { return m_treeview; }
415 wxDataViewCtrlInternal* GtkGetInternal() { return m_internal; }
416
417 virtual void OnInternalIdle();
418
419 protected:
420 virtual void DoSetExpanderColumn();
421 virtual void DoSetIndent();
422
423 private:
424 friend class wxDataViewCtrlDCImpl;
425 friend class wxDataViewColumn;
426 friend class wxGtkDataViewModelNotifier;
427 friend class wxDataViewCtrlInternal;
428
429 GtkWidget *m_treeview;
430 wxDataViewModelNotifier *m_notifier;
431 wxDataViewCtrlInternal *m_internal;
432 wxDataViewColumnList m_cols;
433
434 virtual void AddChildGTK(wxWindowGTK* child);
435 void GtkEnableSelectionEvents();
436 void GtkDisableSelectionEvents();
437
438 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl)
439 DECLARE_NO_COPY_CLASS(wxDataViewCtrl)
440 };
441
442
443 #endif // _WX_GTKDATAVIEWCTRL_H_