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
class MyCustomRenderer: public wxDataViewCustomRenderer
{
public:
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->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);
virtual wxSize GetSize() const
{
virtual wxSize GetSize() const
{
- //return wxSize(60,m_height);
return wxSize(60,20);
}
virtual bool SetValue( const wxVariant &value )
{
return wxSize(60,20);
}
virtual bool SetValue( const wxVariant &value )
{
+ m_value = value.GetString();
return true;
}
virtual bool GetValue( wxVariant &WXUNUSED(value) ) const { return true; }
private:
return true;
}
virtual bool GetValue( wxVariant &WXUNUSED(value) ) const { return true; }
private:
// column 5 of the view control:
// 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 );
wxDataViewColumn *column5 =
new wxDataViewColumn( "custom", cr, 5, -1, wxALIGN_LEFT,
wxDATAVIEW_COL_RESIZABLE );
new wxDataViewTextRenderer,
MyListModel::Col_TextWithAttr)
);
new wxDataViewTextRenderer,
MyListModel::Col_TextWithAttr)
);
+
+ m_ctrl[1]->AppendColumn(
+ new wxDataViewColumn("custom renderer",
+ new MyCustomRenderer,
+ MyListModel::Col_Custom)
+ );
variant = node->m_quality;
break;
case 4:
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
- // Make size of red square depend on year
if (GetYear(item) < 1900)
if (GetYear(item) < 1900)
+ case Col_Custom:
+ variant = wxString::Format("%d", row % 100);
+ break;
+
case Col_Max:
wxFAIL_MSG( "invalid column" );
}
case Col_Max:
wxFAIL_MSG( "invalid column" );
}
break;
case Col_TextWithAttr:
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:
switch ( row % 5 )
{
case 0:
return true;
case Col_TextWithAttr:
return true;
case Col_TextWithAttr:
wxLogError("Cannot edit the column %d", col);
break;
wxLogError("Cannot edit the column %d", col);
break;
Col_EditableText,
Col_IconText,
Col_TextWithAttr,
Col_EditableText,
Col_IconText,
Col_TextWithAttr,