X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9085d634d9e29a877761ef51a01c740749648e33..df4ac4c7e93cfc6a6253331285c0f8a50b0e22b2:/src/msw/listbox.cpp diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index e6103c2025..a274222a8a 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -93,7 +93,7 @@ class wxListBoxItem : public wxOwnerDrawn { public: - wxListBoxItem(const wxString& str = ""); + wxListBoxItem(const wxString& str = wxEmptyString); }; wxListBoxItem::wxListBoxItem(const wxString& str) : wxOwnerDrawn(str, FALSE) @@ -102,7 +102,7 @@ wxListBoxItem::wxListBoxItem(const wxString& str) : wxOwnerDrawn(str, FALSE) SetMarginWidth(0); } -wxOwnerDrawn *wxListBox::CreateItem(size_t WXUNUSED(n)) +wxOwnerDrawn *wxListBox::CreateLboxItem(size_t WXUNUSED(n)) { return new wxListBoxItem(); } @@ -161,6 +161,10 @@ bool wxListBox::Create(wxWindow *parent, wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED), _T("only one of listbox selection modes can be specified") ); + + if ( (m_windowStyle & wxBORDER_MASK) == wxBORDER_DEFAULT ) + m_windowStyle |= wxBORDER_SUNKEN; + if ( m_windowStyle & wxCLIP_SIBLINGS ) wstyle |= WS_CLIPSIBLINGS; @@ -272,7 +276,7 @@ void wxListBox::Delete(int N) SendMessage(GetHwnd(), LB_DELETESTRING, N, 0); m_noItems--; - SetHorizontalExtent(""); + SetHorizontalExtent(wxEmptyString); } int wxListBox::DoAppend(const wxString& item) @@ -282,7 +286,7 @@ int wxListBox::DoAppend(const wxString& item) #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { - wxOwnerDrawn *pNewItem = CreateItem(index); // dummy argument + wxOwnerDrawn *pNewItem = CreateLboxItem(index); // dummy argument pNewItem->SetName(item); m_aItems.Insert(pNewItem, index); ListBox_SetItemData(GetHwnd(), index, pNewItem); @@ -313,16 +317,7 @@ void wxListBox::DoSetItems(const wxArrayString& choices, void** clientData) ListBox_AddString(GetHwnd(), choices[i]); if ( clientData ) { -#if wxUSE_OWNER_DRAWN - if ( m_windowStyle & wxLB_OWNERDRAW ) - { - wxASSERT_MSG(clientData[i] == NULL, - wxT("Can't use client data with owner-drawn listboxes")); - } - ListBox_SetItemData(GetHwnd(), i, clientData[i]); -#else // !wxUSE_OWNER_DRAWN - ListBox_SetItemData(GetHwnd(), i, clientData[i]); -#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN + SetClientData(i, clientData[i]); } } @@ -333,7 +328,7 @@ void wxListBox::DoSetItems(const wxArrayString& choices, void** clientData) // then create new ones for ( size_t ui = 0; ui < (size_t)m_noItems; ui++ ) { - wxOwnerDrawn *pNewItem = CreateItem(ui); + wxOwnerDrawn *pNewItem = CreateLboxItem(ui); pNewItem->SetName(choices[ui]); m_aItems.Add(pNewItem); ListBox_SetItemData(GetHwnd(), ui, pNewItem); @@ -453,21 +448,32 @@ int wxListBox::GetSelections(wxArrayInt& aSelections) const 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 { @@ -491,7 +497,7 @@ int wxListBox::GetSelection() const // Find string for position wxString wxListBox::GetString(int N) const { - wxCHECK_MSG( N >= 0 && N < m_noItems, "", + wxCHECK_MSG( N >= 0 && N < m_noItems, wxEmptyString, wxT("invalid index in wxListBox::GetClientData") ); int len = ListBox_GetTextLen(GetHwnd(), N); @@ -518,7 +524,7 @@ wxListBox::DoInsertItems(const wxArrayString& items, int pos) #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { - wxOwnerDrawn *pNewItem = CreateItem(idx); + wxOwnerDrawn *pNewItem = CreateLboxItem(idx); pNewItem->SetName(items[i]); pNewItem->SetFont(GetFont()); m_aItems.Insert(pNewItem, idx);