1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/dvrenderers.h
3 // Purpose: All GTK wxDataViewCtrl renderer classes
4 // Author: Robert Roebling, Vadim Zeitlin
5 // Created: 2009-11-07 (extracted from wx/gtk/dataview.h)
7 // Copyright: (c) 2006 Robert Roebling
8 // (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_GTK_DVRENDERERS_H_
13 #define _WX_GTK_DVRENDERERS_H_
15 typedef struct _GdkRectangle GdkRectangle
;
17 // ---------------------------------------------------------
18 // wxDataViewTextRenderer
19 // ---------------------------------------------------------
21 class WXDLLIMPEXP_ADV wxDataViewTextRenderer
: public wxDataViewRenderer
24 wxDataViewTextRenderer( const wxString
&varianttype
= "string",
25 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
26 int align
= wxDVR_DEFAULT_ALIGNMENT
);
28 virtual bool SetValue( const wxVariant
&value
)
30 return SetTextValue(value
);
33 virtual bool GetValue( wxVariant
&value
) const
36 if ( !GetTextValue(str
) )
44 virtual void SetAlignment( int align
);
46 virtual bool GtkSupportsAttrs() const { return true; }
47 virtual bool GtkSetAttr(const wxDataViewItemAttr
& attr
);
49 virtual GtkCellRendererText
*GtkGetTextRenderer() const;
52 // implementation of Set/GetValue()
53 bool SetTextValue(const wxString
& str
);
54 bool GetTextValue(wxString
& str
) const;
57 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer
)
60 // ---------------------------------------------------------
61 // wxDataViewBitmapRenderer
62 // ---------------------------------------------------------
64 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer
: public wxDataViewRenderer
67 wxDataViewBitmapRenderer( const wxString
&varianttype
= "wxBitmap",
68 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
69 int align
= wxDVR_DEFAULT_ALIGNMENT
);
71 bool SetValue( const wxVariant
&value
);
72 bool GetValue( wxVariant
&value
) const;
75 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer
)
78 // ---------------------------------------------------------
79 // wxDataViewToggleRenderer
80 // ---------------------------------------------------------
82 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer
: public wxDataViewRenderer
85 wxDataViewToggleRenderer( const wxString
&varianttype
= "bool",
86 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
87 int align
= wxDVR_DEFAULT_ALIGNMENT
);
89 bool SetValue( const wxVariant
&value
);
90 bool GetValue( wxVariant
&value
) const;
93 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer
)
96 // ---------------------------------------------------------
97 // wxDataViewCustomRenderer
98 // ---------------------------------------------------------
100 class WXDLLIMPEXP_ADV wxDataViewCustomRenderer
: public wxDataViewCustomRendererBase
103 wxDataViewCustomRenderer( const wxString
&varianttype
= "string",
104 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
105 int align
= wxDVR_DEFAULT_ALIGNMENT
,
106 bool no_init
= false );
107 virtual ~wxDataViewCustomRenderer();
110 // Create DC on request
111 virtual wxDC
*GetDC();
113 // override the base class function to use GTK text cell renderer
114 virtual void RenderText(const wxString
& text
,
120 // store GTK render call parameters for possible later use
121 void GTKStashRenderParams(GdkWindow
*window
,
123 GdkRectangle
*background_area
,
124 GdkRectangle
*expose_area
,
127 m_renderParams
.window
= window
;
128 m_renderParams
.widget
= widget
;
129 m_renderParams
.background_area
= background_area
;
130 m_renderParams
.expose_area
= expose_area
;
131 m_renderParams
.flags
= flags
;
134 // we may or not support attributes, as we don't know it, return true to
135 // make it possible to use them
136 virtual bool GtkSupportsAttrs() const { return true; }
138 virtual bool GtkSetAttr(const wxDataViewItemAttr
& attr
)
141 return !attr
.IsDefault();
144 virtual GtkCellRendererText
*GtkGetTextRenderer() const;
147 bool Init(wxDataViewCellMode mode
, int align
);
152 GtkCellRendererText
*m_text_renderer
;
154 // parameters of the original render() call stored so that we could pass
155 // them forward to m_text_renderer if our RenderText() is called
156 struct GTKRenderParams
160 GdkRectangle
*background_area
;
161 GdkRectangle
*expose_area
;
165 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer
)
168 // ---------------------------------------------------------
169 // wxDataViewProgressRenderer
170 // ---------------------------------------------------------
172 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer
: public wxDataViewCustomRenderer
175 wxDataViewProgressRenderer( const wxString
&label
= wxEmptyString
,
176 const wxString
&varianttype
= "long",
177 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
178 int align
= wxDVR_DEFAULT_ALIGNMENT
);
179 virtual ~wxDataViewProgressRenderer();
181 bool SetValue( const wxVariant
&value
);
182 bool GetValue( wxVariant
&value
) const;
184 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
);
185 virtual wxSize
GetSize() const;
194 // Flag used to indicate that we need to set the label because we were
195 // unable to do it in the ctor (see comments there).
196 bool m_needsToSetLabel
;
197 #endif // !wxUSE_UNICODE
200 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer
)
203 // ---------------------------------------------------------
204 // wxDataViewIconTextRenderer
205 // ---------------------------------------------------------
207 class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer
: public wxDataViewTextRenderer
210 wxDataViewIconTextRenderer( const wxString
&varianttype
= "wxDataViewIconText",
211 wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
,
212 int align
= wxDVR_DEFAULT_ALIGNMENT
);
213 virtual ~wxDataViewIconTextRenderer();
215 bool SetValue( const wxVariant
&value
);
216 bool GetValue( wxVariant
&value
) const;
218 virtual void GtkPackIntoColumn(GtkTreeViewColumn
*column
);
221 virtual void GtkOnCellChanged(const wxVariant
& value
,
222 const wxDataViewItem
& item
,
226 wxDataViewIconText m_value
;
228 // we use the base class m_renderer for the text and this one for the icon
229 GtkCellRenderer
*m_rendererIcon
;
231 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer
)
234 // ---------------------------------------------------------
235 // wxDataViewDateRenderer
236 // ---------------------------------------------------------
238 class WXDLLIMPEXP_ADV wxDataViewDateRenderer
: public wxDataViewCustomRenderer
241 wxDataViewDateRenderer( const wxString
&varianttype
= "datetime",
242 wxDataViewCellMode mode
= wxDATAVIEW_CELL_ACTIVATABLE
,
243 int align
= wxDVR_DEFAULT_ALIGNMENT
);
245 bool SetValue( const wxVariant
&value
);
246 bool GetValue( wxVariant
&value
) const;
248 virtual bool Render( wxRect cell
, wxDC
*dc
, int state
);
249 virtual wxSize
GetSize() const;
250 virtual bool Activate( const wxRect
& cell
,
251 wxDataViewModel
*model
,
252 const wxDataViewItem
&item
,
259 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer
)
262 // -------------------------------------
263 // wxDataViewChoiceRenderer
264 // -------------------------------------
266 class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer
: public wxDataViewCustomRenderer
269 wxDataViewChoiceRenderer(const wxArrayString
&choices
,
270 wxDataViewCellMode mode
= wxDATAVIEW_CELL_EDITABLE
,
271 int alignment
= wxDVR_DEFAULT_ALIGNMENT
);
272 virtual bool Render( wxRect rect
, wxDC
*dc
, int state
);
273 virtual wxSize
GetSize() const;
274 virtual bool SetValue( const wxVariant
&value
);
275 virtual bool GetValue( wxVariant
&value
) const;
277 void SetAlignment( int align
);
279 wxString
GetChoice(size_t index
) const { return m_choices
[index
]; }
280 const wxArrayString
& GetChoices() const { return m_choices
; }
283 wxArrayString m_choices
;
287 // ----------------------------------------------------------------------------
288 // wxDataViewChoiceByIndexRenderer
289 // ----------------------------------------------------------------------------
291 class WXDLLIMPEXP_ADV wxDataViewChoiceByIndexRenderer
: public wxDataViewChoiceRenderer
294 wxDataViewChoiceByIndexRenderer( const wxArrayString
&choices
,
295 wxDataViewCellMode mode
= wxDATAVIEW_CELL_EDITABLE
,
296 int alignment
= wxDVR_DEFAULT_ALIGNMENT
);
298 virtual bool SetValue( const wxVariant
&value
);
299 virtual bool GetValue( wxVariant
&value
) const;
302 virtual void GtkOnTextEdited(const gchar
*itempath
, const wxString
& str
);
307 #endif // _WX_GTK_DVRENDERERS_H_