X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11358d3976afbde5e5924799e4dce2ffc0280f2c..44e1a03ff3a21cfe884946800b11b70ddf0fb162:/samples/listctrl/listtest.cpp diff --git a/samples/listctrl/listtest.cpp b/samples/listctrl/listtest.cpp index 862ac6d52d..40a0d7655e 100644 --- a/samples/listctrl/listtest.cpp +++ b/samples/listctrl/listtest.cpp @@ -66,6 +66,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll) EVT_MENU(LIST_DELETE, MyFrame::OnDelete) EVT_MENU(LIST_ADD, MyFrame::OnAdd) + EVT_MENU(LIST_EDIT, MyFrame::OnEdit) EVT_MENU(LIST_DELETE_ALL, MyFrame::OnDeleteAll) EVT_MENU(LIST_SORT, MyFrame::OnSort) EVT_MENU(LIST_SET_FG_COL, MyFrame::OnSetFgColour) @@ -73,6 +74,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() @@ -90,6 +93,7 @@ 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) @@ -188,7 +192,7 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) 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(); @@ -198,9 +202,13 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) menuList->Append(LIST_SORT, _T("&Sort\tCtrl-S")); menuList->AppendSeparator(); menuList->Append(LIST_ADD, _T("&Append an item\tCtrl-P")); + menuList->Append(LIST_EDIT, _T("&Edit the item\tCtrl-E")); 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); @@ -254,12 +262,26 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxMessageDialog dialog(this, "List test sample\nJulian Smart (c) 1997", - "About list test", wxOK|wxCANCEL); + wxMessageDialog dialog(this, _T("List test sample\nJulian Smart (c) 1997"), + _T("About list test"), wxOK|wxCANCEL); 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; @@ -309,7 +331,7 @@ void MyFrame::RecreateList(long flags, bool withText) m_listCtrl = new MyListCtrl(this, LIST_CTRL, wxDefaultPosition, wxDefaultSize, flags | - wxSUNKEN_BORDER); + wxSUNKEN_BORDER | wxLC_EDIT_LABELS); switch ( flags & wxLC_MASK_TYPE ) { @@ -366,9 +388,23 @@ void MyFrame::InitWithReportItems() { m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL); - 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); + // 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 = _T("Column 1"); + itemCol.m_image = -1; + m_listCtrl->InsertColumn(0, itemCol); + itemCol.m_text = _T("Column 2"); + m_listCtrl->InsertColumn(1, itemCol); + itemCol.m_text = _T("Column 3"); + m_listCtrl->InsertColumn(2, itemCol); +#else + m_listCtrl->InsertColumn(0, _T("Column 1")); // , wxLIST_FORMAT_LEFT, 140); + m_listCtrl->InsertColumn(1, _T("Column 2")); // , wxLIST_FORMAT_LEFT, 140); + m_listCtrl->InsertColumn(2, _T("One More Column (2)")); // , wxLIST_FORMAT_LEFT, 140); +#endif // to speed up inserting we hide the control temporarily m_listCtrl->Hide(); @@ -455,8 +491,8 @@ void MyFrame::OnVirtualView(wxCommandEvent& WXUNUSED(event)) void MyFrame::InitWithVirtualItems() { - m_listCtrl->InsertColumn(0, "First Column"); - m_listCtrl->InsertColumn(1, "Second Column"); + m_listCtrl->InsertColumn(0, _T("First Column")); + m_listCtrl->InsertColumn(1, _T("Second Column")); m_listCtrl->SetColumnWidth(0, 150); m_listCtrl->SetColumnWidth(1, 150); @@ -525,7 +561,7 @@ void MyFrame::OnToggleMultiSel(wxCommandEvent& WXUNUSED(event)) flags |= wxLC_SINGLE_SEL; m_logWindow->WriteText(wxString::Format(wxT("Current selection mode: %sle\n"), - (flags & wxLC_SINGLE_SEL) ? "sing" : "multip")); + (flags & wxLC_SINGLE_SEL) ? _T("sing") : _T("multip"))); RecreateList(flags); } @@ -547,6 +583,21 @@ void MyFrame::OnAdd(wxCommandEvent& WXUNUSED(event)) m_listCtrl->InsertItem(m_listCtrl->GetItemCount(), _T("Appended item")); } +void MyFrame::OnEdit(wxCommandEvent& WXUNUSED(event)) +{ + long itemCur = m_listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL, + wxLIST_STATE_FOCUSED); + + if ( itemCur != -1 ) + { + m_listCtrl->EditLabel(itemCur); + } + else + { + m_logWindow->WriteText(_T("No item to edit")); + } +} + void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) { if ( m_listCtrl->GetItemCount() ) @@ -555,7 +606,7 @@ void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) } else { - m_logWindow->WriteText("Nothing to delete"); + m_logWindow->WriteText(_T("Nothing to delete")); } } @@ -578,13 +629,30 @@ 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(); + if ( col != -1 ) + { + SetColumnImage(col, -1); + } + wxLogMessage( wxT("OnColumnRightClick at %d."), event.GetColumn() ); } @@ -642,25 +710,25 @@ void MyListCtrl::OnGetInfo(wxListEvent& event) { wxString msg; - msg << "OnGetInfo (" << event.m_item.m_itemId << ", " << event.m_item.m_col << ")"; + msg << _T("OnGetInfo (") << event.m_item.m_itemId << _T(", ") << event.m_item.m_col << _T(")"); if ( event.m_item.m_mask & wxLIST_MASK_STATE ) - msg << " wxLIST_MASK_STATE"; + msg << _T(" wxLIST_MASK_STATE"); if ( event.m_item.m_mask & wxLIST_MASK_TEXT ) - msg << " wxLIST_MASK_TEXT"; + msg << _T(" wxLIST_MASK_TEXT"); if ( event.m_item.m_mask & wxLIST_MASK_IMAGE ) - msg << " wxLIST_MASK_IMAGE"; + msg << _T(" wxLIST_MASK_IMAGE"); if ( event.m_item.m_mask & wxLIST_MASK_DATA ) - msg << " wxLIST_MASK_DATA"; + msg << _T(" wxLIST_MASK_DATA"); if ( event.m_item.m_mask & wxLIST_SET_ITEM ) - msg << " wxLIST_SET_ITEM"; + msg << _T(" wxLIST_SET_ITEM"); if ( event.m_item.m_mask & wxLIST_MASK_WIDTH ) - msg << " wxLIST_MASK_WIDTH"; + msg << _T(" wxLIST_MASK_WIDTH"); if ( event.m_item.m_mask & wxLIST_MASK_FORMAT ) - msg << " wxLIST_MASK_WIDTH"; + msg << _T(" wxLIST_MASK_WIDTH"); if ( event.m_item.m_mask & wxLIST_MASK_TEXT ) { - event.m_item.m_text = "My callback text"; + event.m_item.m_text = _T("My callback text"); } wxLogMessage(msg); @@ -703,11 +771,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(); @@ -719,10 +793,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, @@ -765,7 +858,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)