From fd7ab28c5e655d496d1765143eab0b649cb54a4e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 1 Apr 2002 21:55:55 +0000 Subject: [PATCH] fixed wxCheckListBox behaviour in presense of wxLB_SORT style (bug 529786) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14896 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + include/wx/msw/checklst.h | 1 - src/msw/checklst.cpp | 22 +--------------------- src/msw/listbox.cpp | 34 +++++++++++++++++++--------------- 4 files changed, 21 insertions(+), 37 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 57ed9a4654..7b39b5b63b 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -147,6 +147,7 @@ wxMSW: recursion any more - wxTextCtrl with wxTE_RICH flag scrolls to the end when text is appended to it - the separators are not seen behind the controls added to the toolbar any more +- wxLB_SORT style can be used with wxCheckListBox - wxWindowDC and wxClientDC::GetSize() works correctly now wxGTK: diff --git a/include/wx/msw/checklst.h b/include/wx/msw/checklst.h index 24003d4d43..255a564fd3 100644 --- a/include/wx/msw/checklst.h +++ b/include/wx/msw/checklst.h @@ -43,7 +43,6 @@ public: // override base class virtuals virtual void Delete(int n); - virtual void InsertItems(int nItems, const wxString items[], int pos); virtual bool SetFont( const wxFont &font ); diff --git a/src/msw/checklst.cpp b/src/msw/checklst.cpp index a0e585cb5f..67c6494df8 100644 --- a/src/msw/checklst.cpp +++ b/src/msw/checklst.cpp @@ -60,7 +60,7 @@ // implementation // ============================================================================ - IMPLEMENT_DYNAMIC_CLASS(wxCheckListBox, wxListBox) +IMPLEMENT_DYNAMIC_CLASS(wxCheckListBox, wxListBox) // ---------------------------------------------------------------------------- // declaration and implementation of wxCheckListBoxItem class @@ -299,26 +299,6 @@ void wxCheckListBox::Delete(int N) m_aItems.RemoveAt(N); } -void wxCheckListBox::InsertItems(int nItems, const wxString items[], int pos) -{ - wxCHECK_RET( pos >= 0 && pos <= m_noItems, - wxT("invalid index in wxCheckListBox::InsertItems") ); - - wxListBox::InsertItems(nItems, items, pos); - - int i; - for ( i = 0; i < nItems; i++ ) { - wxOwnerDrawn *pNewItem = CreateItem((size_t)(pos + i)); - pNewItem->SetName(items[i]); - pNewItem->SetFont(GetFont()); - - m_aItems.Insert(pNewItem, (size_t)(pos + i)); - - ListBox_SetItemData((HWND)GetHWND(), i + pos, pNewItem); - } -} - - bool wxCheckListBox::SetFont( const wxFont &font ) { size_t i; diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index 24954256fd..6d1f05a556 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -284,11 +284,11 @@ int wxListBox::DoAppend(const wxString& item) if ( m_windowStyle & wxLB_OWNERDRAW ) { wxOwnerDrawn *pNewItem = CreateItem(index); // dummy argument pNewItem->SetName(item); - m_aItems.Add(pNewItem); + m_aItems.Insert(pNewItem, index); ListBox_SetItemData(GetHwnd(), index, pNewItem); pNewItem->SetFont(GetFont()); } -#endif +#endif // wxUSE_OWNER_DRAWN SetHorizontalExtent(item); @@ -329,14 +329,10 @@ void wxListBox::DoSetItems(const wxArrayString& choices, void** clientData) #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { // first delete old items - size_t ui = m_aItems.Count(); - while ( ui-- != 0 ) { - delete m_aItems[ui]; - } - m_aItems.Empty(); + WX_CLEAR_ARRAY(m_aItems); // then create new ones - for ( ui = 0; ui < (size_t)m_noItems; ui++ ) { + for ( size_t ui = 0; ui < (size_t)m_noItems; ui++ ) { wxOwnerDrawn *pNewItem = CreateItem(ui); pNewItem->SetName(choices[ui]); m_aItems.Add(pNewItem); @@ -378,12 +374,7 @@ void wxListBox::Free() #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { - size_t uiCount = m_aItems.Count(); - while ( uiCount-- != 0 ) { - delete m_aItems[uiCount]; - } - - m_aItems.Clear(); + WX_CLEAR_ARRAY(m_aItems); } else #endif // wxUSE_OWNER_DRAWN @@ -521,7 +512,19 @@ wxListBox::DoInsertItems(const wxArrayString& items, int pos) int nItems = items.GetCount(); for ( int i = 0; i < nItems; i++ ) - ListBox_InsertString(GetHwnd(), i + pos, items[i]); + { + int idx = ListBox_InsertString(GetHwnd(), i + pos, items[i]); + +#if wxUSE_OWNER_DRAWN + wxOwnerDrawn *pNewItem = CreateItem(idx); + pNewItem->SetName(items[i]); + pNewItem->SetFont(GetFont()); + m_aItems.Insert(pNewItem, idx); + + ListBox_SetItemData(GetHwnd(), idx, pNewItem); +#endif // wxUSE_OWNER_DRAWN + } + m_noItems += nItems; SetHorizontalExtent(); @@ -566,6 +569,7 @@ void wxListBox::SetString(int N, const wxString& s) { // update item's text m_aItems[N]->SetName(s); + // reassign the item's data ListBox_SetItemData(GetHwnd(), N, m_aItems[N]); } -- 2.45.2