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()
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()
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();
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"),
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();
// 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() );
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)
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);
+}
+