From: Vadim Zeitlin Date: Tue, 10 Nov 2009 17:40:37 +0000 (+0000) Subject: Add custom renderer column to the list model example in dataview sample. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ef6833f9ab82e9298e428aac081f500a3c62c822 Add custom renderer column to the list model example in dataview sample. Add a column using custom renderer to the example using a list model with attributes to test attributes support -- currently they are ignored, but this will be fixed soon. Also make the custom renderer display somewhat more clear as previously it didn't depend at all on its value. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62588 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/samples/dataview/dataview.cpp b/samples/dataview/dataview.cpp index dccee4f9e8..993fca294b 100644 --- a/samples/dataview/dataview.cpp +++ b/samples/dataview/dataview.cpp @@ -150,15 +150,25 @@ private: class MyCustomRenderer: public wxDataViewCustomRenderer { public: - MyCustomRenderer( wxDataViewCellMode mode, int alignment ) : - wxDataViewCustomRenderer( wxString("long"), mode, alignment ) - { m_height = 25; } + MyCustomRenderer() + : wxDataViewCustomRenderer("string", + wxDATAVIEW_CELL_ACTIVATABLE, + wxALIGN_CENTER) + { } - virtual bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) ) + virtual bool Render( wxRect rect, wxDC *dc, int state ) { - dc->SetBrush( *wxRED_BRUSH ); + dc->SetBrush( *wxLIGHT_GREY_BRUSH ); dc->SetPen( *wxTRANSPARENT_PEN ); - dc->DrawRectangle( rect.Deflate(2) ); + + rect.Deflate(2); + dc->DrawRoundedRectangle( rect, 5 ); + + RenderText(m_value, + 0, // no offset + wxRect(dc->GetTextExtent(m_value)).CentreIn(rect), + dc, + state); return true; } @@ -182,20 +192,19 @@ public: virtual wxSize GetSize() const { - //return wxSize(60,m_height); return wxSize(60,20); } virtual bool SetValue( const wxVariant &value ) { - m_height = value; + m_value = value.GetString(); return true; } virtual bool GetValue( wxVariant &WXUNUSED(value) ) const { return true; } private: - long m_height; + wxString m_value; }; @@ -523,7 +532,7 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l // column 5 of the view control: - MyCustomRenderer *cr = new MyCustomRenderer( wxDATAVIEW_CELL_ACTIVATABLE, wxALIGN_RIGHT ); + MyCustomRenderer *cr = new MyCustomRenderer; wxDataViewColumn *column5 = new wxDataViewColumn( "custom", cr, 5, -1, wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE ); @@ -556,6 +565,12 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l new wxDataViewTextRenderer, MyListModel::Col_TextWithAttr) ); + + m_ctrl[1]->AppendColumn( + new wxDataViewColumn("custom renderer", + new MyCustomRenderer, + MyListModel::Col_Custom) + ); } break; diff --git a/samples/dataview/mymodels.cpp b/samples/dataview/mymodels.cpp index c3bf1ff87a..85cca7a478 100644 --- a/samples/dataview/mymodels.cpp +++ b/samples/dataview/mymodels.cpp @@ -203,18 +203,13 @@ void MyMusicTreeModel::GetValue( wxVariant &variant, variant = node->m_quality; break; case 4: - // wxMac doesn't conceal the popularity progress renderer, return 0 for containers - if (IsContainer(item)) - variant = (long) 0; - else - variant = (long) 80; // all music is very 80% popular + variant = 80L; // all music is very 80% popular break; case 5: - // Make size of red square depend on year if (GetYear(item) < 1900) - variant = (long) 35; + variant = "old"; else - variant = (long) 25; + variant = "new"; break; default: @@ -436,6 +431,10 @@ void MyListModel::GetValueByRow( wxVariant &variant, } break; + case Col_Custom: + variant = wxString::Format("%d", row % 100); + break; + case Col_Max: wxFAIL_MSG( "invalid column" ); } @@ -456,7 +455,8 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col, break; case Col_TextWithAttr: - // do what the labels defined above hint at + case Col_Custom: + // do what the labels defined in GetValueByRow() hint at switch ( row % 5 ) { case 0: @@ -517,6 +517,7 @@ bool MyListModel::SetValueByRow( const wxVariant &variant, return true; case Col_TextWithAttr: + case Col_Custom: wxLogError("Cannot edit the column %d", col); break; diff --git a/samples/dataview/mymodels.h b/samples/dataview/mymodels.h index 6d110d645e..a0b98bc832 100644 --- a/samples/dataview/mymodels.h +++ b/samples/dataview/mymodels.h @@ -193,6 +193,7 @@ public: Col_EditableText, Col_IconText, Col_TextWithAttr, + Col_Custom, Col_Max };