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_MENU(LIST_FREEZE, MyFrame::OnFreeze)
+ EVT_MENU(LIST_THAW, MyFrame::OnThaw)
EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
END_EVENT_TABLE()
EVT_LIST_ITEM_DESELECTED(LIST_CTRL, MyListCtrl::OnDeselected)
EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
+ EVT_LIST_ITEM_FOCUSED(LIST_CTRL, MyListCtrl::OnFocused)
+
EVT_LIST_COL_CLICK(LIST_CTRL, MyListCtrl::OnColClick)
+ EVT_LIST_COL_RIGHT_CLICK(LIST_CTRL, MyListCtrl::OnColRightClick)
+ EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnColBeginDrag)
+ EVT_LIST_COL_DRAGGING(LIST_CTRL, MyListCtrl::OnColDragging)
+ EVT_LIST_COL_END_DRAG(LIST_CTRL, MyListCtrl::OnColEndDrag)
+
EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint)
EVT_CHAR(MyListCtrl::OnChar)
wxMenu *menuList = new wxMenu;
menuList->Append(LIST_FOCUS_LAST, _T("&Make last item current\tCtrl-L"));
- menuList->Append(LIST_TOGGLE_FIRST, _T("&Toggle first item\tCtrl-T"));
+ menuList->Append(LIST_TOGGLE_FIRST, _T("To&ggle first item\tCtrl-G"));
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_DELETE, _T("&Delete first item\tCtrl-X"));
menuList->Append(LIST_DELETE_ALL, _T("Delete &all items"));
menuList->AppendSeparator();
+ menuList->Append(LIST_FREEZE, _T("Free&ze\tCtrl-Z"));
+ menuList->Append(LIST_THAW, _T("Tha&w\tCtrl-W"));
+ menuList->AppendSeparator();
menuList->Append(LIST_TOGGLE_MULTI_SEL, _T("&Multiple selection\tCtrl-M"),
_T("Toggle multiple selection"), TRUE);
dialog.ShowModal();
}
+void MyFrame::OnFreeze(wxCommandEvent& event)
+{
+ wxLogMessage(_T("Freezing the control"));
+
+ m_listCtrl->Freeze();
+}
+
+void MyFrame::OnThaw(wxCommandEvent& event)
+{
+ wxLogMessage(_T("Thawing the control"));
+
+ m_listCtrl->Thaw();
+}
+
void MyFrame::OnFocusLast(wxCommandEvent& WXUNUSED(event))
{
long index = m_listCtrl->GetItemCount() - 1;
{
m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
+ // under MSW for SetColumnWidth() to work we need to create the items with
+ // images initially
+#if 1
+ wxListItem itemCol;
+ itemCol.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE;
+ itemCol.m_text = "Column 1";
+ itemCol.m_image = -1;
+ m_listCtrl->InsertColumn(0, itemCol);
+ itemCol.m_text = "Column 2";
+ m_listCtrl->InsertColumn(1, itemCol);
+ itemCol.m_text = "Column 3";
+ m_listCtrl->InsertColumn(2, itemCol);
+#else
m_listCtrl->InsertColumn(0, "Column 1"); // , wxLIST_FORMAT_LEFT, 140);
m_listCtrl->InsertColumn(1, "Column 2"); // , wxLIST_FORMAT_LEFT, 140);
m_listCtrl->InsertColumn(2, "One More Column (2)"); // , wxLIST_FORMAT_LEFT, 140);
+#endif
// to speed up inserting we hide the control temporarily
m_listCtrl->Hide();
event.GetCacheFrom(), event.GetCacheTo() );
}
+void MyListCtrl::SetColumnImage(int col, int image)
+{
+ wxListItem item;
+ item.SetMask(wxLIST_MASK_IMAGE);
+ item.SetImage(image);
+ SetColumn(col, item);
+}
+
void MyListCtrl::OnColClick(wxListEvent& event)
{
- wxLogMessage( wxT("OnColumnClick at %d."), event.GetColumn() );
+ int col = event.GetColumn();
+ SetColumnImage(col, 0);
+
+ wxLogMessage( wxT("OnColumnClick at %d."), col );
+}
+
+void MyListCtrl::OnColRightClick(wxListEvent& event)
+{
+ int col = event.GetColumn();
+ if ( col != -1 )
+ {
+ SetColumnImage(col, -1);
+ }
+
+ wxLogMessage( wxT("OnColumnRightClick at %d."), event.GetColumn() );
+}
+
+void MyListCtrl::OnColBeginDrag(wxListEvent& event)
+{
+ wxLogMessage( wxT("OnColBeginDrag: column %d."), event.GetColumn() );
+}
+
+void MyListCtrl::OnColDragging(wxListEvent& event)
+{
+ wxLogMessage( wxT("OnColDragging: column %d."), event.GetColumn() );
+}
+
+void MyListCtrl::OnColEndDrag(wxListEvent& event)
+{
+ wxLogMessage( wxT("OnColEndDrag: column %d."), event.GetColumn() );
}
void MyListCtrl::OnBeginDrag(wxListEvent& event)
{
- wxLogMessage( wxT("OnBeginDrag at %d,%d."),
- event.m_pointDrag.x, event.m_pointDrag.y );
+ const wxPoint& pt = event.m_pointDrag;
+
+ int flags;
+ wxLogMessage( wxT("OnBeginDrag at (%d, %d), item %ld."),
+ pt.x, pt.y, HitTest(pt, flags) );
}
void MyListCtrl::OnBeginRDrag(wxListEvent& event)
LogEvent(event, _T("OnActivated"));
}
+void MyListCtrl::OnFocused(wxListEvent& event)
+{
+ LogEvent(event, _T("OnFocused"));
+}
+
void MyListCtrl::OnListKeyDown(wxListEvent& event)
{
switch ( event.GetCode() )
{
- case 'c':
+ case 'c': // colorize
+ case 'C':
{
wxListItem info;
info.m_itemId = event.GetIndex();
info.SetTextColour(*wxCYAN);
SetItem(info);
+
+ RefreshItem(info.m_itemId);
+ }
+ }
+ break;
+
+ case 'n': // next
+ case 'N':
+ {
+ long item = GetNextItem(-1,
+ wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
+ if ( item++ == GetItemCount() - 1 )
+ {
+ item = 0;
}
+
+ wxLogMessage(_T("Focusing item %ld"), item);
+
+ SetItemState(item, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
+ EnsureVisible(item);
}
break;
{
wxLogMessage(_T("Got char event."));
- event.Skip();
+ switch ( event.GetKeyCode() )
+ {
+ case 'n':
+ case 'N':
+ case 'c':
+ case 'C':
+ // these are the keys we process ourselves
+ break;
+
+ default:
+ event.Skip();
+ }
}
void MyListCtrl::LogEvent(const wxListEvent& event, const wxChar *eventName)