X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57f4f9255e3d70e219e6eabd68c3990c0f471f81..1794103babb9da5387ff71b43f3bd0aa6d2413e2:/src/msw/spinctrl.cpp diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index a88446e8c6..dbc1bdd3ff 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 22.07.99 // RCS-ID: $Id$ -// Copyright: (c) Vadim Zeitlin +// Copyright: (c) 1999-2005 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -13,11 +13,6 @@ // declarations // ============================================================================ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "spinctrlbase.h" - #pragma implementation "spinctrl.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -35,14 +30,13 @@ #if wxUSE_SPINCTRL -#if defined(__WIN95__) - #include "wx/spinctrl.h" #include "wx/msw/private.h" +#include "wx/msw/wrapcctl.h" -#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) - #include -#endif +#if wxUSE_TOOLTIPS + #include "wx/tooltip.h" +#endif // wxUSE_TOOLTIPS #include // for INT_MIN @@ -115,11 +109,12 @@ wxCONSTRUCTOR_6( wxSpinCtrl , wxWindow* , Parent , wxWindowID , Id , wxString , IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl) #endif +//pmg EVT_KILL_FOCUS BEGIN_EVENT_TABLE(wxSpinCtrl, wxSpinButton) EVT_CHAR(wxSpinCtrl::OnChar) EVT_SET_FOCUS(wxSpinCtrl::OnSetFocus) - + EVT_KILL_FOCUS(wxSpinCtrl::OnKillFocus) EVT_SPIN(wxID_ANY, wxSpinCtrl::OnSpinChange) END_EVENT_TABLE() @@ -268,6 +263,13 @@ void wxSpinCtrl::OnChar(wxKeyEvent& event) event.Skip(); } +void wxSpinCtrl::OnKillFocus(wxFocusEvent& event) +{ + // ensure that the value is shown correctly + SetValue(GetValue()) ; + event.Skip(); +} + void wxSpinCtrl::OnSetFocus(wxFocusEvent& event) { // when we get focus, give it to our buddy window as it needs it more than @@ -392,7 +394,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, // associate the text window with the spin button (void)::SendMessage(GetHwnd(), UDM_SETBUDDY, (WPARAM)m_hwndBuddy, 0); - if ( !value.IsEmpty() ) + if ( !value.empty() ) { SetValue(value); } @@ -437,6 +439,9 @@ int wxSpinCtrl::GetValue() const if ( (wxSscanf(val, wxT("%lu"), &n) != 1) ) n = INT_MIN; + if (n < m_min) n = m_min; + if (n > m_max) n = m_max; + return n; } @@ -449,7 +454,7 @@ void wxSpinCtrl::SetSelection(long from, long to) from = 0; } - ::SendMessage((HWND)m_hwndBuddy, EM_SETSEL, (WPARAM)from, (LPARAM)to); + ::SendMessage(GetBuddyHwnd(), EM_SETSEL, (WPARAM)from, (LPARAM)to); } // ---------------------------------------------------------------------------- @@ -499,6 +504,18 @@ void wxSpinCtrl::SetFocus() ::SetFocus(GetBuddyHwnd()); } +#if wxUSE_TOOLTIPS + +void wxSpinCtrl::DoSetToolTip(wxToolTip *tip) +{ + wxSpinButton::DoSetToolTip(tip); + + if ( tip ) + tip->Add(m_hwndBuddy); +} + +#endif // wxUSE_TOOLTIPS + // ---------------------------------------------------------------------------- // event processing // ---------------------------------------------------------------------------- @@ -553,16 +570,12 @@ void wxSpinCtrl::DoMoveWindow(int x, int y, int width, int height) wxLogDebug(_T("not enough space for wxSpinCtrl!")); } - if ( !::MoveWindow(GetBuddyHwnd(), x, y, widthText, height, TRUE) ) - { - wxLogLastError(wxT("MoveWindow(buddy)")); - } + // 1) The buddy window + DoMoveSibling(m_hwndBuddy, x, y, widthText, height); + // 2) The button window x += widthText + MARGIN_BETWEEN; - if ( !::MoveWindow(GetHwnd(), x, y, widthBtn, height, TRUE) ) - { - wxLogLastError(wxT("MoveWindow")); - } + wxSpinButton::DoMoveWindow(x, y, widthBtn, height); } // get total size of the control @@ -590,8 +603,5 @@ void wxSpinCtrl::DoGetPosition(int *x, int *y) const wxConstCast(this, wxSpinCtrl)->m_hWnd = hWnd; } -#endif // __WIN95__ - -#endif - // wxUSE_SPINCTRL +#endif // wxUSE_SPINCTRL