X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6c20e8f816b21b911e3a8ed8197c21df6ce726d6..6cef0db28018fd2644ee4e38af715872e5242459:/src/mac/carbon/spinctrl.cpp diff --git a/src/mac/carbon/spinctrl.cpp b/src/mac/carbon/spinctrl.cpp index 8702e0bd87..47c2332911 100644 --- a/src/mac/carbon/spinctrl.cpp +++ b/src/mac/carbon/spinctrl.cpp @@ -44,7 +44,7 @@ public: m_spin = spin; // remove the default minsize, the spinctrl will have one instead - SetSizeHints(-1,-1); + SetMinSize(wxDefaultSize); } bool ProcessEvent(wxEvent &event) @@ -57,6 +57,43 @@ public: } protected: + void OnKillFocus(wxFocusEvent& WXUNUSED(event)) + { + long l; + if ( !GetValue().ToLong(&l) ) + { + // not a number at all + return; + } + + // is within range + if (l < m_spin->GetMin()) + l = m_spin->GetMin(); + if (l > m_spin->GetMax()) + l = m_spin->GetMax(); + + // Update text control + wxString str; + str.Printf( wxT("%d"), (int)l ); + if (str != GetValue()) + SetValue( str ); + + if (l != m_spin->m_oldValue) + { + // set value in spin button + // does that trigger an event? + m_spin->m_btn->SetValue( l ); + + // if not + wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId()); + event.SetEventObject(m_spin); + event.SetInt(l); + m_spin->HandleWindowEvent(event); + + m_spin->m_oldValue = l; + } + } + void OnTextChange(wxCommandEvent& event) { int val; @@ -79,7 +116,7 @@ protected: event.SetString(m_spin->GetText()->GetValue()); event.SetInt(val); - m_spin->GetEventHandler()->ProcessEvent(event); + m_spin->HandleWindowEvent(event); } event.Skip(); @@ -93,6 +130,7 @@ private: BEGIN_EVENT_TABLE(wxSpinCtrlText, wxTextCtrl) EVT_TEXT(wxID_ANY, wxSpinCtrlText::OnTextChange) + EVT_KILL_FOCUS( wxSpinCtrlText::OnKillFocus) END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -115,19 +153,22 @@ public: //SetWindowVariant(wxWINDOW_VARIANT_SMALL); // remove the default minsize, the spinctrl will have one instead - SetSizeHints(-1,-1); + SetMinSize(wxDefaultSize); } protected: void OnSpinButton(wxSpinEvent& eventSpin) { - m_spin->SetTextValue(eventSpin.GetPosition()); + int pos = eventSpin.GetPosition(); + m_spin->SetTextValue(pos); + + wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId()); + event.SetEventObject(m_spin); + event.SetInt(pos); - wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId()); - event.SetEventObject(m_spin); - event.SetInt(eventSpin.GetPosition()); + m_spin->HandleWindowEvent(event); - m_spin->GetEventHandler()->ProcessEvent(event); + m_spin->m_oldValue = pos; } private: @@ -161,7 +202,7 @@ void wxSpinCtrl::Init() { m_text = NULL; m_btn = NULL; - m_container.SetContainerWindow(this); + WX_INIT_CONTROL_CONTAINER(); } bool wxSpinCtrl::Create(wxWindow *parent, @@ -199,6 +240,8 @@ bool wxSpinCtrl::Create(wxWindow *parent, m_btn->SetRange(min, max); m_btn->SetValue(initial); + // make it different + m_oldValue = GetMin()-1; if ( size.x == wxDefaultCoord ){ csize.x = m_text->GetSize().x + MARGIN + m_btn->GetSize().x ; @@ -213,7 +256,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, //SetSize(csize); //MacPostControlCreate(pos, csize); - SetInitialBestSize(csize); + SetInitialSize(csize); return true; } @@ -348,6 +391,7 @@ void wxSpinCtrl::SetValue(int val) SetTextValue(val); m_btn->SetValue(val); + m_oldValue = val; } void wxSpinCtrl::SetValue(const wxString& text)