X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/776a33cfd3efe66e053146e34085833f01523b35..2dace059ee7aefeea0f2b843f1808b117f112795:/samples/listctrl/listtest.cpp diff --git a/samples/listctrl/listtest.cpp b/samples/listctrl/listtest.cpp index 8a966df2b5..d1c8d7d4af 100644 --- a/samples/listctrl/listtest.cpp +++ b/samples/listctrl/listtest.cpp @@ -71,6 +71,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(LIST_SET_BG_COL, MyFrame::OnSetBgColour) EVT_MENU(LIST_TOGGLE_MULTI_SEL, MyFrame::OnToggleMultiSel) EVT_MENU(LIST_SHOW_COL_INFO, MyFrame::OnShowColInfo) + EVT_MENU(LIST_SHOW_SEL_INFO, MyFrame::OnShowSelInfo) EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo) END_EVENT_TABLE() @@ -89,6 +90,7 @@ BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl) EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown) EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated) EVT_LIST_COL_CLICK(LIST_CTRL, MyListCtrl::OnColClick) + EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint) EVT_CHAR(MyListCtrl::OnChar) END_EVENT_TABLE() @@ -181,7 +183,9 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) menuList->Append(LIST_TOGGLE_FIRST, _T("&Toggle first item\tCtrl-T")); menuList->Append(LIST_DESELECT_ALL, _T("&Deselect All\tCtrl-D")); menuList->Append(LIST_SELECT_ALL, _T("S&elect All\tCtrl-A")); + menuList->AppendSeparator(); menuList->Append(LIST_SHOW_COL_INFO, _T("Show &column info\tCtrl-C")); + menuList->Append(LIST_SHOW_SEL_INFO, _T("Show &selected items\tCtrl-S")); menuList->AppendSeparator(); menuList->Append(LIST_SORT, _T("&Sort\tCtrl-S")); menuList->AppendSeparator(); @@ -351,18 +355,9 @@ void MyFrame::InitWithReportItems() wxStopWatch sw; - wxString buf; for ( int i = 0; i < NUM_ITEMS; i++ ) { - buf.Printf(_T("This is item %d"), i); - long tmp = m_listCtrl->InsertItem(i, buf, 0); - m_listCtrl->SetItemData(tmp, i); - - buf.Printf(_T("Col 1, item %d"), i); - tmp = m_listCtrl->SetItem(i, 1, buf); - - buf.Printf(_T("Item %d in column 2"), i); - tmp = m_listCtrl->SetItem(i, 2, buf); + m_listCtrl->InsertItemInReportView(i); } m_logWindow->WriteText(wxString::Format(_T("%d items inserted in %ldms\n"), @@ -459,6 +454,32 @@ void MyFrame::OnSort(wxCommandEvent& WXUNUSED(event)) sw.Time())); } +void MyFrame::OnShowSelInfo(wxCommandEvent& event) +{ + int selCount = m_listCtrl->GetSelectedItemCount(); + wxLogMessage(_T("%d items selected:"), selCount); + + // don't show too many items + size_t shownCount = 0; + + long item = m_listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL, + wxLIST_STATE_SELECTED); + while ( item != -1 ) + { + wxLogMessage(_T("\t%ld (%s)"), + item, m_listCtrl->GetItemText(item).c_str()); + + if ( ++shownCount > 10 ) + { + wxLogMessage(_T("\t... more selected items snipped...")); + break; + } + + item = m_listCtrl->GetNextItem(item, wxLIST_NEXT_ALL, + wxLIST_STATE_SELECTED); + } +} + void MyFrame::OnShowColInfo(wxCommandEvent& event) { int count = m_listCtrl->GetColumnCount(); @@ -531,6 +552,12 @@ void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event)) // MyListCtrl +void MyListCtrl::OnCacheHint(wxListEvent& event) +{ + wxLogMessage( "OnCacheHint: cache items %ld..%ld", + event.GetCacheFrom(), event.GetCacheTo() ); +} + void MyListCtrl::OnColClick(wxListEvent& event) { wxLogMessage( "OnColumnClick at %d.", event.GetColumn() ); @@ -635,9 +662,60 @@ void MyListCtrl::OnActivated(wxListEvent& event) void MyListCtrl::OnListKeyDown(wxListEvent& event) { - LogEvent(event, _T("OnListKeyDown")); - - event.Skip(); + switch ( event.GetCode() ) + { + case 'c': + { + wxListItem info; + info.m_itemId = event.GetIndex(); + GetItem(info); + + wxListItemAttr *attr = info.GetAttributes(); + if ( !attr || !attr->HasTextColour() ) + { + info.SetTextColour(*wxCYAN); + + SetItem(info); + } + } + break; + + case WXK_DELETE: + { + long item = GetNextItem(-1, + wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + while ( item != -1 ) + { + DeleteItem(item); + + wxLogMessage(_T("Item %ld deleted"), item); + + // -1 because the indices were shifted by DeleteItem() + item = GetNextItem(item - 1, + wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + } + } + break; + + case WXK_INSERT: + if ( GetWindowStyle() & wxLC_REPORT ) + { + if ( GetWindowStyle() & wxLC_VIRTUAL ) + { + SetItemCount(GetItemCount() + 1); + } + else // !virtual + { + InsertItemInReportView(event.GetIndex()); + } + } + //else: fall through + + default: + LogEvent(event, _T("OnListKeyDown")); + + event.Skip(); + } } void MyListCtrl::OnChar(wxKeyEvent& event) @@ -664,3 +742,22 @@ int MyListCtrl::OnGetItemImage(long item) const return 0; } +wxListItemAttr *MyListCtrl::OnGetItemAttr(long item) const +{ + return item % 2 ? NULL : (wxListItemAttr *)&m_attr; +} + +void MyListCtrl::InsertItemInReportView(int i) +{ + wxString buf; + buf.Printf(_T("This is item %d"), i); + long tmp = InsertItem(i, buf, 0); + SetItemData(tmp, i); + + buf.Printf(_T("Col 1, item %d"), i); + SetItem(i, 1, buf); + + buf.Printf(_T("Item %d in column 2"), i); + SetItem(i, 2, buf); +} +