X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f9eee2db810695ae4417e9935475f268bb68bbac..9151dcec4f51cf7e9c160ede683cc63392459fea:/src/os2/choice.cpp diff --git a/src/os2/choice.cpp b/src/os2/choice.cpp index 88fff750fb..9e4e5e1378 100644 --- a/src/os2/choice.cpp +++ b/src/os2/choice.cpp @@ -12,6 +12,10 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/defs.h" + +#if wxUSE_CHOICE + #ifndef WX_PRECOMP #include "wx/choice.h" #include "wx/utils.h" @@ -23,6 +27,23 @@ IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl) +bool wxChoice::Create( + wxWindow* pParent +, wxWindowID vId +, const wxPoint& rPos +, const wxSize& rSize +, const wxArrayString& asChoices +, long lStyle +, const wxValidator& rValidator +, const wxString& rsName +) +{ + wxCArrayString chs(asChoices); + + return Create(pParent, vId, rPos, rSize, chs.GetCount(), chs.GetStrings(), + lStyle, rValidator, rsName); +} + bool wxChoice::Create( wxWindow* pParent , wxWindowID vId @@ -45,7 +66,7 @@ bool wxChoice::Create( ,rValidator ,rsName )) - return FALSE; + return false; lSstyle = CBS_DROPDOWNLIST | WS_TABSTOP | WS_VISIBLE; @@ -62,7 +83,7 @@ bool wxChoice::Create( if (!OS2CreateControl( wxT("COMBOBOX") ,lSstyle )) - return FALSE; + return false; // // A choice/combobox normally has a white background (or other, depending @@ -85,7 +106,7 @@ bool wxChoice::Create( ,rSize.y ); delete pTextFont; - return TRUE; + return true; } // end of wxChoice::Create // ---------------------------------------------------------------------------- @@ -97,7 +118,7 @@ int wxChoice::DoAppend( ) { int nIndex; - SHORT nIndexType = 0; + LONG nIndexType = 0; if (m_windowStyle & wxLB_SORT) nIndexType = LIT_SORTASCENDING; @@ -111,6 +132,32 @@ int wxChoice::DoAppend( return nIndex; } // end of wxChoice::DoAppend +int wxChoice::DoInsert( + const wxString& rsItem, + int pos +) +{ + wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list")); + wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index")); + + if (pos == GetCount()) + return DoAppend(rsItem); + + int nIndex; + LONG nIndexType = 0; + + if (m_windowStyle & wxLB_SORT) + nIndexType = LIT_SORTASCENDING; + else + nIndexType = pos; + nIndex = (int)::WinSendMsg( GetHwnd() + ,LM_INSERTITEM + ,(MPARAM)nIndexType + ,(MPARAM)rsItem.c_str() + ); + return nIndex; +} // end of wxChoice::DoInsert + void wxChoice::Delete( int n ) @@ -184,7 +231,17 @@ void wxChoice::SetString( , const wxString& rsStr ) { - SHORT nIndexType = 0; + LONG nIndexType = 0; + void* pData; + + if ( m_clientDataItemsType != wxClientData_None ) + { + pData = DoGetItemClientData(n); + } + else // no client data + { + pData = NULL; + } ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, 0); @@ -197,13 +254,20 @@ void wxChoice::SetString( ,(MPARAM)nIndexType ,(MPARAM)rsStr.c_str() ); + + if (pData) + { + DoSetItemClientData( n + ,pData + ); + } } // end of wxChoice::SetString wxString wxChoice::GetString( int n ) const { - size_t nLen = 0; + int nLen = 0; wxString sStr = ""; char* zBuf; @@ -274,7 +338,7 @@ void wxChoice::DoSetSize( // // Ignore height parameter because height doesn't mean 'initially // displayed' height, it refers to the drop-down menu as well. The - // wxWindows interpretation is different; also, getting the size returns + // wxWidgets interpretation is different; also, getting the size returns // the _displayed_ size (NOT the drop down menu size) so // setting-getting-setting size would not work. // @@ -296,6 +360,7 @@ wxSize wxChoice::DoGetBestSize() const int nItems = GetCount(); int nCx; int nCy; + wxFont vFont = (wxFont)GetFont(); for (int i = 0; i < nItems; i++) { @@ -322,7 +387,7 @@ wxSize wxChoice::DoGetBestSize() const wxGetCharSize( GetHWND() ,&nCx ,&nCy - ,(wxFont*)&GetFont() + ,&vFont ); nChoiceWidth += 5 * nCx; @@ -359,7 +424,7 @@ bool wxChoice::OS2Command( // // "selection changed" is the only event we're after // - return FALSE; + return false; } int n = GetSelection(); @@ -378,7 +443,7 @@ bool wxChoice::OS2Command( vEvent.SetClientData(GetClientData(n)); ProcessCommand(vEvent); } - return TRUE; + return true; } // end of wxChoice::OS2Command void wxChoice::Free() @@ -392,4 +457,6 @@ void wxChoice::Free() delete GetClientObject(n); } } -} // end of wxhoice::Free +} // end of wxChoice::Free + +#endif // wxUSE_CHOICE