From d40e9e06bbccc5bc4a73e4138d1f11c50cec7aa9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 11 Jan 2007 01:59:42 +0000 Subject: [PATCH] no changes, just refactor the code sending spin update event to SendSpinUpdate() instead of duplicating it; also initialize m_oldValue git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44196 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/spinctrl.h | 14 +++++++++++--- src/msw/spinctrl.cpp | 35 +++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/include/wx/msw/spinctrl.h b/include/wx/msw/spinctrl.h index edcb026f76..2a5f56f5c0 100644 --- a/include/wx/msw/spinctrl.h +++ b/include/wx/msw/spinctrl.h @@ -99,14 +99,22 @@ protected: // the handler for wxSpinButton events void OnSpinChange(wxSpinEvent& event); - // Handle processing of special keys + // handle processing of special keys void OnChar(wxKeyEvent& event); void OnSetFocus(wxFocusEvent& event); void OnKillFocus(wxFocusEvent& event); - int m_oldValue; + // generate spin control update event with the given value + void SendSpinUpdate(int value); + + // called to ensure that the value is in the correct range virtual void NormalizeValue(); - + + + // the value of the control before the latest change (which might not have + // changed anything in fact -- this is why we need this field) + int m_oldValue; + // the data for the "buddy" text ctrl WXHWND m_hwndBuddy; WXFARPROC m_wndProcBuddy; diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index a8882e4043..6651f614ac 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -269,7 +269,7 @@ void wxSpinCtrl::OnSetFocus(wxFocusEvent& event) void wxSpinCtrl::NormalizeValue() { const int value = GetValue(); - const bool changed = value == m_oldValue; + const bool changed = value != m_oldValue; // notice that we have to call SetValue() even if the value didn't change // because otherwise we could be left with empty buddy control when value @@ -278,11 +278,7 @@ void wxSpinCtrl::NormalizeValue() if ( changed ) { - wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, GetId()); - event.SetEventObject(this); - event.SetInt(value); - GetEventHandler()->ProcessEvent(event); - m_oldValue = value; + SendSpinUpdate(value); } } @@ -299,6 +295,11 @@ bool wxSpinCtrl::Create(wxWindow *parent, int min, int max, int initial, const wxString& name) { + // this should be in ctor/init function but I don't want to add one to 2.8 + // to avoid problems with default ctor which can be inlined in the user + // code and so might not get this fix without recompilation + m_oldValue = INT_MIN; + // before using DoGetBestSize(), have to set style to let the base class // know whether this is a horizontal or vertical control (we're always // vertical) @@ -546,25 +547,27 @@ void wxSpinCtrl::DoSetToolTip(wxToolTip *tip) #endif // wxUSE_TOOLTIPS // ---------------------------------------------------------------------------- -// event processing +// events processing and generation // ---------------------------------------------------------------------------- -void wxSpinCtrl::OnSpinChange(wxSpinEvent& eventSpin) +void wxSpinCtrl::SendSpinUpdate(int value) { wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, GetId()); event.SetEventObject(this); - int value = eventSpin.GetPosition(); - event.SetInt( value ); + event.SetInt(value); - if (value != m_oldValue) - (void)GetEventHandler()->ProcessEvent(event); + (void)GetEventHandler()->ProcessEvent(event); + + m_oldValue = value; +} - if ( eventSpin.GetSkipped() ) +void wxSpinCtrl::OnSpinChange(wxSpinEvent& eventSpin) +{ + const int value = eventSpin.GetPosition(); + if ( value != m_oldValue ) { - event.Skip(); + SendSpinUpdate(value); } - - m_oldValue = value; } // ---------------------------------------------------------------------------- -- 2.45.2