Allow custom wxDataViewCtrl renderers to easily use attributes.

Set up the DC passed to wxDataViewCustomRenderer::Render() to use the font and
colour defined by the item attribute by default so that any calls to
RenderText() from it will use them automatically.

Also added public wxDataViewCustomRenderer::GetAttr() to allow retrieving the
attribute explicitly in Render().

The column using custom renderer in the dataview sample now works as expected
in the generic version; the native ones will be corrected in the upcoming
commits.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62590 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-11-10 17:41:11 +00:00
parent 6eec70b984
commit 62265c2c67
12 changed files with 201 additions and 263 deletions

View File

@@ -24,43 +24,8 @@ public:
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 wxDC *GetDC();
// 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);
}
virtual void SetAlignment( int align );
virtual int GetAlignment() const;
@@ -75,7 +40,6 @@ public:
{ return m_mode; }
// implementation
int CalculateAlignment() const;
// this is a replacement for dynamic_cast<wxDataViewCustomRenderer> in the
// code checking whether the renderer is interested in mouse events, it's
@@ -89,18 +53,6 @@ public:
// never be called
virtual wxDataViewCustomRenderer *WXGetAsCustom() { return NULL; }
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:
int m_align;
wxDataViewCellMode m_mode;