]>
Commit | Line | Data |
---|---|---|
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 |