From: Vadim Zeitlin Date: Sat, 19 May 2001 01:01:21 +0000 (+0000) Subject: 1. more proper fix for wxChoice/wxComboBox height problems than in 2,2 branch X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/18c5099700db5b60042618077ae943ba65e7a7a8 1. more proper fix for wxChoice/wxComboBox height problems than in 2,2 branch 2. wxIsspace() fix merged from the 2.2 branch git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10228 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/choice.h b/include/wx/msw/choice.h index cc00ce00b3..fdc9fef5b8 100644 --- a/include/wx/msw/choice.h +++ b/include/wx/msw/choice.h @@ -70,6 +70,7 @@ public: WXUINT message, WXWPARAM wParam, WXLPARAM lParam); protected: + virtual void DoMoveWindow(int x, int y, int width, int height); virtual void DoSetItemClientData( int n, void* clientData ); virtual void* DoGetItemClientData( int n ) const; virtual void DoSetItemClientObject( int n, wxClientData* clientData ); diff --git a/include/wx/msw/combobox.h b/include/wx/msw/combobox.h index ab5127be3d..3a1877a303 100644 --- a/include/wx/msw/combobox.h +++ b/include/wx/msw/combobox.h @@ -86,7 +86,6 @@ public: WXHWND GetEditHWND() const; protected: - virtual void DoMoveWindow(int x, int y, int width, int height); virtual wxSize DoGetBestSize() const; }; diff --git a/include/wx/wxchar.h b/include/wx/wxchar.h index 31658ced47..ff21ca685b 100644 --- a/include/wx/wxchar.h +++ b/include/wx/wxchar.h @@ -637,6 +637,13 @@ WXDLLEXPORT int wxSystem(const wxChar *psz); WXDLLEXPORT size_t wxStrftime(wxChar *s, size_t max, const wxChar *fmt, const struct tm *tm); #endif +// under VC++ 6.0 isspace() returns 1 for 8 bit chars which completely breaks +// the file parsing - this may be true for 5.0 as well, update #ifdef then +#if defined(__VISUALC__) && (__VISUALC__ >= 1200) && !wxUSE_UNICODE + #undef wxIsspace + #define wxIsspace(c) ((((unsigned)c) < 128) && isspace(c)) +#endif // VC++ + // ---------------------------------------------------------------------------- // common macros which are always defined // ---------------------------------------------------------------------------- diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index 41e23a5ece..110d9e0b91 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -38,7 +38,7 @@ #include "wx/msw/private.h" - IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl) +IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl) // ============================================================================ // implementation @@ -254,6 +254,24 @@ wxClientData* wxChoice::DoGetItemClientObject( int n ) const // wxMSW specific helpers // ---------------------------------------------------------------------------- +void wxChoice::DoMoveWindow(int x, int y, int width, int height) +{ + // here is why this is necessary: if the width is negative, the combobox + // window proc makes the window of the size width*height instead of + // interpreting height in the usual manner (meaning the height of the drop + // down list - usually the height specified in the call to MoveWindow() + // will not change the height of combo box per se) + // + // this behaviour is not documented anywhere, but this is just how it is + // here (NT 4.4) and, anyhow, the check shouldn't hurt - however without + // the check, constraints/sizers using combos may break the height + // constraint will have not at all the same value as expected + if ( width < 0 ) + return; + + wxControl::DoMoveWindow(x, y, width, height); +} + void wxChoice::DoSetSize(int x, int y, int width, int WXUNUSED(height), int sizeFlags) diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index c66b9eb906..67cfabde1b 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -487,36 +487,6 @@ void wxComboBox::SetSelection(long from, long to) } } -void wxComboBox::DoMoveWindow(int x, int y, int width, int height) -{ - // here is why this is necessary: if the width is negative, the combobox - // window proc makes the window of the size width*height instead of - // interpreting height in the usual manner (meaning the height of the drop - // down list - usually the height specified in the call to MoveWindow() - // will not change the height of combo box per se) - // - // this behaviour is not documented anywhere, but this is just how it is - // here (NT 4.4) and, anyhow, the check shouldn't hurt - however without - // the check, constraints/sizers using combos may break the height - // constraint will have not at all the same value as expected - if ( width < 0 ) - return; - - int cx, cy; - wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); - - // what should the height of the drop down list be? we choose 10 items by - // default and also 10 items max (if we always use n, the list will never - // have vertical scrollbar) - int n = GetCount(); - if ( !n || (n > 10) ) - n = 10; - - height = (n + 1)* EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy); - - wxControl::DoMoveWindow(x, y, width, height); -} - wxSize wxComboBox::DoGetBestSize() const { // the choice calculates the horz size correctly, but not the vertical