X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8228b8932abaedadbf9568bb3a1eef3ae25fb2a3..cc5de8fe047e00cf3fbaa16b3a02a9aac7caf16e:/src/os2/choice.cpp diff --git a/src/os2/choice.cpp b/src/os2/choice.cpp index a6264e0f8d..770da88ccc 100644 --- a/src/os2/choice.cpp +++ b/src/os2/choice.cpp @@ -14,8 +14,9 @@ #if wxUSE_CHOICE +#include "wx/choice.h" + #ifndef WX_PRECOMP - #include "wx/choice.h" #include "wx/utils.h" #include "wx/log.h" #include "wx/settings.h" @@ -69,8 +70,9 @@ bool wxChoice::Create( WS_TABSTOP | WS_VISIBLE; - if (lStyle & wxCLIP_SIBLINGS ) - lSstyle |= WS_CLIPSIBLINGS; + // clipping siblings does not yet work + // if (lStyle & wxCLIP_SIBLINGS ) + // lSstyle |= WS_CLIPSIBLINGS; wxASSERT_MSG( !(lStyle & wxCB_DROPDOWN) && !(lStyle & wxCB_READONLY) && @@ -88,6 +90,8 @@ bool wxChoice::Create( // on global settings) rather than inheriting the parent's background colour. // SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + + // initialize the controls contents for (int i = 0; i < n; i++) { Append(asChoices[i]); @@ -97,9 +101,22 @@ bool wxChoice::Create( ,rSize.x ,rSize.y ); + + // Set height to use with sizers i.e. without the dropdown listbox + wxFont vFont = GetFont(); + int nEditHeight; + wxGetCharSize( GetHWND(), NULL, &nEditHeight, &vFont ); + nEditHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nEditHeight); + SetBestFittingSize(wxSize(-1,nEditHeight+4)); // +2x2 for the border + return true; } // end of wxChoice::Create +wxChoice::~wxChoice() +{ + Free(); +} + // ---------------------------------------------------------------------------- // adding/deleting items to/from the list // ---------------------------------------------------------------------------- @@ -110,8 +127,7 @@ int wxChoice::DoAppend( { int nIndex; LONG nIndexType = 0; - - if (m_windowStyle & wxLB_SORT) + if (m_windowStyle & wxCB_SORT) nIndexType = LIT_SORTASCENDING; else nIndexType = LIT_END; @@ -123,18 +139,18 @@ int wxChoice::DoAppend( return nIndex; } // end of wxChoice::DoAppend -int wxChoice::DoInsert( const wxString& rsItem, int pos ) +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 ((size_t)pos == GetCount()) + if (pos == GetCount()) return DoAppend(rsItem); int nIndex; LONG nIndexType = 0; - if (m_windowStyle & wxLB_SORT) + if (m_windowStyle & wxCB_SORT) nIndexType = LIT_SORTASCENDING; else nIndexType = pos; @@ -146,9 +162,15 @@ int wxChoice::DoInsert( const wxString& rsItem, int pos ) return nIndex; } // end of wxChoice::DoInsert -void wxChoice::Delete( int n ) +void wxChoice::Delete(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 @@ -182,12 +204,12 @@ void wxChoice::SetSelection( // string list functions // ---------------------------------------------------------------------------- -size_t wxChoice::GetCount() const +unsigned int wxChoice::GetCount() const { - return((size_t)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0))); + return((unsigned int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0))); } // end of wxChoice::GetCount -void wxChoice::SetString( int n, const wxString& rsStr ) +void wxChoice::SetString(unsigned int n, const wxString& rsStr) { LONG nIndexType = 0; void* pData; @@ -203,7 +225,7 @@ void wxChoice::SetString( int n, const wxString& rsStr ) ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, 0); - if (m_windowStyle & wxLB_SORT) + if (m_windowStyle & wxCB_SORT) nIndexType = LIT_SORTASCENDING; else nIndexType = LIT_END; @@ -215,13 +237,11 @@ void wxChoice::SetString( int n, const wxString& rsStr ) if (pData) { - DoSetItemClientData( n - ,pData - ); + DoSetItemClientData(n, pData); } } // end of wxChoice::SetString -wxString wxChoice::GetString(int n) const +wxString wxChoice::GetString(unsigned int n) const { int nLen = 0; wxString sStr = wxEmptyString; @@ -230,7 +250,7 @@ wxString wxChoice::GetString(int n) const nLen = (size_t)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)n, (MPARAM)0)); if (nLen != LIT_ERROR && nLen > 0) { - zBuf = new wxChar[nLen + 1]; + zBuf = new wxChar[++nLen]; ::WinSendMsg( GetHwnd() ,LM_QUERYITEMTEXT ,MPFROM2SHORT((SHORT)n, (SHORT)nLen) @@ -246,35 +266,23 @@ wxString wxChoice::GetString(int n) const // client data // ---------------------------------------------------------------------------- -void wxChoice::DoSetItemClientData( - int n -, void* pClientData -) +void wxChoice::DoSetItemClientData(unsigned int n, void* pClientData) { ::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, (MPARAM)n, MPFROMP(pClientData)); } // end of wxChoice::DoSetItemClientData -void* wxChoice::DoGetItemClientData( int n ) const +void* wxChoice::DoGetItemClientData(unsigned int n) const { - MRESULT rc = 0L; - - rc = ::WinSendMsg(GetHwnd(), LM_QUERYITEMHANDLE, (MPARAM)n, (MPARAM)0); + MRESULT rc = ::WinSendMsg(GetHwnd(), LM_QUERYITEMHANDLE, (MPARAM)n, (MPARAM)0); return((void*)rc); -} // end of wxChoice::DoSetItemClientData +} // end of wxChoice::DoGetItemClientData -void wxChoice::DoSetItemClientObject( - int n -, wxClientData* pClientData -) +void wxChoice::DoSetItemClientObject(unsigned int n, wxClientData* pClientData) { - DoSetItemClientData( n - ,pClientData - ); + DoSetItemClientData(n, pClientData); } // end of wxChoice::DoSetItemClientObject -wxClientData* wxChoice::DoGetItemClientObject( - int n -) const +wxClientData* wxChoice::DoGetItemClientObject(unsigned int n) const { return (wxClientData *)DoGetItemClientData(n); } // end of wxChoice::DoGetItemClientObject @@ -315,9 +323,9 @@ wxSize wxChoice::DoGetBestSize() const int nCy; wxFont vFont = (wxFont)GetFont(); - const size_t nItems = GetCount(); + const unsigned int nItems = GetCount(); - for (size_t i = 0; i < nItems; i++) + for (unsigned int i = 0; i < nItems; i++) { wxString sStr(GetString(i)); GetTextExtent( sStr, &nLineWidth, NULL ); @@ -341,12 +349,10 @@ wxSize wxChoice::DoGetBestSize() const // // Choice drop-down list depends on number of items (limited to 10) // - size_t nStrings = nItems == 0 ? 10 : wxMin(10, nItems) + 1; - int nChoiceHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * nStrings; + size_t nStrings = nItems == 0 ? 10 : wxMin(10, nItems) + 1; + int nChoiceHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * nStrings; - return wxSize( nChoiceWidth - ,nChoiceHeight - ); + return wxSize(nChoiceWidth, nChoiceHeight); } // end of wxChoice::DoGetBestSize MRESULT wxChoice::OS2WindowProc( @@ -397,9 +403,9 @@ void wxChoice::Free() { if (HasClientObjectData()) { - const size_t nCount = GetCount(); + const unsigned int nCount = GetCount(); - for (size_t n = 0; n < nCount; n++) + for (unsigned int n = 0; n < nCount; n++) { delete GetClientObject(n); }