1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/dataview.h
3 // Purpose: wxDataViewCtrl GTK+2 implementation header
4 // Author: Robert Roebling
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_GTKDATAVIEWCTRL_H_
11 #define _WX_GTKDATAVIEWCTRL_H_
15 // ---------------------------------------------------------
17 // ---------------------------------------------------------
19 class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl
;
20 class WXDLLIMPEXP_FWD_ADV wxDataViewCtrlInternal
;
23 // ---------------------------------------------------------
25 // ---------------------------------------------------------
27 class WXDLLIMPEXP_ADV wxDataViewRenderer
: public wxDataViewRendererBase
30 wxDataViewRenderer( const wxString
&varianttype
,
31 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
32 int align
= wxDVR_DEFAULT_ALIGNMENT
);
34 virtual void SetMode( wxDataViewCellMode mode
);
35 virtual wxDataViewCellMode
GetMode() const;
37 virtual void SetAlignment( int align
);
38 virtual int GetAlignment() const;
41 GtkCellRenderer
* GetGtkHandle() { return m_renderer
; }
42 void GtkInitHandlers();
43 virtual bool GtkHasAttributes() { return false; }
44 void GtkUpdateAlignment();
47 GtkCellRenderer
*m_renderer
;
51 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer
)
54 // ---------------------------------------------------------
55 // wxDataViewTextRenderer
56 // ---------------------------------------------------------
58 class WXDLLIMPEXP_ADV wxDataViewTextRenderer
: public wxDataViewRenderer
61 wxDataViewTextRenderer( const wxString
&varianttype
= wxT("string"),
62 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
63 int align
= wxDVR_DEFAULT_ALIGNMENT
);
65 bool SetValue( const wxVariant
&value
);
66 bool GetValue( wxVariant
&value
) const;
68 void SetAlignment( int align
);
71 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer
)
74 // ---------------------------------------------------------
75 // wxDataViewTextRendererAttr
76 // ---------------------------------------------------------
78 class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr
: public wxDataViewTextRenderer
81 wxDataViewTextRendererAttr( const wxString
&varianttype
= wxT("string"),
82 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
83 int align
= wxDVR_DEFAULT_ALIGNMENT
);
86 bool GtkHasAttributes() { return true; }
89 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr
)
92 // ---------------------------------------------------------
93 // wxDataViewBitmapRenderer
94 // ---------------------------------------------------------
96 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer
: public wxDataViewRenderer
99 wxDataViewBitmapRenderer( const wxString
&varianttype
= wxT("wxBitmap"),
100 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
101 int align
= wxDVR_DEFAULT_ALIGNMENT
);
103 bool SetValue( const wxVariant
&value
);
104 bool GetValue( wxVariant
&value
) const;
107 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer
)
110 // ---------------------------------------------------------
111 // wxDataViewToggleRenderer
112 // ---------------------------------------------------------
114 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer
: public wxDataViewRenderer
117 wxDataViewToggleRenderer( const wxString
&varianttype
= wxT("bool"),
118 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
119 int align
= wxDVR_DEFAULT_ALIGNMENT
);
121 bool SetValue( const wxVariant
&value
);
122 bool GetValue( wxVariant
&value
) const;
125 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer
)
128 // ---------------------------------------------------------
129 // wxDataViewCustomRenderer
130 // ---------------------------------------------------------
132 class WXDLLIMPEXP_ADV wxDataViewCustomRenderer
: public wxDataViewRenderer
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();
142 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
) = 0;
144 void RenderText( const wxString
&text
, int xoffset
, wxRect cell
, wxDC
*dc
, int state
);
146 virtual wxSize
GetSize() const = 0;
148 virtual bool Activate( wxRect
WXUNUSED(cell
),
149 wxDataViewModel
*WXUNUSED(model
), const wxDataViewItem
&WXUNUSED(item
), unsigned int WXUNUSED(col
) )
152 virtual bool LeftClick( wxPoint
WXUNUSED(cursor
), wxRect
WXUNUSED(cell
),
153 wxDataViewModel
*WXUNUSED(model
), const wxDataViewItem
&WXUNUSED(item
), unsigned int WXUNUSED(col
) )
155 virtual bool StartDrag( wxPoint
WXUNUSED(cursor
), wxRect
WXUNUSED(cell
),
156 wxDataViewModel
*WXUNUSED(model
), const wxDataViewItem
&WXUNUSED(item
), unsigned int WXUNUSED(col
) )
159 // Create DC on request
160 virtual wxDC
*GetDC();
165 bool Init(wxDataViewCellMode mode
, int align
);
171 // Internal, temporay for RenderText.
172 GtkCellRenderer
*m_text_renderer
;
175 void *background_area
;
181 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer
)
184 // ---------------------------------------------------------
185 // wxDataViewProgressRenderer
186 // ---------------------------------------------------------
188 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer
: public wxDataViewCustomRenderer
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();
197 bool SetValue( const wxVariant
&value
);
198 bool GetValue( wxVariant
&value
) const;
200 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
);
201 virtual wxSize
GetSize() const;
208 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer
)
211 // ---------------------------------------------------------
212 // wxDataViewIconTextRenderer
213 // ---------------------------------------------------------
215 class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer
: public wxDataViewCustomRenderer
218 wxDataViewIconTextRenderer( const wxString
&varianttype
= wxT("wxDataViewIconText"),
219 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
220 int align
= wxDVR_DEFAULT_ALIGNMENT
);
221 virtual ~wxDataViewIconTextRenderer();
223 bool SetValue( const wxVariant
&value
);
224 bool GetValue( wxVariant
&value
) const;
226 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
);
227 virtual wxSize
GetSize() const;
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
);
234 wxDataViewIconText m_value
;
237 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer
)
240 // ---------------------------------------------------------
241 // wxDataViewDateRenderer
242 // ---------------------------------------------------------
244 class WXDLLIMPEXP_ADV wxDataViewDateRenderer
: public wxDataViewCustomRenderer
247 wxDataViewDateRenderer( const wxString
&varianttype
= wxT("datetime"),
248 wxDataViewCellMode mode
= wxDATAVIEW_CELL_ACTIVATABLE
,
249 int align
= wxDVR_DEFAULT_ALIGNMENT
);
251 bool SetValue( const wxVariant
&value
);
252 bool GetValue( wxVariant
&value
) const;
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
);
263 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer
)
266 // ---------------------------------------------------------
268 // ---------------------------------------------------------
270 class WXDLLIMPEXP_ADV wxDataViewColumn
: public wxDataViewColumnBase
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
);
282 virtual ~wxDataViewColumn();
287 virtual void SetTitle( const wxString
&title
);
288 virtual void SetBitmap( const wxBitmap
&bitmap
);
290 virtual void SetOwner( wxDataViewCtrl
*owner
);
292 virtual void SetAlignment( wxAlignment align
);
294 virtual void SetSortable( bool sortable
);
295 virtual void SetSortOrder( bool ascending
);
297 virtual void SetResizeable( bool resizeable
);
298 virtual void SetHidden( bool hidden
);
300 virtual void SetMinWidth( int minWidth
);
301 virtual void SetWidth( int width
);
303 virtual void SetReorderable( bool reorderable
);
307 virtual wxString
GetTitle() const;
308 virtual wxAlignment
GetAlignment() const;
310 virtual bool IsSortable() const;
311 virtual bool IsSortOrderAscending() const;
312 virtual bool IsResizeable() const;
313 virtual bool IsHidden() const;
315 virtual int GetWidth() const;
316 virtual int GetMinWidth() const;
318 virtual bool IsReorderable() const;
321 GtkWidget
* GetGtkHandle() { return m_column
; }
322 GtkWidget
* GetConstGtkHandle() const { return m_column
; }
325 // holds the GTK handle
328 // holds GTK handles for title/bitmap in the header
332 // delayed connection to mouse events
333 friend class wxDataViewCtrl
;
334 void OnInternalIdle();
337 void Init(wxAlignment align
, int flags
, int width
);
340 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn
)
343 WX_DECLARE_LIST_WITH_DECL(wxDataViewColumn
, wxDataViewColumnList
,
344 class WXDLLIMPEXP_ADV
);
346 // ---------------------------------------------------------
348 // ---------------------------------------------------------
350 class WXDLLIMPEXP_ADV wxDataViewCtrl
: public wxDataViewCtrlBase
358 wxDataViewCtrl( wxWindow
*parent
, wxWindowID id
,
359 const wxPoint
& pos
= wxDefaultPosition
,
360 const wxSize
& size
= wxDefaultSize
, long style
= 0,
361 const wxValidator
& validator
= wxDefaultValidator
)
363 Create(parent
, id
, pos
, size
, style
, validator
);
366 virtual ~wxDataViewCtrl();
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
);
375 virtual bool AssociateModel( wxDataViewModel
*model
);
377 virtual bool PrependColumn( wxDataViewColumn
*col
);
378 virtual bool AppendColumn( wxDataViewColumn
*col
);
379 virtual bool InsertColumn( unsigned int pos
, wxDataViewColumn
*col
);
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;
387 virtual wxDataViewColumn
*GetSortingColumn() const;
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();
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;
406 virtual void Expand( const wxDataViewItem
& item
);
407 virtual void Collapse( const wxDataViewItem
& item
);
409 static wxVisualAttributes
410 GetClassDefaultAttributes(wxWindowVariant variant
= wxWINDOW_VARIANT_NORMAL
);
412 wxWindow
*GetMainWindow() { return (wxWindow
*) this; }
414 GtkWidget
*GtkGetTreeView() { return m_treeview
; }
415 wxDataViewCtrlInternal
* GtkGetInternal() { return m_internal
; }
417 virtual void OnInternalIdle();
420 virtual void DoSetExpanderColumn();
421 virtual void DoSetIndent();
424 friend class wxDataViewCtrlDCImpl
;
425 friend class wxDataViewColumn
;
426 friend class wxGtkDataViewModelNotifier
;
427 friend class wxDataViewCtrlInternal
;
429 GtkWidget
*m_treeview
;
430 wxDataViewModelNotifier
*m_notifier
;
431 wxDataViewCtrlInternal
*m_internal
;
432 wxDataViewColumnList m_cols
;
434 void GtkEnableSelectionEvents();
435 void GtkDisableSelectionEvents();
437 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl
)
438 DECLARE_NO_COPY_CLASS(wxDataViewCtrl
)
442 #endif // _WX_GTKDATAVIEWCTRL_H_