From 4731b3ab863a192f1505116207fd26c49e384b68 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Wed, 11 Oct 2006 09:20:34 +0000 Subject: [PATCH] adding events on kill-focus (Robert's Patch) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41936 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mac/carbon/spinctrl.h | 6 ++++ src/mac/carbon/spinctrl.cpp | 54 +++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/include/wx/mac/carbon/spinctrl.h b/include/wx/mac/carbon/spinctrl.h index ebc2123068..5c513561a6 100755 --- a/include/wx/mac/carbon/spinctrl.h +++ b/include/wx/mac/carbon/spinctrl.h @@ -26,6 +26,8 @@ class WXDLLEXPORT wxSpinButton; class WXDLLEXPORT wxTextCtrl; +class WXDLLEXPORT wxSpinCtrlText; +class WXDLLEXPORT wxSpinCtrlButton; // ---------------------------------------------------------------------------- // wxSpinCtrl is a combination of wxTextCtrl and wxSpinButton @@ -106,6 +108,10 @@ private: wxTextCtrl *m_text; wxSpinButton *m_btn; + friend class wxSpinCtrlText; + friend class wxSpinCtrlButton; + + int m_oldValue; private: DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS(wxSpinCtrl) diff --git a/src/mac/carbon/spinctrl.cpp b/src/mac/carbon/spinctrl.cpp index 8702e0bd87..3db287f0a8 100644 --- a/src/mac/carbon/spinctrl.cpp +++ b/src/mac/carbon/spinctrl.cpp @@ -57,6 +57,43 @@ public: } protected: + void OnKillFocus(wxFocusEvent &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->GetEventHandler()->ProcessEvent(event); + + m_spin->m_oldValue = l; + } + } + void OnTextChange(wxCommandEvent& event) { int val; @@ -93,6 +130,7 @@ private: BEGIN_EVENT_TABLE(wxSpinCtrlText, wxTextCtrl) EVT_TEXT(wxID_ANY, wxSpinCtrlText::OnTextChange) + EVT_KILL_FOCUS( wxSpinCtrlText::OnKillFocus) END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -121,13 +159,16 @@ public: 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->GetEventHandler()->ProcessEvent(event); - m_spin->GetEventHandler()->ProcessEvent(event); + m_spin->m_oldValue = pos; } private: @@ -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 ; @@ -348,6 +391,7 @@ void wxSpinCtrl::SetValue(int val) SetTextValue(val); m_btn->SetValue(val); + m_oldValue = val; } void wxSpinCtrl::SetValue(const wxString& text) -- 2.45.2