X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/38400bb46b1477680ec08ed04f2bcafa8de5e3bf..bbd55ff9564dcaf1a5d2ee93d789c4d656baabef:/src/os2/listbox.cpp diff --git a/src/os2/listbox.cpp b/src/os2/listbox.cpp index e45ad8414b..ada1db3c6c 100644 --- a/src/os2/listbox.cpp +++ b/src/os2/listbox.cpp @@ -50,25 +50,25 @@ IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems) class wxListBoxItem : public wxOwnerDrawn { public: - wxListBoxItem(const wxString& rsStr = wxEmptyString); -}; + wxListBoxItem(wxListBox *parent) + { m_parent = parent; } -wxListBoxItem::wxListBoxItem( - const wxString& rsStr -) -: wxOwnerDrawn( rsStr - ,false - ) -{ - // - // No bitmaps/checkmarks - // - SetMarginWidth(0); -} // end of wxListBoxItem::wxListBoxItem + wxListBox *GetParent() const + { return m_parent; } + + int GetIndex() const + { return m_parent->GetItemIndex(const_cast(this)); } + + wxString GetName() const + { return m_parent->GetString(GetIndex()); } + +private: + wxListBox *m_parent; +}; wxOwnerDrawn* wxListBox::CreateItem( size_t WXUNUSED(n) ) { - return new wxListBoxItem(); + return new wxListBoxItem(this); } // end of wxListBox::CreateItem #endif //USE_OWNER_DRAWN @@ -225,14 +225,7 @@ bool wxListBox::Create( wxWindow* pParent, wxListBox::~wxListBox() { -#if wxUSE_OWNER_DRAWN - size_t lUiCount = m_aItems.Count(); - - while (lUiCount-- != 0) - { - delete m_aItems[lUiCount]; - } -#endif // wxUSE_OWNER_DRAWN + Clear(); } // end of wxListBox::~wxListBox void wxListBox::SetupColours() @@ -261,7 +254,7 @@ void wxListBox::DoDeleteOneItem(unsigned int n) #if wxUSE_OWNER_DRAWN delete m_aItems[n]; m_aItems.RemoveAt(n); -#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN +#endif // wxUSE_OWNER_DRAWN ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0); m_nNumItems--; @@ -294,7 +287,7 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items, n = (int)::WinSendMsg(GetHwnd(), LM_INSERTITEM, (MPARAM)lIndexType, (MPARAM)items[i].wx_str()); if (n < 0) { - wxLogLastError(_T("WinSendMsg(LM_INSERTITEM)")); + wxLogLastError(wxT("WinSendMsg(LM_INSERTITEM)")); n = wxNOT_FOUND; break; } @@ -303,13 +296,9 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items, #if wxUSE_OWNER_DRAWN if (HasFlag(wxLB_OWNERDRAW)) { - wxOwnerDrawn* pNewItem = CreateItem(n); // dummy argument - wxScreenDC vDc; // FIXME: is it really needed here? - - pNewItem->SetName(items[i]); - m_aItems.Insert(pNewItem, n); - ::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, (MPARAM)n, MPFROMP(pNewItem)); + wxOwnerDrawn* pNewItem = CreateItem(n); // dummy argument pNewItem->SetFont(GetFont()); + m_aItems.Insert(pNewItem, n); } #endif AssignNewItemClientData(n, clientData, i, type); @@ -324,14 +313,10 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items, void wxListBox::DoClear() { #if wxUSE_OWNER_DRAWN - unsigned int lUiCount = m_aItems.Count(); - - while (lUiCount-- != 0) + if ( m_windowStyle & wxLB_OWNERDRAW ) { - delete m_aItems[lUiCount]; + WX_CLEAR_ARRAY(m_aItems); } - - m_aItems.Clear(); #endif // wxUSE_OWNER_DRAWN ::WinSendMsg(GetHwnd(), LM_DELETEALL, (MPARAM)0, (MPARAM)0); @@ -385,17 +370,6 @@ void wxListBox::DoSetItemClientData(unsigned int n, void* pClientData) wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetClientData") ); -#if wxUSE_OWNER_DRAWN - if ( m_windowStyle & wxLB_OWNERDRAW ) - { - // - // Client data must be pointer to wxOwnerDrawn, otherwise we would crash - // in OnMeasure/OnDraw. - // - wxFAIL_MSG(wxT("Can't use client data with owner-drawn listboxes")); - } -#endif // wxUSE_OWNER_DRAWN - ::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, MPFROMLONG(n), MPFROMP(pClientData)); } // end of wxListBox::DoSetItemClientData @@ -549,14 +523,6 @@ void wxListBox::SetString(unsigned int n, const wxString& rsString) // if (bWasSelected) Select(n); - -#if wxUSE_OWNER_DRAWN - if (m_windowStyle & wxLB_OWNERDRAW) - // - // Update item's text - // - m_aItems[n]->SetName(rsString); -#endif //USE_OWNER_DRAWN } // end of wxListBox::SetString unsigned int wxListBox::GetCount() const @@ -714,7 +680,6 @@ bool wxListBox::OS2OnDraw ( ) { POWNERITEM pDrawStruct = (POWNERITEM)pItem; - LONG lItemID = pDrawStruct->idItem; int eAction = 0; int eStatus = 0; @@ -727,17 +692,10 @@ bool wxListBox::OS2OnDraw ( // // The item may be -1 for an empty listbox // - if (lItemID == -1L) + if (pDrawStruct->idItem == -1L) return false; - wxListBoxItem* pData = (wxListBoxItem*)PVOIDFROMMR( ::WinSendMsg( GetHwnd() - ,LM_QUERYITEMHANDLE - ,MPFROMLONG(pDrawStruct->idItem) - ,(MPARAM)0 - ) - ); - - wxCHECK(pData, false ); + wxListBoxItem* pData = (wxListBoxItem*)m_aItems[pDrawStruct->idItem]; wxClientDC vDc(this); wxPMDCImpl *impl = (wxPMDCImpl*) vDc.GetImpl(); @@ -813,7 +771,7 @@ bool wxListBox::OS2OnDraw ( return pData->OnDrawItem( vDc ,vRect ,(wxOwnerDrawn::wxODAction)eAction - ,(wxOwnerDrawn::wxODStatus)eStatus + ,(wxOwnerDrawn::wxODStatus)(eStatus | wxOwnerDrawn::wxODHidePrefix) ); } // end of wxListBox::OS2OnDraw