From 38c349189a580ed624e89fb9cc1065f46860092f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 12 Oct 2009 22:44:15 +0000 Subject: [PATCH] Implement attributes support in generic wxDataViewIconTextRenderer. Simply override RenderWithAttr() instead of Render(). Update the sample to show that this works now. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62395 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/dataview.h | 11 +++++++-- samples/dataview/mymodels.cpp | 45 ++++++++++++++++++++++------------- src/generic/datavgen.cpp | 22 +++++++++-------- 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/include/wx/generic/dataview.h b/include/wx/generic/dataview.h index 66090fa892..27148332da 100644 --- a/include/wx/generic/dataview.h +++ b/include/wx/generic/dataview.h @@ -275,12 +275,19 @@ public: wxDataViewIconTextRenderer( const wxString &varianttype = wxT("wxDataViewIconText"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT ); - virtual ~wxDataViewIconTextRenderer(); bool SetValue( const wxVariant &value ); bool GetValue( wxVariant &value ) const; - virtual bool Render( wxRect cell, wxDC *dc, int state ); + 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 wxSize GetSize() const; virtual bool HasEditorCtrl() const { return true; } diff --git a/samples/dataview/mymodels.cpp b/samples/dataview/mymodels.cpp index 13cdd6704f..d8854606d3 100644 --- a/samples/dataview/mymodels.cpp +++ b/samples/dataview/mymodels.cpp @@ -430,31 +430,42 @@ void MyListModel::GetValueByRow( wxVariant &variant, bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, wxDataViewItemAttr &attr ) { - if (col != 2) - return false; - - // do what the labels defined above hint at - switch ( row % 5 ) + switch ( col ) { case 0: - attr.SetColour(*wxBLUE); - break; + return false; case 1: - attr.SetColour(*wxGREEN); + if ( !(row % 2) ) + return false; + attr.SetColour(*wxLIGHT_GREY); break; case 2: - attr.SetColour(*wxRED); - break; - - case 3: - attr.SetColour(*wxCYAN); - attr.SetBold(true); + // do what the labels defined above hint at + switch ( row % 5 ) + { + case 0: + attr.SetColour(*wxBLUE); + break; + + case 1: + attr.SetColour(*wxGREEN); + break; + + case 2: + attr.SetColour(*wxRED); + break; + + case 3: + attr.SetColour(*wxCYAN); + attr.SetBold(true); + break; + + case 4: + return false; + } break; - - case 4: - return false; } return true; diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 1653ebfcca..06a43cfd93 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -1108,10 +1108,6 @@ const wxString &varianttype, wxDataViewCellMode mode, int align ) : SetAlignment(align); } -wxDataViewIconTextRenderer::~wxDataViewIconTextRenderer() -{ -} - bool wxDataViewIconTextRenderer::SetValue( const wxVariant &value ) { m_value << value; @@ -1123,17 +1119,23 @@ bool wxDataViewIconTextRenderer::GetValue( wxVariant& WXUNUSED(value) ) const return false; } -bool wxDataViewIconTextRenderer::Render( wxRect cell, wxDC *dc, int state ) +bool +wxDataViewIconTextRenderer::RenderWithAttr(wxDC& dc, + const wxRect& rect, + int align, + const wxDataViewItemAttr *attr, + int state) { int xoffset = 0; - const wxIcon &icon = m_value.GetIcon(); - if (icon.IsOk()) + + const wxIcon& icon = m_value.GetIcon(); + if ( icon.IsOk() ) { - dc->DrawIcon( icon, cell.x, cell.y + ((cell.height - icon.GetHeight()) / 2)); - xoffset = icon.GetWidth()+4; + dc.DrawIcon(icon, rect.x, rect.y + (rect.height - icon.GetHeight())/2); + xoffset = icon.GetWidth()+4; } - RenderText( m_value.GetText(), xoffset, cell, dc, state ); + RenderText(dc, rect, align, m_value.GetText(), attr, state, xoffset); return true; } -- 2.47.2