]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/dvrenderers.h
Reset sorting column in generic wxDataViewCtrl properly.
[wxWidgets.git] / include / wx / gtk / dvrenderers.h
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)
6 // RCS-ID: $Id$
7 // Copyright: (c) 2006 Robert Roebling
8 // (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_GTK_DVRENDERERS_H_
13 #define _WX_GTK_DVRENDERERS_H_
14
15 #ifdef __WXGTK3__
16 typedef struct _cairo_rectangle_int cairo_rectangle_int_t;
17 typedef cairo_rectangle_int_t GdkRectangle;
18 #else
19 typedef struct _GdkRectangle GdkRectangle;
20 #endif
21
22 // ---------------------------------------------------------
23 // wxDataViewTextRenderer
24 // ---------------------------------------------------------
25
26 class WXDLLIMPEXP_ADV wxDataViewTextRenderer: public wxDataViewRenderer
27 {
28 public:
29 wxDataViewTextRenderer( const wxString &varianttype = "string",
30 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
31 int align = wxDVR_DEFAULT_ALIGNMENT );
32
33 virtual bool SetValue( const wxVariant &value )
34 {
35 return SetTextValue(value);
36 }
37
38 virtual bool GetValue( wxVariant &value ) const
39 {
40 wxString str;
41 if ( !GetTextValue(str) )
42 return false;
43
44 value = str;
45
46 return true;
47 }
48
49 virtual void SetAlignment( int align );
50
51 virtual bool GtkSupportsAttrs() const { return true; }
52 virtual bool GtkSetAttr(const wxDataViewItemAttr& attr);
53
54 virtual GtkCellRendererText *GtkGetTextRenderer() const;
55
56 protected:
57 // implementation of Set/GetValue()
58 bool SetTextValue(const wxString& str);
59 bool GetTextValue(wxString& str) const;
60
61
62 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
63 };
64
65 // ---------------------------------------------------------
66 // wxDataViewBitmapRenderer
67 // ---------------------------------------------------------
68
69 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer: public wxDataViewRenderer
70 {
71 public:
72 wxDataViewBitmapRenderer( const wxString &varianttype = "wxBitmap",
73 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
74 int align = wxDVR_DEFAULT_ALIGNMENT );
75
76 bool SetValue( const wxVariant &value );
77 bool GetValue( wxVariant &value ) const;
78
79 protected:
80 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer)
81 };
82
83 // ---------------------------------------------------------
84 // wxDataViewToggleRenderer
85 // ---------------------------------------------------------
86
87 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewRenderer
88 {
89 public:
90 wxDataViewToggleRenderer( const wxString &varianttype = "bool",
91 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
92 int align = wxDVR_DEFAULT_ALIGNMENT );
93
94 bool SetValue( const wxVariant &value );
95 bool GetValue( wxVariant &value ) const;
96
97 protected:
98 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer)
99 };
100
101 // ---------------------------------------------------------
102 // wxDataViewCustomRenderer
103 // ---------------------------------------------------------
104
105 class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewCustomRendererBase
106 {
107 public:
108 wxDataViewCustomRenderer( const wxString &varianttype = "string",
109 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
110 int align = wxDVR_DEFAULT_ALIGNMENT,
111 bool no_init = false );
112 virtual ~wxDataViewCustomRenderer();
113
114
115 // Create DC on request
116 virtual wxDC *GetDC();
117
118 // override the base class function to use GTK text cell renderer
119 virtual void RenderText(const wxString& text,
120 int xoffset,
121 wxRect cell,
122 wxDC *dc,
123 int state);
124
125 struct GTKRenderParams;
126
127 // store GTK render call parameters for possible later use
128 void GTKSetRenderParams(GTKRenderParams* renderParams)
129 {
130 m_renderParams = renderParams;
131 }
132
133 // we may or not support attributes, as we don't know it, return true to
134 // make it possible to use them
135 virtual bool GtkSupportsAttrs() const { return true; }
136
137 virtual bool GtkSetAttr(const wxDataViewItemAttr& attr)
138 {
139 SetAttr(attr);
140 return !attr.IsDefault();
141 }
142
143 virtual GtkCellRendererText *GtkGetTextRenderer() const;
144
145 private:
146 bool Init(wxDataViewCellMode mode, int align);
147
148 // Called from GtkGetTextRenderer() to really create the renderer if
149 // necessary.
150 void GtkInitTextRenderer();
151
152 wxDC *m_dc;
153
154 GtkCellRendererText *m_text_renderer;
155
156 // parameters of the original render() call stored so that we could pass
157 // them forward to m_text_renderer if our RenderText() is called
158 GTKRenderParams* m_renderParams;
159
160 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
161 };
162
163 // ---------------------------------------------------------
164 // wxDataViewProgressRenderer
165 // ---------------------------------------------------------
166
167 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer: public wxDataViewCustomRenderer
168 {
169 public:
170 wxDataViewProgressRenderer( const wxString &label = wxEmptyString,
171 const wxString &varianttype = "long",
172 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
173 int align = wxDVR_DEFAULT_ALIGNMENT );
174 virtual ~wxDataViewProgressRenderer();
175
176 bool SetValue( const wxVariant &value );
177 bool GetValue( wxVariant &value ) const;
178
179 virtual bool Render( wxRect cell, wxDC *dc, int state );
180 virtual wxSize GetSize() const;
181
182 private:
183 void GTKSetLabel();
184
185 wxString m_label;
186 int m_value;
187
188 #if !wxUSE_UNICODE
189 // Flag used to indicate that we need to set the label because we were
190 // unable to do it in the ctor (see comments there).
191 bool m_needsToSetLabel;
192 #endif // !wxUSE_UNICODE
193
194 protected:
195 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer)
196 };
197
198 // ---------------------------------------------------------
199 // wxDataViewIconTextRenderer
200 // ---------------------------------------------------------
201
202 class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer: public wxDataViewTextRenderer
203 {
204 public:
205 wxDataViewIconTextRenderer( const wxString &varianttype = "wxDataViewIconText",
206 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
207 int align = wxDVR_DEFAULT_ALIGNMENT );
208 virtual ~wxDataViewIconTextRenderer();
209
210 bool SetValue( const wxVariant &value );
211 bool GetValue( wxVariant &value ) const;
212
213 virtual void GtkPackIntoColumn(GtkTreeViewColumn *column);
214
215 protected:
216 virtual void GtkOnCellChanged(const wxVariant& value,
217 const wxDataViewItem& item,
218 unsigned col);
219
220 private:
221 wxDataViewIconText m_value;
222
223 // we use the base class m_renderer for the text and this one for the icon
224 GtkCellRenderer *m_rendererIcon;
225
226 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer)
227 };
228
229 // -------------------------------------
230 // wxDataViewChoiceRenderer
231 // -------------------------------------
232
233 class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer: public wxDataViewCustomRenderer
234 {
235 public:
236 wxDataViewChoiceRenderer(const wxArrayString &choices,
237 wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
238 int alignment = wxDVR_DEFAULT_ALIGNMENT );
239 virtual bool Render( wxRect rect, wxDC *dc, int state );
240 virtual wxSize GetSize() const;
241 virtual bool SetValue( const wxVariant &value );
242 virtual bool GetValue( wxVariant &value ) const;
243
244 void SetAlignment( int align );
245
246 wxString GetChoice(size_t index) const { return m_choices[index]; }
247 const wxArrayString& GetChoices() const { return m_choices; }
248
249 private:
250 wxArrayString m_choices;
251 wxString m_data;
252 };
253
254 // ----------------------------------------------------------------------------
255 // wxDataViewChoiceByIndexRenderer
256 // ----------------------------------------------------------------------------
257
258 class WXDLLIMPEXP_ADV wxDataViewChoiceByIndexRenderer: public wxDataViewChoiceRenderer
259 {
260 public:
261 wxDataViewChoiceByIndexRenderer( const wxArrayString &choices,
262 wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
263 int alignment = wxDVR_DEFAULT_ALIGNMENT );
264
265 virtual bool SetValue( const wxVariant &value );
266 virtual bool GetValue( wxVariant &value ) const;
267
268 private:
269 virtual void GtkOnTextEdited(const char *itempath, const wxString& str);
270 };
271
272
273
274 #endif // _WX_GTK_DVRENDERERS_H_
275