+ wxDataViewRenderer( const wxString &varianttype,
+ wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+ int align = wxDVR_DEFAULT_ALIGNMENT );
+ virtual ~wxDataViewRenderer();
+
+ // these methods are used to draw the cell contents, Render() doesn't care
+ // about the attributes while RenderWithAttr() does -- override it if you
+ // want to take the attributes defined for this cell into account, otherwise
+ // overriding Render() is enough
+ virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
+
+ // NB: RenderWithAttr() also has more standard parameter order and types
+ virtual bool
+ RenderWithAttr(wxDC& dc,
+ const wxRect& rect,
+ int align, // combination of horizontal and vertical
+ const wxDataViewItemAttr *attr, // may be NULL if none
+ int state);
+
+ virtual wxSize GetSize() const = 0;
+
+ virtual void SetAlignment( int align );
+ virtual int GetAlignment() const;
+
+ virtual void EnableEllipsize(wxEllipsizeMode mode = wxELLIPSIZE_MIDDLE)
+ { m_ellipsizeMode = mode; }
+ virtual wxEllipsizeMode GetEllipsizeMode() const
+ { return m_ellipsizeMode; }
+
+ virtual void SetMode( wxDataViewCellMode mode )
+ { m_mode=mode; }
+ virtual wxDataViewCellMode GetMode() const
+ { return m_mode; }
+
+ virtual bool Activate( wxRect WXUNUSED(cell),
+ wxDataViewModel *WXUNUSED(model),
+ const wxDataViewItem & WXUNUSED(item),
+ unsigned int WXUNUSED(col) )
+ { return false; }
+
+ virtual bool LeftClick( wxPoint WXUNUSED(cursor),
+ wxRect WXUNUSED(cell),
+ wxDataViewModel *WXUNUSED(model),
+ const wxDataViewItem & WXUNUSED(item),
+ unsigned int WXUNUSED(col) )
+ { return false; }
+ virtual bool RightClick( wxPoint WXUNUSED(cursor),
+ wxRect WXUNUSED(cell),
+ wxDataViewModel *WXUNUSED(model),
+ const wxDataViewItem & WXUNUSED(item),
+ unsigned int WXUNUSED(col) )
+ { return false; }
+ virtual bool StartDrag( wxPoint WXUNUSED(cursor),
+ wxRect WXUNUSED(cell),
+ wxDataViewModel *WXUNUSED(model),
+ const wxDataViewItem & WXUNUSED(item),
+ unsigned int WXUNUSED(col) )
+ { return false; }
+
+ // Create DC on request
+ virtual wxDC *GetDC();
+
+ // implementation
+ int CalculateAlignment() const;
+
+protected:
+ // This is just a convenience for the derived classes overriding
+ // RenderWithAttr() to avoid repeating the same wxFAIL_MSG() in all of them
+ bool DummyRender(wxRect WXUNUSED(cell),
+ wxDC * WXUNUSED(dc),
+ int WXUNUSED(state))
+ {
+ wxFAIL_MSG("shouldn't be called at all, use RenderWithAttr() instead");
+
+ return false;
+ }
+
+private:
+ wxDC *m_dc;
+ int m_align;
+ wxDataViewCellMode m_mode;
+
+ wxEllipsizeMode m_ellipsizeMode;
+
+ DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer)
+};
+
+// ---------------------------------------------------------
+// wxDataViewCustomRenderer
+// ---------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewRenderer
+{
+public:
+ wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"),
+ wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+ int align = wxDVR_DEFAULT_ALIGNMENT );
+
+ // Draw the text using the provided attributes
+ void RenderText(wxDC& dc,
+ const wxRect& rect,
+ int align,
+ const wxString& text,
+ const wxDataViewItemAttr *attr, // may be NULL if none
+ int state,
+ int xoffset = 0);
+
+ // Overload using standard attributes
+ void RenderText(const wxString& text,
+ int xoffset,
+ wxRect cell,
+ wxDC *dc,
+ int state)
+ {
+ RenderText(*dc, cell, wxALIGN_NOT, text, NULL, state, xoffset);
+ }