X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2d33aec94c9217b94ada107fbd125db4c51c22ab..e4d47fbd6f53b11276dde270e325b339393e9702:/samples/listctrl/listtest.cpp diff --git a/samples/listctrl/listtest.cpp b/samples/listctrl/listtest.cpp index c1fd9dc512..661bd5c70a 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) @@ -116,7 +117,9 @@ static const int NUM_ICONS = 9; int wxCALLBACK MyCompareFunction(long item1, long item2, long sortData) { // inverse the order - return item1 < item2; + if (item1 < item2) return -1; + if (item1 > item2) return 1; + return 0; } // `Main program' equivalent, creating windows and returning main app frame @@ -148,17 +151,17 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) m_imageListSmall = new wxImageList(16, 16, TRUE); #ifdef __WXMSW__ - m_imageListNormal->Add( wxIcon("icon1", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon2", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon3", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon4", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon5", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon6", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon7", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon8", wxBITMAP_TYPE_ICO_RESOURCE) ); - m_imageListNormal->Add( wxIcon("icon9", wxBITMAP_TYPE_ICO_RESOURCE) ); - - m_imageListSmall->Add( wxIcon("iconsmall", wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon1"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon2"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon3"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon4"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon5"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon6"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon7"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon8"), wxBITMAP_TYPE_ICO_RESOURCE) ); + m_imageListNormal->Add( wxIcon(_T("icon9"), wxBITMAP_TYPE_ICO_RESOURCE) ); + + m_imageListSmall->Add( wxIcon(_T("iconsmall"), wxBITMAP_TYPE_ICO_RESOURCE) ); #else m_imageListNormal->Add( wxIcon( toolbrai_xpm ) ); @@ -201,6 +204,7 @@ 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(); @@ -221,7 +225,8 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) menubar->Append(menuCol, _T("&Colour")); SetMenuBar(menubar); - m_logWindow = new wxTextCtrl(this, -1, wxEmptyString, + m_panel = new wxPanel(this, -1); + m_logWindow = new wxTextCtrl(m_panel, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxSUNKEN_BORDER); @@ -260,8 +265,8 @@ 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(); } @@ -326,10 +331,10 @@ void MyFrame::RecreateList(long flags, bool withText) { delete m_listCtrl; - m_listCtrl = new MyListCtrl(this, LIST_CTRL, + m_listCtrl = new MyListCtrl(m_panel, LIST_CTRL, wxDefaultPosition, wxDefaultSize, flags | - wxSUNKEN_BORDER); + wxSUNKEN_BORDER | wxLC_EDIT_LABELS); switch ( flags & wxLC_MASK_TYPE ) { @@ -386,23 +391,20 @@ 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 + // note that under MSW for SetColumnWidth() to work we need to create the + // items with images initially even if we specify dummy image id wxListItem itemCol; - itemCol.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE; - itemCol.m_text = "Column 1"; - itemCol.m_image = -1; + itemCol.SetText(_T("Column 1")); + itemCol.SetImage(-1); m_listCtrl->InsertColumn(0, itemCol); - itemCol.m_text = "Column 2"; + + itemCol.SetText(_T("Column 2")); + itemCol.SetAlign(wxLIST_FORMAT_CENTRE); m_listCtrl->InsertColumn(1, itemCol); - itemCol.m_text = "Column 3"; + + itemCol.SetText(_T("Column 3")); + itemCol.SetAlign(wxLIST_FORMAT_RIGHT); 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(); @@ -489,8 +491,10 @@ void MyFrame::OnVirtualView(wxCommandEvent& WXUNUSED(event)) void MyFrame::InitWithVirtualItems() { - m_listCtrl->InsertColumn(0, "First Column"); - m_listCtrl->InsertColumn(1, "Second Column"); + m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL); + + m_listCtrl->InsertColumn(0, _T("First Column")); + m_listCtrl->InsertColumn(1, _T("Second Column")); m_listCtrl->SetColumnWidth(0, 150); m_listCtrl->SetColumnWidth(1, 150); @@ -559,7 +563,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); } @@ -581,6 +585,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() ) @@ -589,7 +608,7 @@ void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) } else { - m_logWindow->WriteText("Nothing to delete"); + m_logWindow->WriteText(_T("Nothing to delete")); } } @@ -631,24 +650,38 @@ void MyListCtrl::OnColClick(wxListEvent& event) void MyListCtrl::OnColRightClick(wxListEvent& event) { int col = event.GetColumn(); - SetColumnImage(col, -1); + if ( col != -1 ) + { + SetColumnImage(col, -1); + } wxLogMessage( wxT("OnColumnRightClick at %d."), event.GetColumn() ); } +void MyListCtrl::LogColEvent(const wxListEvent& event, const wxChar *name) +{ + const int col = event.GetColumn(); + + wxLogMessage(wxT("%s: column %d (width = %d or %d)."), + name, + col, + event.GetItem().GetWidth(), + GetColumnWidth(col)); +} + void MyListCtrl::OnColBeginDrag(wxListEvent& event) { - wxLogMessage( wxT("OnColBeginDrag: column %d."), event.GetColumn() ); + LogColEvent( event, wxT("OnColBeginDrag") ); } void MyListCtrl::OnColDragging(wxListEvent& event) { - wxLogMessage( wxT("OnColDragging: column %d."), event.GetColumn() ); + LogColEvent( event, wxT("OnColDragging") ); } void MyListCtrl::OnColEndDrag(wxListEvent& event) { - wxLogMessage( wxT("OnColEndDrag: column %d."), event.GetColumn() ); + LogColEvent( event, wxT("OnColEndDrag") ); } void MyListCtrl::OnBeginDrag(wxListEvent& event) @@ -690,25 +723,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); @@ -754,11 +787,13 @@ void MyListCtrl::OnActivated(wxListEvent& event) void MyListCtrl::OnFocused(wxListEvent& event) { LogEvent(event, _T("OnFocused")); + + event.Skip(); } void MyListCtrl::OnListKeyDown(wxListEvent& event) { - switch ( event.GetCode() ) + switch ( event.GetKeyCode() ) { case 'c': // colorize case 'C':