// helper method for wxLog
- wxString GetTitle( const wxDataViewItem &item )
+ wxString GetTitle( const wxDataViewItem &item ) const
{
MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
if (!node)
return node->m_title;
}
+ int GetYear( const wxDataViewItem &item ) const
+ {
+ MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
+ if (!node)
+ return 2000;
+
+ return node->m_year;
+ }
+
// helper methods to change the model
void AddToClassical( const wxString &title, const wxString &artist, int year )
if (res) return res;
// items must be different
- unsigned long litem1 = (unsigned long) item1.GetID();
- unsigned long litem2 = (unsigned long) item2.GetID();
+ wxUIntPtr litem1 = (wxUIntPtr) item1.GetID();
+ wxUIntPtr litem2 = (wxUIntPtr) item2.GetID();
return litem1-litem2;
}
virtual unsigned int GetColumnCount() const
{
- return 3;
+ return 5;
}
virtual wxString GetColumnType( unsigned int col ) const
case 0: variant = node->m_title; break;
case 1: variant = node->m_artist; break;
case 2: variant = (long) node->m_year; break;
+ case 3:
+ // 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
+ break;
+ case 4:
+ // Make size of red square depend on year
+ if (GetYear(item) < 1900)
+ variant = (long) 35;
+ else
+ variant = (long) 25;
+ break;
default:
{
- wxLogError( wxT("MyMusicModel::GetValue: wrong column" ));
+ wxLogError( wxT("MyMusicModel::GetValue: wrong column %d"), col );
// provoke a crash when mouse button down
wxMouseState state = wxGetMouseState();
{
public:
MyCustomRenderer( wxDataViewCellMode mode, int alignment ) :
- wxDataViewCustomRenderer( wxString("long"), mode, alignment ) { }
+ wxDataViewCustomRenderer( wxString("long"), mode, alignment )
+ { m_height = 25; }
virtual bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) )
{
virtual wxSize GetSize() const
{
- return wxSize(60,20);
+ return wxSize(60,m_height);
+ }
+
+ virtual bool SetValue( const wxVariant &value )
+ {
+ m_height = value;
+ return true;
}
- virtual bool SetValue( const wxVariant &WXUNUSED(value) ) { return true; }
virtual bool GetValue( wxVariant &WXUNUSED(value) ) const { return true; }
+
+private:
+ long m_height;
};
// -------------------------------------
// MyMusic
m_musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL, wxDefaultPosition,
- wxDefaultSize, wxDV_MULTIPLE );
+ wxDefaultSize, wxDV_MULTIPLE|wxDV_VARIABLE_LINE_HEIGHT );
m_music_model = new MyMusicModel;
m_musicCtrl->AssociateModel( m_music_model.get() );
wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_REORDERABLE | wxDATAVIEW_COL_RESIZABLE );
m_musicCtrl->AppendColumn( column2 );
+ m_musicCtrl->AppendProgressColumn( wxT("popularity"), 3, wxDATAVIEW_CELL_INERT, 80 );
+
MyCustomRenderer *cr = new MyCustomRenderer( wxDATAVIEW_CELL_ACTIVATABLE, wxALIGN_RIGHT );
- wxDataViewColumn *column3 = new wxDataViewColumn( wxT("custom"), cr, 2, -1, wxALIGN_LEFT,
+ wxDataViewColumn *column3 = new wxDataViewColumn( wxT("custom"), cr, 4, -1, wxALIGN_LEFT,
wxDATAVIEW_COL_RESIZABLE );
m_musicCtrl->AppendColumn( column3 );