X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a1c882c99ded33004d8e38cb53fbfc7e95bbaa85..3aa8e4ea6db0478d3bc862f59f100408bdc8732f:/src/msw/spinctrl.cpp diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index e10de2b893..2a1826c45a 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -32,6 +32,7 @@ #include "wx/msw/wrapcctl.h" // include "properly" #include "wx/event.h" #include "wx/textctrl.h" + #include "wx/wxcrtvararg.h" #endif #include "wx/msw/private.h" @@ -87,7 +88,7 @@ wxEND_FLAGS( wxSpinCtrlStyle ) IMPLEMENT_DYNAMIC_CLASS_XTI(wxSpinCtrl, wxControl,"wx/spinbut.h") wxBEGIN_PROPERTIES_TABLE(wxSpinCtrl) - wxEVENT_RANGE_PROPERTY( Spin , wxEVT_SCROLL_TOP , wxEVT_SCROLL_ENDSCROLL , wxSpinEvent ) + wxEVENT_RANGE_PROPERTY( Spin , wxEVT_SCROLL_TOP , wxEVT_SCROLL_CHANGED , wxSpinEvent ) wxEVENT_PROPERTY( Updated , wxEVT_COMMAND_SPINCTRL_UPDATED , wxCommandEvent ) wxEVENT_PROPERTY( TextUpdated , wxEVT_COMMAND_TEXT_UPDATED , wxCommandEvent ) wxEVENT_PROPERTY( TextEnter , wxEVT_COMMAND_TEXT_ENTER , wxCommandEvent ) @@ -206,7 +207,7 @@ bool wxSpinCtrl::ProcessTextCommand(WXWORD cmd, WXWORD WXUNUSED(id)) wxString val = wxGetWindowText(m_hwndBuddy); event.SetString(val); event.SetInt(GetValue()); - return GetEventHandler()->ProcessEvent(event); + return HandleWindowEvent(event); } // not processed @@ -224,7 +225,7 @@ void wxSpinCtrl::OnChar(wxKeyEvent& event) wxString val = wxGetWindowText(m_hwndBuddy); event.SetString(val); event.SetInt(GetValue()); - if ( GetEventHandler()->ProcessEvent(event) ) + if ( HandleWindowEvent(event) ) return; break; } @@ -240,7 +241,7 @@ void wxSpinCtrl::OnChar(wxKeyEvent& event) eventNav.SetWindowChange(event.ControlDown()); eventNav.SetEventObject(this); - if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) ) + if ( GetParent()->HandleWindowEvent(eventNav) ) return; } break; @@ -317,7 +318,12 @@ bool wxSpinCtrl::Create(wxWindow *parent, WXDWORD exStyle = 0; WXDWORD msStyle = MSWGetStyle(GetWindowStyle(), & exStyle) ; - // calculate the sizes: the size given is the toal size for both controls + // this control is used for numeric entry so normally using these flags by + // default shouldn't be a problem, if it is we can always add a style such + // as wxSP_NON_NUMERIC later + msStyle |= ES_RIGHT | ES_NUMBER; + + // calculate the sizes: the size given is the total size for both controls // and we need to fit them both in the given width (height is the same) wxSize sizeText(size), sizeBtn(size); sizeBtn.x = wxSpinButton::DoGetBestSize().x; @@ -406,12 +412,15 @@ bool wxSpinCtrl::Create(wxWindow *parent, // Set the range in the native control SetRange(min, max); - // Send the initial event - SendSpinUpdate(initial); - if ( !value.empty() ) { SetValue(value); + m_oldValue = (int) wxAtol(value); + } + else + { + SetValue(wxString::Format(wxT("%d"), initial)); + m_oldValue = initial; } // do it after finishing with m_hwndBuddy creation to avoid generating @@ -458,7 +467,8 @@ void wxSpinCtrl::SetValue(int val) // text control is currently empty, the spin button seems to be happy // to leave it like this, while we really want to always show the // current value in the control, so do it manually - ::SetWindowText(GetBuddyHwnd(), wxString::Format(_T("%d"), val)); + ::SetWindowText(GetBuddyHwnd(), + wxString::Format(_T("%d"), val).wx_str()); } m_oldValue = GetValue(); @@ -561,7 +571,7 @@ void wxSpinCtrl::SendSpinUpdate(int value) event.SetEventObject(this); event.SetInt(value); - (void)GetEventHandler()->ProcessEvent(event); + (void)HandleWindowEvent(event); m_oldValue = value; } @@ -633,6 +643,19 @@ void wxSpinCtrl::DoGetSize(int *x, int *y) const *y = ctrlrect.bottom - ctrlrect.top; } +void wxSpinCtrl::DoGetClientSize(int *x, int *y) const +{ + RECT spinrect = wxGetClientRect(GetHwnd()); + RECT textrect = wxGetClientRect(GetBuddyHwnd()); + RECT ctrlrect; + UnionRect(&ctrlrect,&textrect, &spinrect); + + if ( x ) + *x = ctrlrect.right - ctrlrect.left; + if ( y ) + *y = ctrlrect.bottom - ctrlrect.top; +} + void wxSpinCtrl::DoGetPosition(int *x, int *y) const { // hack: pretend that our HWND is the text control just for a moment