]> git.saurik.com Git - wxWidgets.git/commitdiff
Enable intercepting ENTER in wxSpinCtrl under wxMac by using wxTE_PROCESS_ENTER
authorRobert Roebling <robert@roebling.de>
Thu, 16 Oct 2008 22:18:04 +0000 (22:18 +0000)
committerRobert Roebling <robert@roebling.de>
Thu, 16 Oct 2008 22:18:04 +0000 (22:18 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56379 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dataview.h
src/common/datavcmn.cpp
src/osx/spinctrl_osx.cpp

index 86ba1b502114f83264fd2f4e0299f36915440a0a..91c6456e0a4991eadec5c61fc09e716cbf63da4f 100644 (file)
@@ -367,6 +367,7 @@ public:
 
 protected:
     void OnChar( wxKeyEvent &event );
+    void OnTextEnter( wxCommandEvent &event );
     void OnKillFocus( wxFocusEvent &event );
     void OnIdle( wxIdleEvent &event );
 
index eaf672d2a572e30821228077cf453d61fbb93c75..cbc0840fa920356dc58231b915d1d26fe59f866d 100644 (file)
@@ -765,6 +765,7 @@ BEGIN_EVENT_TABLE(wxDataViewEditorCtrlEvtHandler, wxEvtHandler)
     EVT_CHAR           (wxDataViewEditorCtrlEvtHandler::OnChar)
     EVT_KILL_FOCUS     (wxDataViewEditorCtrlEvtHandler::OnKillFocus)
     EVT_IDLE           (wxDataViewEditorCtrlEvtHandler::OnIdle)
+    EVT_TEXT_ENTER     (-1, wxDataViewEditorCtrlEvtHandler::OnTextEnter)
 END_EVENT_TABLE()
 
 wxDataViewEditorCtrlEvtHandler::wxDataViewEditorCtrlEvtHandler(
@@ -789,6 +790,12 @@ void wxDataViewEditorCtrlEvtHandler::OnIdle( wxIdleEvent &event )
     event.Skip();
 }
 
+void wxDataViewEditorCtrlEvtHandler::OnTextEnter( wxCommandEvent &WXUNUSED(event) )
+{
+    m_finished = true;
+    m_owner->FinishEditing();
+}
+
 void wxDataViewEditorCtrlEvtHandler::OnChar( wxKeyEvent &event )
 {
     switch ( event.m_keyCode )
@@ -799,10 +806,11 @@ void wxDataViewEditorCtrlEvtHandler::OnChar( wxKeyEvent &event )
             break;
 
         case WXK_ESCAPE:
+        {
             m_finished = true;
             m_owner->CancelEditing();
             break;
-
+        }
         default:
             event.Skip();
     }
@@ -1265,7 +1273,7 @@ wxControl* wxDataViewSpinRenderer::CreateEditorCtrl( wxWindow *parent, wxRect la
     wxString str;
     str.Printf( wxT("%d"), (int) l );
     wxSpinCtrl *sc = new wxSpinCtrl( parent, wxID_ANY, str,
-               labelRect.GetTopLeft(), size, wxSP_ARROW_KEYS, m_min, m_max, l );
+               labelRect.GetTopLeft(), size, wxSP_ARROW_KEYS|wxTE_PROCESS_ENTER, m_min, m_max, l );
 #ifdef __WXMAC__
     size = sc->GetSize();
     wxPoint pt = sc->GetPosition();
index 841b946616729721ec5b10442cf04de5b501f125..a5849cde3f97a1d4ea8a511554e3ec9a16aeaf93 100644 (file)
@@ -41,8 +41,8 @@ static const wxCoord MARGIN = 3;
 class wxSpinCtrlText : public wxTextCtrl
 {
 public:
-    wxSpinCtrlText(wxSpinCtrl *spin, const wxString& value)
-        : wxTextCtrl(spin , wxID_ANY, value, wxDefaultPosition, wxSize(40, wxDefaultCoord))
+    wxSpinCtrlText(wxSpinCtrl *spin, const wxString& value, int style)
+        : wxTextCtrl(spin , wxID_ANY, value, wxDefaultPosition, wxSize(40, wxDefaultCoord), style )
     {
         m_spin = spin;
 
@@ -60,6 +60,13 @@ public:
     }
 
 protected:
+     void OnSetFocus(wxFocusEvent& event)
+     {
+         // delegate to parent control
+         event.SetEventObject( GetParent() );
+         GetParent()->HandleWindowEvent(event);
+     }
+     
      void OnKillFocus(wxFocusEvent& event)
      {
          long l;
@@ -96,6 +103,7 @@ protected:
              m_spin->m_oldValue = l;
          }
          
+         // delegate to parent control
          event.SetEventObject( GetParent() );
          GetParent()->HandleWindowEvent(event);
     }
@@ -136,7 +144,8 @@ private:
 
 BEGIN_EVENT_TABLE(wxSpinCtrlText, wxTextCtrl)
     EVT_TEXT(wxID_ANY, wxSpinCtrlText::OnTextChange)
-    EVT_KILL_FOCUS( wxSpinCtrlText::OnKillFocus)
+    EVT_SET_FOCUS(wxSpinCtrlText::OnSetFocus)
+    EVT_KILL_FOCUS(wxSpinCtrlText::OnKillFocus)
 END_EVENT_TABLE()
 
 // ----------------------------------------------------------------------------
@@ -241,7 +250,7 @@ bool wxSpinCtrl::Create(wxWindow *parent,
     }
 
     wxSize csize = size ;
-    m_text = new wxSpinCtrlText(this, value);
+    m_text = new wxSpinCtrlText(this, value, style & wxTE_PROCESS_ENTER ? wxTE_PROCESS_ENTER : 0 );
     m_btn = new wxSpinCtrlButton(this, style);
 
     m_btn->SetRange(min, max);