Added wxDataViewListIndexModel::RowsDeleted() and various related corrections

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50764 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2007-12-17 11:28:02 +00:00
parent ea3a345f1c
commit 8b6cf9bf10
5 changed files with 130 additions and 8 deletions

View File

@@ -353,6 +353,17 @@ private:
bool m_classicalMusicIsKnownToControl;
};
static int my_sort_reverse( int *v1, int *v2 )
{
return *v2-*v1;
}
static int my_sort( int *v1, int *v2 )
{
return *v1-*v2;
}
class MyListModel: public wxDataViewIndexListModel
{
public:
@@ -388,6 +399,34 @@ public:
m_array.RemoveAt( row );
RowDeleted( row );
}
void DeleteItems( const wxDataViewItemArray &items )
{
wxArrayInt rows;
unsigned int i;
for (i = 0; i < items.GetCount(); i++)
{
unsigned int row = GetRow( items[i] );
rows.Add( row );
}
// Sort in descending order so that the last
// row will be deleted first. Otherwise the
// remaining indeces would all be wrong.
rows.Sort( my_sort_reverse );
for (i = 0; i < rows.GetCount(); i++)
m_array.RemoveAt( rows[i] );
// This is just to test if wxDataViewCtrl can
// cope with removing rows not sorted in
// descending order
rows.Sort( my_sort );
RowsDeleted( rows );
}
void AddMany()
{
}
// implementation of base class virtuals to define model
@@ -522,6 +561,7 @@ public:
void OnRightClick( wxMouseEvent &event );
void OnGoto( wxCommandEvent &event);
void OnAddMany( wxCommandEvent &event);
private:
wxDataViewCtrl* m_musicCtrl;
@@ -552,7 +592,7 @@ bool MyApp::OnInit(void)
// build the first frame
MyFrame *frame =
new MyFrame(NULL, wxT("wxDataViewCtrl feature test"), 40, 40, 800, 440);
new MyFrame(NULL, wxT("wxDataViewCtrl feature test"), 40, 40, 800, 540);
frame->Show(true);
SetTopWindow(frame);
@@ -583,7 +623,8 @@ enum
ID_PREPEND_LIST = 200,
ID_DELETE_LIST = 201,
ID_GOTO = 202
ID_GOTO = 202,
ID_ADD_MANY = 203
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
@@ -595,6 +636,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_BUTTON( ID_PREPEND_LIST, MyFrame::OnPrependList )
EVT_BUTTON( ID_DELETE_LIST, MyFrame::OnDeleteList )
EVT_BUTTON( ID_GOTO, MyFrame::OnGoto)
EVT_BUTTON( ID_ADD_MANY, MyFrame::OnAddMany)
EVT_DATAVIEW_ITEM_VALUE_CHANGED( ID_MUSIC_CTRL, MyFrame::OnValueChanged )
@@ -696,9 +738,12 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
button_sizer->Add( new wxButton( this, ID_DELETE_MUSIC, "Delete selected"), 0, wxALL, 10 );
button_sizer->Add( new wxButton( this, ID_DELETE_YEAR, "Delete \"Year\" column"), 0, wxALL, 10 );
button_sizer->Add( 10, 10, 1 );
button_sizer->Add( new wxButton( this, ID_PREPEND_LIST, "Prepend"), 0, wxALL, 10 );
button_sizer->Add( new wxButton( this, ID_DELETE_LIST, "Delete selected"), 0, wxALL, 10 );
button_sizer->Add( new wxButton( this, ID_GOTO, "Goto 50"), 0, wxALL, 10 );
wxFlexGridSizer *grid_sizer = new wxFlexGridSizer( 2, 2 );
grid_sizer->Add( new wxButton( this, ID_PREPEND_LIST, "Prepend"), 0, wxALL, 2 );
grid_sizer->Add( new wxButton( this, ID_DELETE_LIST, "Delete selected"), 0, wxALL, 2 );
grid_sizer->Add( new wxButton( this, ID_GOTO, "Goto 50"), 0, wxALL, 2 );
grid_sizer->Add( new wxButton( this, ID_ADD_MANY, "Add 1000"), 0, wxALL, 2 );
button_sizer->Add( grid_sizer, 0, wxALL, 10 );
main_sizer->Add( button_sizer, 0, wxGROW, 0 );
@@ -783,9 +828,8 @@ void MyFrame::OnDeleteList( wxCommandEvent& WXUNUSED(event) )
{
wxDataViewItemArray items;
int len = m_listCtrl->GetSelections( items );
for( int i = 0; i < len; i ++ )
if (items[i].IsOk())
m_list_model->DeleteItem( items[i] );
if (len > 0)
m_list_model->DeleteItems( items );
}
void MyFrame::OnValueChanged( wxDataViewEvent &event )
@@ -925,6 +969,12 @@ void MyFrame::OnGoto(wxCommandEvent& WXUNUSED(event))
m_listCtrl->EnsureVisible(item,m_col);
}
void MyFrame::OnAddMany(wxCommandEvent& WXUNUSED(event))
{
m_list_model->AddMany();
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
{
wxAboutDialogInfo info;