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