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 __GTKDATAVIEWCTRLH__
11 #define __GTKDATAVIEWCTRLH__
14 #include "wx/object.h"
16 #include "wx/control.h"
18 // ---------------------------------------------------------
20 // ---------------------------------------------------------
22 class WXDLLIMPEXP_FWD_CORE wxDataViewCtrl
;
23 class WXDLLIMPEXP_FWD_CORE wxDataViewCtrlInternal
;
26 // ---------------------------------------------------------
28 // ---------------------------------------------------------
30 class wxDataViewRenderer
: public wxDataViewRendererBase
33 wxDataViewRenderer( const wxString
&varianttype
,
34 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
35 int align
= wxDVR_DEFAULT_ALIGNMENT
);
37 virtual void SetMode( wxDataViewCellMode mode
);
38 virtual wxDataViewCellMode
GetMode() const;
40 virtual void SetAlignment( int align
);
41 virtual int GetAlignment() const;
44 GtkCellRenderer
* GetGtkHandle() { return m_renderer
; }
45 void GtkInitHandlers();
48 GtkCellRenderer
*m_renderer
;
51 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer
)
54 // ---------------------------------------------------------
55 // wxDataViewTextRenderer
56 // ---------------------------------------------------------
58 class 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 // wxDataViewBitmapRenderer
76 // ---------------------------------------------------------
78 class wxDataViewBitmapRenderer
: public wxDataViewRenderer
81 wxDataViewBitmapRenderer( const wxString
&varianttype
= wxT("wxBitmap"),
82 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
83 int align
= wxDVR_DEFAULT_ALIGNMENT
);
85 bool SetValue( const wxVariant
&value
);
86 bool GetValue( wxVariant
&value
) const;
89 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer
)
92 // ---------------------------------------------------------
93 // wxDataViewToggleRenderer
94 // ---------------------------------------------------------
96 class wxDataViewToggleRenderer
: public wxDataViewRenderer
99 wxDataViewToggleRenderer( const wxString
&varianttype
= wxT("bool"),
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(wxDataViewToggleRenderer
)
110 // ---------------------------------------------------------
111 // wxDataViewCustomRenderer
112 // ---------------------------------------------------------
114 class wxDataViewCustomRenderer
: public wxDataViewRenderer
117 wxDataViewCustomRenderer( const wxString
&varianttype
= wxT("string"),
118 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
119 int align
= wxDVR_DEFAULT_ALIGNMENT
,
120 bool no_init
= false );
121 virtual ~wxDataViewCustomRenderer();
124 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
) = 0;
125 virtual wxSize
GetSize() const = 0;
127 virtual bool Activate( wxRect cell
,
128 wxDataViewModel
*model
, const wxDataViewItem
&item
, unsigned int col
)
131 virtual bool LeftClick( wxPoint cursor
, wxRect cell
,
132 wxDataViewModel
*model
, const wxDataViewItem
&item
, unsigned int col
)
134 virtual bool RightClick( wxPoint cursor
, wxRect cell
,
135 wxDataViewModel
*model
, const wxDataViewItem
&item
, unsigned int col
)
137 virtual bool StartDrag( wxPoint cursor
, wxRect cell
,
138 wxDataViewModel
*model
, const wxDataViewItem
&item
, unsigned int col
)
141 // Create DC on request
142 virtual wxDC
*GetDC();
147 bool Init(wxDataViewCellMode mode
, int align
);
153 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer
)
156 // ---------------------------------------------------------
157 // wxDataViewProgressRenderer
158 // ---------------------------------------------------------
160 class wxDataViewProgressRenderer
: public wxDataViewCustomRenderer
163 wxDataViewProgressRenderer( const wxString
&label
= wxEmptyString
,
164 const wxString
&varianttype
= wxT("long"),
165 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
166 int align
= wxDVR_DEFAULT_ALIGNMENT
);
167 virtual ~wxDataViewProgressRenderer();
169 bool SetValue( const wxVariant
&value
);
170 bool GetValue( wxVariant
&value
) const;
172 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
);
173 virtual wxSize
GetSize() const;
180 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer
)
183 // ---------------------------------------------------------
184 // wxDataViewDateRenderer
185 // ---------------------------------------------------------
187 class wxDataViewDateRenderer
: public wxDataViewCustomRenderer
190 wxDataViewDateRenderer( const wxString
&varianttype
= wxT("datetime"),
191 wxDataViewCellMode mode
= wxDATAVIEW_CELL_ACTIVATABLE
,
192 int align
= wxDVR_DEFAULT_ALIGNMENT
);
194 bool SetValue( const wxVariant
&value
);
195 bool GetValue( wxVariant
&value
) const;
197 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
);
198 virtual wxSize
GetSize() const;
199 virtual bool Activate( wxRect cell
,
200 wxDataViewModel
*model
, const wxDataViewItem
&item
, unsigned int col
);
206 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer
)
209 // ---------------------------------------------------------
211 // ---------------------------------------------------------
213 class WXDLLIMPEXP_CORE wxDataViewColumn
: public wxDataViewColumnBase
216 wxDataViewColumn( const wxString
&title
, wxDataViewRenderer
*renderer
,
217 unsigned int model_column
, int width
= wxDVC_DEFAULT_WIDTH
,
218 wxAlignment align
= wxALIGN_CENTER
,
219 int flags
= wxDATAVIEW_COL_RESIZABLE
);
220 wxDataViewColumn( const wxBitmap
&bitmap
, wxDataViewRenderer
*renderer
,
221 unsigned int model_column
, int width
= wxDVC_DEFAULT_WIDTH
,
222 wxAlignment align
= wxALIGN_CENTER
,
223 int flags
= wxDATAVIEW_COL_RESIZABLE
);
225 virtual ~wxDataViewColumn();
230 virtual void SetTitle( const wxString
&title
);
231 virtual void SetBitmap( const wxBitmap
&bitmap
);
233 virtual void SetOwner( wxDataViewCtrl
*owner
);
235 virtual void SetAlignment( wxAlignment align
);
237 virtual void SetSortable( bool sortable
);
238 virtual void SetSortOrder( bool ascending
);
240 virtual void SetResizeable( bool resizeable
);
241 virtual void SetHidden( bool hidden
);
243 virtual void SetMinWidth( int minWidth
);
244 virtual void SetWidth( int width
);
249 virtual wxString
GetTitle() const;
250 virtual wxAlignment
GetAlignment() const;
252 virtual bool IsSortable() const;
253 virtual bool IsSortOrderAscending() const;
254 virtual bool IsResizeable() const;
255 virtual bool IsHidden() const;
257 virtual int GetWidth() const;
258 virtual int GetMinWidth() const;
261 GtkWidget
* GetGtkHandle() { return m_column
; }
264 // holds the GTK handle
267 // delayed connection to mouse events
268 friend class wxDataViewCtrl
;
269 void OnInternalIdle();
272 void Init(wxAlignment align
, int flags
, int width
);
275 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn
)
278 // ---------------------------------------------------------
280 // ---------------------------------------------------------
282 class WXDLLIMPEXP_CORE wxDataViewCtrl
: public wxDataViewCtrlBase
290 wxDataViewCtrl( wxWindow
*parent
, wxWindowID id
,
291 const wxPoint
& pos
= wxDefaultPosition
,
292 const wxSize
& size
= wxDefaultSize
, long style
= 0,
293 const wxValidator
& validator
= wxDefaultValidator
)
295 Create(parent
, id
, pos
, size
, style
, validator
);
298 virtual ~wxDataViewCtrl();
302 bool Create(wxWindow
*parent
, wxWindowID id
,
303 const wxPoint
& pos
= wxDefaultPosition
,
304 const wxSize
& size
= wxDefaultSize
, long style
= 0,
305 const wxValidator
& validator
= wxDefaultValidator
);
307 virtual bool AssociateModel( wxDataViewModel
*model
);
308 virtual bool AppendColumn( wxDataViewColumn
*col
);
310 virtual wxDataViewItem
GetSelection() const;
311 virtual int GetSelections( wxDataViewItemArray
& sel
) const;
312 virtual void SetSelections( const wxDataViewItemArray
& sel
);
313 virtual void Select( const wxDataViewItem
& item
);
314 virtual void Unselect( const wxDataViewItem
& item
);
315 virtual bool IsSelected( const wxDataViewItem
& item
) const;
316 virtual void SelectAll();
317 virtual void UnselectAll();
319 virtual void EnsureVisible( const wxDataViewItem
& item
,
320 const wxDataViewColumn
*column
= NULL
);
321 virtual void HitTest( const wxPoint
&point
,
322 wxDataViewItem
&item
,
323 wxDataViewColumn
*&column
) const;
324 virtual wxRect
GetItemRect( const wxDataViewItem
&item
,
325 const wxDataViewColumn
*column
= NULL
) const;
327 virtual void Expand( const wxDataViewItem
& item
);
328 virtual void Collapse( const wxDataViewItem
& item
);
330 static wxVisualAttributes
331 GetClassDefaultAttributes(wxWindowVariant variant
= wxWINDOW_VARIANT_NORMAL
);
333 wxWindow
*GetMainWindow() { return (wxWindow
*) this; }
335 GtkWidget
*GtkGetTreeView() { return m_treeview
; }
336 wxDataViewCtrlInternal
* GtkGetInternal() { return m_internal
; }
339 virtual void DoSetExpanderColumn();
340 virtual void DoSetIndent();
343 friend class wxDataViewCtrlDC
;
344 friend class wxDataViewColumn
;
345 friend class wxGtkDataViewModelNotifier
;
346 GtkWidget
*m_treeview
;
347 wxDataViewModelNotifier
*m_notifier
;
348 wxDataViewCtrlInternal
*m_internal
;
351 virtual void OnInternalIdle();
353 void GtkEnableSelectionEvents();
354 void GtkDisableSelectionEvents();
357 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl
)
358 DECLARE_NO_COPY_CLASS(wxDataViewCtrl
)
362 #endif // __GTKDATAVIEWCTRLH__