From 724852daae642bbba3e02e11e972e747ed106190 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Thu, 16 Oct 2008 22:18:04 +0000 Subject: [PATCH] Enable intercepting ENTER in wxSpinCtrl under wxMac by using wxTE_PROCESS_ENTER git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56379 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/dataview.h | 1 + src/common/datavcmn.cpp | 12 ++++++++++-- src/osx/spinctrl_osx.cpp | 17 +++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 86ba1b5021..91c6456e0a 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -367,6 +367,7 @@ public: protected: void OnChar( wxKeyEvent &event ); + void OnTextEnter( wxCommandEvent &event ); void OnKillFocus( wxFocusEvent &event ); void OnIdle( wxIdleEvent &event ); diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index eaf672d2a5..cbc0840fa9 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -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(); diff --git a/src/osx/spinctrl_osx.cpp b/src/osx/spinctrl_osx.cpp index 841b946616..a5849cde3f 100644 --- a/src/osx/spinctrl_osx.cpp +++ b/src/osx/spinctrl_osx.cpp @@ -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); -- 2.49.0