]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed wxCheckListBox behaviour in presense of wxLB_SORT style (bug 529786)
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 1 Apr 2002 21:55:55 +0000 (21:55 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 1 Apr 2002 21:55:55 +0000 (21:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14896 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/msw/checklst.h
src/msw/checklst.cpp
src/msw/listbox.cpp

index 57ed9a46547219b2cf87e66b800f2716bc35205c..7b39b5b63b5f4328f3da57ff41f70dd030d439a0 100644 (file)
@@ -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:
index 24003d4d439b1ce66d3702e5a91e145c945f656c..255a564fd39c3c321791db8c5ed6b96fb47011e3 100644 (file)
@@ -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 );
 
index a0e585cb5fe36858017d9130eb9052f48dbca429..67c6494df89bf47d3926afbff1bcd0eb83974ae9 100644 (file)
@@ -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;
index 24954256fd54f73f8312efd9f97bc993f0889173..6d1f05a55615149acb49198fcf6ecb19590a3a88 100644 (file)
@@ -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]);
     }