- virtual bool IsContainer( const wxDataViewItem &item ) const
- {
- // the invisble root node can have children (in
- // our model always "MyMusic")
- if (!item.IsOk())
- return true;
-
- MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
- return node->IsContainer();
- }
-
- virtual unsigned int GetChildren( const wxDataViewItem &parent, wxDataViewItemArray &array ) const
- {
- MyMusicModelNode *node = (MyMusicModelNode*) parent.GetID();
- if (!node)
- {
- array.Add( wxDataViewItem( (void*) m_root ) );
- return 1;
- }
-
- if (node == m_classical)
- {
- MyMusicModel *model = (MyMusicModel*)(const MyMusicModel*) this;
- model->m_classicalMusicIsKnownToControl = true;
- }
-
- if (node->GetChildCount() == 0)
- {
- return 0;
- }
-
- unsigned int count = node->GetChildren().GetCount();
- unsigned int pos;
- for (pos = 0; pos < count; pos++)
- {
- MyMusicModelNode *child = node->GetChildren().Item( pos );
- array.Add( wxDataViewItem( (void*) child ) );
- }
- return count;
- }
-
- // DnD
-
- virtual bool IsDraggable( const wxDataViewItem &item )
- {
- // only drag items
- return (!IsContainer(item));
- }
-
- virtual size_t GetDragDataSize( const wxDataViewItem &item, const wxDataFormat &WXUNUSED(format) )
- {
- wxPrintf( "GetDragDataSize\n" );
-
- MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
- wxString data;
- data += node->m_title; data += wxT(" ");
- data += node->m_artist;
- return strlen( data.utf8_str() ) + 1;
- }
- virtual bool GetDragData( const wxDataViewItem &item, const wxDataFormat &WXUNUSED(format),
- void* dest, size_t WXUNUSED(size) )
- {
- wxPrintf( "GetDragData\n" );
-
- MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
- wxString data;
- data += node->m_title; data += wxT(" ");
- data += node->m_artist;
- wxCharBuffer buffer( data.utf8_str() );
- memcpy( dest, buffer, strlen(buffer)+1 );
- return true;
- }
-