]> git.saurik.com Git - wxWidgets.git/commitdiff
adding events on kill-focus (Robert's Patch)
authorStefan Csomor <csomor@advancedconcepts.ch>
Wed, 11 Oct 2006 09:20:34 +0000 (09:20 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Wed, 11 Oct 2006 09:20:34 +0000 (09:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41936 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/carbon/spinctrl.h
src/mac/carbon/spinctrl.cpp

index ebc21230680cf57e57a62e80791692440e9ff2ff..5c513561a6bb810eab143d92cb2b1fbd1214fb83 100755 (executable)
@@ -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)
index 8702e0bd874d31dc05a6872a64f0736b68cb8f91..3db287f0a86e675182f28f85876f6087fe3c66bc 100644 (file)
@@ -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)