Applied #10860: adding test to show that a list being manipulated inside a long task updates correctly

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@62088 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2009-09-24 15:54:53 +00:00
parent ed86b73f2d
commit f0838ffc1e
2 changed files with 39 additions and 10 deletions

View File

@@ -93,6 +93,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(LIST_THAW, MyFrame::OnThaw)
EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
EVT_MENU(LIST_LONG_OPERATION, MyFrame::OnLongOperation)
EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)
@@ -250,6 +251,8 @@ MyFrame::MyFrame(const wxChar *title)
menuList->AppendCheckItem(LIST_TOGGLE_LINES, _T("Toggle &lines\tCtrl-I"));
menuList->Append(LIST_TOGGLE_MULTI_SEL, _T("&Multiple selection\tCtrl-M"),
_T("Toggle multiple selection"), true);
menuList->AppendSeparator();
menuList->Append(LIST_LONG_OPERATION, _T("&Updates a list during long operation"));
wxMenu *menuCol = new wxMenu;
menuCol->Append(LIST_SET_FG_COL, _T("&Foreground colour..."));
@@ -350,6 +353,30 @@ void MyFrame::OnToggleMacUseGeneric(wxCommandEvent& event)
wxSystemOptions::SetOption(wxT("mac.listctrl.always_use_generic"), event.IsChecked());
}
void MyFrame::OnLongOperation(wxCommandEvent & event)
{
if ((m_listCtrl->GetWindowStyleFlag() & wxLC_MASK_TYPE) != wxLC_REPORT)
{
wxLogWarning(_T("need to be in report mode"));
return;
}
for (unsigned idx=0; idx<100; ++idx)
{
m_listCtrl->Freeze();
m_listCtrl->DeleteAllItems();
m_listCtrl->DeleteColumn(2);
m_listCtrl->DeleteColumn(1);
m_listCtrl->DeleteColumn(0);
InitWithReportItems (idx);
m_listCtrl->Thaw();
wxApp::GetInstance()->Yield(true);
}
}
void MyFrame::OnFocusLast(wxCommandEvent& WXUNUSED(event))
{
long index = m_listCtrl->GetItemCount() - 1;
@@ -425,7 +452,7 @@ void MyFrame::RecreateList(long flags, bool withText)
if ( flags & wxLC_VIRTUAL )
InitWithVirtualItems();
else
InitWithReportItems();
InitWithReportItems(0);
break;
default:
@@ -456,7 +483,7 @@ void MyFrame::OnReportView(wxCommandEvent& WXUNUSED(event))
RecreateList(wxLC_REPORT);
}
void MyFrame::InitWithReportItems()
void MyFrame::InitWithReportItems(int shift)
{
m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
@@ -482,7 +509,7 @@ void MyFrame::InitWithReportItems()
for ( int i = 0; i < NUM_ITEMS; i++ )
{
m_listCtrl->InsertItemInReportView(i);
m_listCtrl->InsertItemInReportView(i, shift);
}
m_logWindow->WriteText(wxString::Format(_T("%d items inserted in %ldms\n"),
@@ -998,7 +1025,7 @@ void MyListCtrl::OnListKeyDown(wxListEvent& event)
}
else // !virtual
{
InsertItemInReportView(event.GetIndex());
InsertItemInReportView(event.GetIndex(), 0);
}
}
//else: fall through
@@ -1093,17 +1120,17 @@ wxListItemAttr *MyListCtrl::OnGetItemAttr(long item) const
return item % 2 ? NULL : (wxListItemAttr *)&m_attr;
}
void MyListCtrl::InsertItemInReportView(int i)
void MyListCtrl::InsertItemInReportView(int i, int shift)
{
wxString buf;
buf.Printf(_T("This is item %d"), i);
buf.Printf(_T("This is item %d"), i+shift);
long tmp = InsertItem(i, buf, 0);
SetItemData(tmp, i);
buf.Printf(_T("Col 1, item %d"), i);
buf.Printf(_T("Col 1, item %d"), i+shift);
SetItem(tmp, 1, buf);
buf.Printf(_T("Item %d in column 2"), i);
buf.Printf(_T("Item %d in column 2"), i+shift);
SetItem(tmp, 2, buf);
}

View File

@@ -46,7 +46,7 @@ public:
}
// add one item to the listctrl in report mode
void InsertItemInReportView(int i);
void InsertItemInReportView(int i, int shift);
void OnColClick(wxListEvent& event);
void OnColRightClick(wxListEvent& event);
@@ -137,6 +137,7 @@ protected:
void OnThaw(wxCommandEvent& event);
void OnToggleLines(wxCommandEvent& event);
void OnToggleMacUseGeneric(wxCommandEvent& event);
void OnLongOperation(wxCommandEvent & event);
void OnUpdateShowColInfo(wxUpdateUIEvent& event);
void OnUpdateToggleMultiSel(wxUpdateUIEvent& event);
@@ -154,7 +155,7 @@ private:
// fill the control with items depending on the view
void InitWithListItems();
void InitWithReportItems();
void InitWithReportItems(int shift);
void InitWithIconItems(bool withText, bool sameIcon = false);
void InitWithVirtualItems();
@@ -205,6 +206,7 @@ enum
LIST_THAW,
LIST_TOGGLE_LINES,
LIST_MAC_USE_GENERIC,
LIST_LONG_OPERATION,
LIST_CTRL = 1000
};