X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4acb6ca6727660dabf42ee34c3aef9d125dccd26..c822ad5a5e30a21ca3340af644bf79804cf7c777:/samples/listctrl/listtest.cpp diff --git a/samples/listctrl/listtest.cpp b/samples/listctrl/listtest.cpp index dbac0985fb..c1fd9dc512 100644 --- a/samples/listctrl/listtest.cpp +++ b/samples/listctrl/listtest.cpp @@ -60,6 +60,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView) EVT_MENU(LIST_VIRTUAL_VIEW, MyFrame::OnVirtualView) + EVT_MENU(LIST_FOCUS_LAST, MyFrame::OnFocusLast) EVT_MENU(LIST_TOGGLE_FIRST, MyFrame::OnToggleFirstSel) EVT_MENU(LIST_DESELECT_ALL, MyFrame::OnDeselectAll) EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll) @@ -72,6 +73,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) 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() @@ -89,7 +92,14 @@ BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl) 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) @@ -180,7 +190,8 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) menuView->Append(LIST_VIRTUAL_VIEW, _T("Virtual view\tF7")); wxMenu *menuList = new wxMenu; - menuList->Append(LIST_TOGGLE_FIRST, _T("&Toggle first item\tCtrl-T")); + menuList->Append(LIST_FOCUS_LAST, _T("&Make last item current\tCtrl-L")); + 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(); @@ -193,6 +204,9 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) 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); @@ -252,6 +266,32 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) 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; + if ( index == -1 ) + { + return; + } + + m_listCtrl->SetItemState(index, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED); + m_listCtrl->EnsureVisible(index); +} + void MyFrame::OnToggleFirstSel(wxCommandEvent& WXUNUSED(event)) { m_listCtrl->SetItemState(0, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); @@ -346,9 +386,23 @@ void MyFrame::InitWithReportItems() { 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(); @@ -558,15 +612,52 @@ void MyListCtrl::OnCacheHint(wxListEvent& event) 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(); + 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) @@ -660,11 +751,17 @@ void MyListCtrl::OnActivated(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(); @@ -676,10 +773,29 @@ void MyListCtrl::OnListKeyDown(wxListEvent& event) 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; + case WXK_DELETE: { long item = GetNextItem(-1, @@ -722,7 +838,18 @@ void MyListCtrl::OnChar(wxKeyEvent& event) { 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)