X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..118322a3dfcc1803bd13df8193ea1be9ae39e653:/src/msw/choice.cpp diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index d1fa5f71f4..7faa959c51 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWidgets licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -28,7 +28,7 @@ #pragma hdrstop #endif -#if wxUSE_CHOICE +#if wxUSE_CHOICE && !defined(__SMARTPHONE__) #ifndef WX_PRECOMP #include "wx/choice.h" @@ -138,11 +138,11 @@ bool wxChoice::CreateAndInit(wxWindow *parent, { // initialize wxControl if ( !CreateControl(parent, id, pos, size, style, validator, name) ) - return FALSE; + return false; // now create the real HWND if ( !MSWCreateControl(wxT("COMBOBOX"), _T(""), pos, size) ) - return FALSE; + return false; // choice/combobox normally has "white" (depends on colour scheme, of @@ -158,7 +158,7 @@ bool wxChoice::CreateAndInit(wxWindow *parent, // and now we may finally size the control properly (if needed) SetBestSize(size); - return TRUE; + return true; } bool wxChoice::Create(wxWindow *parent, @@ -179,8 +179,9 @@ bool wxChoice::MSWShouldPreProcessMessage(WXMSG *pMsg) { MSG *msg = (MSG *) pMsg; - // don't preprocess "ESC" if combobox is dropped down - if ( msg->message == WM_KEYDOWN && msg->wParam == VK_ESCAPE ) + // if the dropdown list is visible, don't preprocess certain keys + if ( msg->message == WM_KEYDOWN + && (msg->wParam == VK_ESCAPE || msg->wParam == VK_RETURN) ) { if (::SendMessage(GetHwndOf(this), CB_GETDROPPEDSTATE, 0, 0)) { @@ -231,7 +232,8 @@ int wxChoice::DoAppend(const wxString& item) { // we need to refresh our size in order to have enough space for the // newly added items - UpdateVisibleHeight(); + if ( !IsFrozen() ) + UpdateVisibleHeight(); } return n; @@ -249,7 +251,8 @@ int wxChoice::DoInsert(const wxString& item, int pos) } else // ok { - UpdateVisibleHeight(); + if ( !IsFrozen() ) + UpdateVisibleHeight(); } return n; @@ -266,7 +269,8 @@ void wxChoice::Delete(int n) SendMessage(GetHwnd(), CB_DELETESTRING, n, 0); - UpdateVisibleHeight(); + if ( !IsFrozen() ) + UpdateVisibleHeight(); } void wxChoice::Clear() @@ -275,7 +279,8 @@ void wxChoice::Clear() SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0); - UpdateVisibleHeight(); + if ( !IsFrozen() ) + UpdateVisibleHeight(); } void wxChoice::Free() @@ -322,7 +327,7 @@ int wxChoice::FindString(const wxString& s) const for ( int i = 0; i < count; i++ ) { // as CB_FINDSTRINGEXACT is case insensitive, be case insensitive too - if ( GetString(i).IsSameAs(s, FALSE) ) + if ( GetString(i).IsSameAs(s, false) ) return i; } @@ -430,7 +435,7 @@ wxClientData* wxChoice::DoGetItemClientObject( int n ) const void wxChoice::UpdateVisibleHeight() { // be careful to not change the width here - DoSetSize(-1, -1, -1, GetSize().y, wxSIZE_USE_EXISTING); + DoSetSize(wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, GetSize().y, wxSIZE_USE_EXISTING); } void wxChoice::DoMoveWindow(int x, int y, int width, int height) @@ -457,7 +462,7 @@ void wxChoice::DoGetSize(int *w, int *h) const // total height of the control including the drop down list -- but only // sometimes, and normally it isn't... I have no idea about what to do with // this - wxControl::DoGetSize(w, h); + wxControl::DoGetSize(w, h); } void wxChoice::DoSetSize(int x, int y, @@ -469,15 +474,15 @@ void wxChoice::DoSetSize(int x, int y, // the height which we must pass to Windows should be the total height of // the control including the drop down list while the height given to us // is, of course, just the height of the permanently visible part of it - if ( height != -1 ) + if ( height != wxDefaultCoord ) { // don't make the drop down list too tall, arbitrarily limit it to 40 // items max and also don't leave it empty size_t nItems = GetCount(); if ( !nItems ) nItems = 9; - else if ( nItems > 39 ) - nItems = 39; + else if ( nItems > 24 ) + nItems = 24; // add space for the drop down list const int hItem = SendMessage(GetHwnd(), CB_GETITEMHEIGHT, 0, 0); @@ -494,7 +499,7 @@ void wxChoice::DoSetSize(int x, int y, // if the height specified for the visible part of the control is // different from the current one, we need to change it separately // as it is not affected by normal WM_SETSIZE - if ( height != -1 ) + if ( height != wxDefaultCoord ) { const int delta = heightOrig - GetSize().y; if ( delta ) @@ -556,7 +561,7 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) if ( param != CBN_SELCHANGE) { // "selection changed" is the only event we're after - return FALSE; + return false; } int n = GetSelection(); @@ -573,7 +578,7 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) ProcessCommand(event); } - return TRUE; + return true; } WXHBRUSH wxChoice::OnCtlColor(WXHDC pDC, WXHWND WXUNUSED(pWnd), WXUINT WXUNUSED(nCtlColor), @@ -596,4 +601,4 @@ WXHBRUSH wxChoice::OnCtlColor(WXHDC pDC, WXHWND WXUNUSED(pWnd), WXUINT WXUNUSED( return (WXHBRUSH)brush->GetResourceHandle(); } -#endif // wxUSE_CHOICE +#endif // wxUSE_CHOICE && !__SMARTPHONE__