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:
@@ -109,13 +109,16 @@ public:
|
||||
void SetOwner( wxDataViewColumn *owner ) { m_owner = owner; }
|
||||
wxDataViewColumn* GetOwner() const { return m_owner; }
|
||||
|
||||
// renderer properties:
|
||||
// renderer value and attributes: SetValue() and SetAttr() are called
|
||||
// before a cell is rendered using this renderer
|
||||
virtual bool SetValue(const wxVariant& value) = 0;
|
||||
virtual bool GetValue(wxVariant& value) const = 0;
|
||||
|
||||
virtual bool SetValue( const wxVariant& WXUNUSED(value) ) = 0;
|
||||
virtual bool GetValue( wxVariant& WXUNUSED(value) ) const = 0;
|
||||
virtual void SetAttr(const wxDataViewItemAttr& WXUNUSED(attr)) { }
|
||||
|
||||
wxString GetVariantType() const { return m_variantType; }
|
||||
|
||||
// renderer properties:
|
||||
virtual void SetMode( wxDataViewCellMode mode ) = 0;
|
||||
virtual wxDataViewCellMode GetMode() const = 0;
|
||||
|
||||
@@ -204,6 +207,12 @@ public:
|
||||
}
|
||||
|
||||
|
||||
// Render the item using the current value (returned by GetValue()).
|
||||
virtual bool Render(wxRect cell, wxDC *dc, int state) = 0;
|
||||
|
||||
// Return the size of the item appropriate to its current value.
|
||||
virtual wxSize GetSize() const = 0;
|
||||
|
||||
// Define virtual function which are called when the item is activated
|
||||
// (double-clicked or Enter is pressed on it), clicked or the user starts
|
||||
// to drag it: by default they all simply return false indicating that the
|
||||
@@ -230,7 +239,34 @@ public:
|
||||
{ return false; }
|
||||
|
||||
|
||||
// Helper which can be used by Render() implementation in the derived
|
||||
// classes: it will draw the text in the same manner as the standard
|
||||
// renderers do.
|
||||
virtual void RenderText(const wxString& text,
|
||||
int xoffset,
|
||||
wxRect cell,
|
||||
wxDC *dc,
|
||||
int state);
|
||||
|
||||
|
||||
// Override the base class virtual method to simply store the attribute so
|
||||
// that it can be accessed using GetAttr() from Render() if needed.
|
||||
virtual void SetAttr(const wxDataViewItemAttr& attr) { m_attr = attr; }
|
||||
const wxDataViewItemAttr& GetAttr() const { return m_attr; }
|
||||
|
||||
|
||||
// Implementation only from now on
|
||||
|
||||
// Retrieve the DC to use for drawing. This is implemented in derived
|
||||
// platform-specific classes.
|
||||
virtual wxDC *GetDC() = 0;
|
||||
|
||||
// Prepare DC to use attributes and call Render().
|
||||
void WXCallRender(wxRect rect, wxDC *dc, int state);
|
||||
|
||||
private:
|
||||
wxDataViewItemAttr m_attr;
|
||||
|
||||
wxDECLARE_NO_COPY_CLASS(wxDataViewCustomRendererBase);
|
||||
};
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -44,17 +44,8 @@ public:
|
||||
bool SetValue( const wxVariant &value );
|
||||
bool GetValue( wxVariant &value ) const;
|
||||
|
||||
virtual bool RenderWithAttr(wxDC& dc,
|
||||
const wxRect& rect,
|
||||
int align,
|
||||
const wxDataViewItemAttr *attr,
|
||||
int state);
|
||||
virtual bool Render(wxRect cell, wxDC *dc, int state)
|
||||
{
|
||||
return DummyRender(cell, dc, state);
|
||||
}
|
||||
|
||||
wxSize GetSize() const;
|
||||
virtual bool Render(wxRect cell, wxDC *dc, int state);
|
||||
virtual wxSize GetSize() const;
|
||||
|
||||
// in-place editing
|
||||
virtual bool HasEditorCtrl() const;
|
||||
@@ -135,15 +126,7 @@ public:
|
||||
bool SetValue( const wxVariant &value );
|
||||
bool GetValue( wxVariant& value ) const;
|
||||
|
||||
virtual bool RenderWithAttr(wxDC& dc,
|
||||
const wxRect& rect,
|
||||
int align,
|
||||
const wxDataViewItemAttr *attr,
|
||||
int state);
|
||||
virtual bool Render(wxRect cell, wxDC *dc, int state)
|
||||
{
|
||||
return DummyRender(cell, dc, state);
|
||||
}
|
||||
virtual bool Render(wxRect cell, wxDC *dc, int state);
|
||||
virtual wxSize GetSize() const;
|
||||
|
||||
private:
|
||||
@@ -168,15 +151,7 @@ public:
|
||||
bool SetValue( const wxVariant &value );
|
||||
bool GetValue( wxVariant &value ) const;
|
||||
|
||||
virtual bool RenderWithAttr(wxDC& dc,
|
||||
const wxRect& rect,
|
||||
int align,
|
||||
const wxDataViewItemAttr *attr,
|
||||
int state);
|
||||
virtual bool Render(wxRect cell, wxDC *dc, int state)
|
||||
{
|
||||
return DummyRender(cell, dc, state);
|
||||
}
|
||||
virtual bool Render(wxRect cell, wxDC *dc, int state);
|
||||
virtual wxSize GetSize() const;
|
||||
|
||||
virtual bool HasEditorCtrl() const { return true; }
|
||||
|
@@ -100,15 +100,15 @@ public:
|
||||
virtual ~wxDataViewCustomRenderer();
|
||||
|
||||
|
||||
virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
|
||||
|
||||
void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
|
||||
|
||||
virtual wxSize GetSize() const = 0;
|
||||
|
||||
// Create DC on request
|
||||
virtual wxDC *GetDC();
|
||||
|
||||
// override the base class function to use GTK text cell renderer
|
||||
virtual void RenderText(const wxString& text,
|
||||
int xoffset,
|
||||
wxRect cell,
|
||||
wxDC *dc,
|
||||
int state);
|
||||
|
||||
protected:
|
||||
|
||||
|
@@ -24,12 +24,6 @@ public:
|
||||
|
||||
virtual ~wxDataViewCustomRenderer();
|
||||
|
||||
void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
|
||||
|
||||
virtual wxSize GetSize() const = 0;
|
||||
|
||||
virtual bool Render(wxRect cell, wxDC* dc, int state) = 0;
|
||||
|
||||
|
||||
// implementation only
|
||||
// -------------------
|
||||
|
Reference in New Issue
Block a user