X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2fbb8fbbed4e8a15bed1cd539d0f51eac3019658..82c126e50158efee5a1f46e1200be380c5199f8d:/src/os2/choice.cpp diff --git a/src/os2/choice.cpp b/src/os2/choice.cpp index 770da88ccc..9f0360a9fc 100644 --- a/src/os2/choice.cpp +++ b/src/os2/choice.cpp @@ -24,7 +24,7 @@ #include "wx/os2/private.h" -IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl) +IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControlWithItems) bool wxChoice::Create( wxWindow* pParent @@ -107,76 +107,69 @@ bool wxChoice::Create( int nEditHeight; wxGetCharSize( GetHWND(), NULL, &nEditHeight, &vFont ); nEditHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nEditHeight); - SetBestFittingSize(wxSize(-1,nEditHeight+4)); // +2x2 for the border + SetInitialSize(wxSize(-1,nEditHeight+4)); // +2x2 for the border return true; } // end of wxChoice::Create wxChoice::~wxChoice() { - Free(); + Clear(); } // ---------------------------------------------------------------------------- // adding/deleting items to/from the list // ---------------------------------------------------------------------------- -int wxChoice::DoAppend( - const wxString& rsItem -) +int wxChoice::DoInsertItems(const wxArrayStringsAdapter& items + , unsigned int pos + , void **clientData + , wxClientDataType type + ) { - int nIndex; + int nIndex = wxNOT_FOUND; LONG nIndexType = 0; - if (m_windowStyle & wxCB_SORT) + bool incrementPos = false; + if ( IsSorted() ) nIndexType = LIT_SORTASCENDING; - else + else if (pos == GetCount()) nIndexType = LIT_END; - nIndex = (int)::WinSendMsg( GetHwnd() - ,LM_INSERTITEM - ,(MPARAM)nIndexType - ,(MPARAM)rsItem.c_str() - ); - return nIndex; -} // end of wxChoice::DoAppend - -int wxChoice::DoInsert( const wxString& rsItem, unsigned int pos ) -{ - wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list")); - wxCHECK_MSG(IsValidInsert(pos), -1, wxT("invalid index")); - - if (pos == GetCount()) - return DoAppend(rsItem); - - int nIndex; - LONG nIndexType = 0; - - if (m_windowStyle & wxCB_SORT) - nIndexType = LIT_SORTASCENDING; else + { nIndexType = pos; - nIndex = (int)::WinSendMsg( GetHwnd() - ,LM_INSERTITEM - ,(MPARAM)nIndexType - ,(MPARAM)rsItem.c_str() - ); + incrementPos = true; + } + + const unsigned int count = items.GetCount(); + for( unsigned int i = 0; i < count; ++i ) + { + nIndex = (int)::WinSendMsg( GetHwnd() + ,LM_INSERTITEM + ,(MPARAM)nIndexType + ,(MPARAM)items[i].wx_str() + ); + if (nIndex < 0) + { + nIndex = wxNOT_FOUND; + break; + } + AssignNewItemClientData(nIndex, clientData, i, type); + + if (incrementPos) + ++nIndexType; + } return nIndex; -} // end of wxChoice::DoInsert +} // end of wxChoice::DoInsertAppendItemsWithData -void wxChoice::Delete(unsigned int n) +void wxChoice::DoDeleteOneItem(unsigned int n) { wxCHECK_RET( IsValid(n), wxT("invalid item index in wxChoice::Delete") ); - if ( HasClientObjectData() ) - { - delete GetClientObject(n); - } - ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0); } // end of wxChoice::Delete -void wxChoice::Clear() +void wxChoice::DoClear() { - Free(); ::WinSendMsg(GetHwnd(), LM_DELETEALL, (MPARAM)0, (MPARAM)0); } // end of wxChoice::Clear @@ -214,7 +207,7 @@ void wxChoice::SetString(unsigned int n, const wxString& rsStr) LONG nIndexType = 0; void* pData; - if ( m_clientDataItemsType != wxClientData_None ) + if ( HasClientData() ) { pData = DoGetItemClientData(n); } @@ -232,7 +225,7 @@ void wxChoice::SetString(unsigned int n, const wxString& rsStr) ::WinSendMsg( GetHwnd() ,LM_INSERTITEM ,(MPARAM)nIndexType - ,(MPARAM)rsStr.c_str() + ,(MPARAM)rsStr.wx_str() ); if (pData) @@ -277,16 +270,6 @@ void* wxChoice::DoGetItemClientData(unsigned int n) const return((void*)rc); } // end of wxChoice::DoGetItemClientData -void wxChoice::DoSetItemClientObject(unsigned int n, wxClientData* pClientData) -{ - DoSetItemClientData(n, pClientData); -} // end of wxChoice::DoSetItemClientObject - -wxClientData* wxChoice::DoGetItemClientObject(unsigned int n) const -{ - return (wxClientData *)DoGetItemClientData(n); -} // end of wxChoice::DoGetItemClientObject - // ---------------------------------------------------------------------------- // wxOS2 specific helpers // ---------------------------------------------------------------------------- @@ -399,17 +382,4 @@ bool wxChoice::OS2Command( return true; } // end of wxChoice::OS2Command -void wxChoice::Free() -{ - if (HasClientObjectData()) - { - const unsigned int nCount = GetCount(); - - for (unsigned int n = 0; n < nCount; n++) - { - delete GetClientObject(n); - } - } -} // end of wxChoice::Free - #endif // wxUSE_CHOICE