+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_ACTIVATED, Item: %s", title );
+
+ if (m_ctrl[0]->IsExpanded( event.GetItem() ))
+ {
+ wxLogMessage( "Item: %s is expanded", title );
+ }
+}
+
+void MyFrame::OnSelectionChanged( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ if (title.empty())
+ title = "None";
+
+ wxLogMessage( "wxEVT_DATAVIEW_SELECTION_CHANGED, First selected Item: %s", title );
+}
+
+void MyFrame::OnExpanding( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_EXPANDING, Item: %s", title );
+}
+
+
+void MyFrame::OnStartEditing( wxDataViewEvent &event )
+{
+ wxString artist = m_music_model->GetArtist( event.GetItem() );
+ if (artist == "Ludwig van Beethoven")
+ {
+ event.Veto();
+
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_START_EDITING vetoed. Artist: %s", artist );
+ }
+ else
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_START_EDITING not vetoed. Artist: %s", artist );
+
+}
+
+void MyFrame::OnEditingStarted( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_EDITING_STARTED, Item: %s", title );
+}
+
+void MyFrame::OnEditingDone( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_EDITING_DONE, Item: %s", title );
+}
+
+void MyFrame::OnExpanded( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_EXPANDED, Item: %s", title );
+}
+
+void MyFrame::OnCollapsing( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_COLLAPSING, Item: %s", title );
+}
+
+void MyFrame::OnCollapsed( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_COLLAPSED, Item: %s", title );
+}
+
+void MyFrame::OnContextMenu( wxDataViewEvent &event )
+{
+ wxString title = m_music_model->GetTitle( event.GetItem() );
+ wxLogMessage( "wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, Item: %s", title );
+
+ wxMenu menu;
+ menu.Append( 1, "menuitem 1" );
+ menu.Append( 2, "menuitem 2" );
+ menu.Append( 3, "menuitem 3" );
+
+ m_ctrl[0]->PopupMenu(&menu);
+}
+
+void MyFrame::OnAttrHeaderClick( wxDataViewEvent &event )
+{
+ // we need to skip the event to let the default behaviour of sorting by
+ // this column when it is clicked to take place
+ event.Skip();
+
+ int pos = m_ctrl[1]->GetColumnPosition( event.GetDataViewColumn() );
+
+ wxLogMessage( "wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, Column position: %d", pos );
+ wxLogMessage( "Column title: %s Column width: %d", event.GetDataViewColumn()->GetTitle(), event.GetDataViewColumn()->GetWidth() );
+}
+
+void MyFrame::OnHeaderClick( wxDataViewEvent &event )
+{
+ // we need to skip the event to let the default behaviour of sorting by
+ // this column when it is clicked to take place
+ event.Skip();
+
+ int pos = m_ctrl[0]->GetColumnPosition( event.GetDataViewColumn() );
+
+ wxLogMessage( "wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, Column position: %d", pos );
+ wxLogMessage( "Column width: %d", event.GetDataViewColumn()->GetWidth() );
+}
+
+void MyFrame::OnHeaderRightClick( wxDataViewEvent &event )
+{
+ int pos = m_ctrl[0]->GetColumnPosition( event.GetDataViewColumn() );
+
+ wxLogMessage( "wxEVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, Column position: %d", pos );
+}
+
+void MyFrame::OnSorted( wxDataViewEvent &event )
+{
+ int pos = m_ctrl[0]->GetColumnPosition( event.GetDataViewColumn() );
+
+ wxLogMessage( "wxEVT_DATAVIEW_COLUMN_SORTED, Column position: %d", pos );