void wxListBox::SetupColours()
{
- SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW));
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
SetForegroundColour(GetParent()->GetForegroundColour());
}
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);
#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);
#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
if ( HasMultipleSelection() )
{
- int no_sel = ListBox_GetSelCount(GetHwnd());
- if (no_sel != 0) {
- int *selections = new int[no_sel];
- int rc = ListBox_GetSelItems(GetHwnd(), no_sel, selections);
-
- wxCHECK_MSG(rc != LB_ERR, -1, wxT("ListBox_GetSelItems failed"));
+ int countSel = ListBox_GetSelCount(GetHwnd());
+ if ( countSel == LB_ERR )
+ {
+ wxLogDebug(_T("ListBox_GetSelCount failed"));
+ }
+ else if ( countSel != 0 )
+ {
+ int *selections = new int[countSel];
- aSelections.Alloc(no_sel);
- for ( int n = 0; n < no_sel; n++ )
- aSelections.Add(selections[n]);
+ if ( ListBox_GetSelItems(GetHwnd(),
+ countSel, selections) == LB_ERR )
+ {
+ wxLogDebug(wxT("ListBox_GetSelItems failed"));
+ countSel = -1;
+ }
+ else
+ {
+ aSelections.Alloc(countSel);
+ for ( int n = 0; n < countSel; n++ )
+ aSelections.Add(selections[n]);
+ }
delete [] selections;
}
- return no_sel;
+ return countSel;
}
else // single-selection listbox
{
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
+ if ( m_windowStyle & wxLB_OWNERDRAW )
+ {
+ 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();
#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
}
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();