X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7516ed26c9749018135c24afdd0576e4366c92e6..19e30148e18cc99296b26503c155e5cef59045f4:/src/msw/listbox.cpp?ds=sidebyside diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index b024c65b07..6d1f05a556 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -238,7 +238,7 @@ wxListBox::~wxListBox() void wxListBox::SetupColours() { - SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); SetForegroundColour(GetParent()->GetForegroundColour()); } @@ -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(); @@ -563,8 +566,13 @@ void wxListBox::SetString(int N, const wxString& s) #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) + { // update item's text m_aItems[N]->SetName(s); + + // reassign the item's data + ListBox_SetItemData(GetHwnd(), N, m_aItems[N]); + } #endif //USE_OWNER_DRAWN } @@ -741,7 +749,7 @@ bool wxListBox::MSWOnMeasure(WXMEASUREITEMSTRUCT *item) wxDC dc; dc.SetHDC((WXHDC)hdc); - dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_ANSI_VAR_FONT)); + dc.SetFont(wxSystemSettings::GetFont(wxSYS_ANSI_VAR_FONT)); pStruct->itemHeight = dc.GetCharHeight() + 2*OWNER_DRAWN_LISTBOX_EXTRA_SPACE; pStruct->itemWidth = dc.GetCharWidth();