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
This commit is contained in:
@@ -99,14 +99,22 @@ protected:
|
|||||||
// the handler for wxSpinButton events
|
// the handler for wxSpinButton events
|
||||||
void OnSpinChange(wxSpinEvent& event);
|
void OnSpinChange(wxSpinEvent& event);
|
||||||
|
|
||||||
// Handle processing of special keys
|
// handle processing of special keys
|
||||||
void OnChar(wxKeyEvent& event);
|
void OnChar(wxKeyEvent& event);
|
||||||
void OnSetFocus(wxFocusEvent& event);
|
void OnSetFocus(wxFocusEvent& event);
|
||||||
void OnKillFocus(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();
|
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
|
// the data for the "buddy" text ctrl
|
||||||
WXHWND m_hwndBuddy;
|
WXHWND m_hwndBuddy;
|
||||||
WXFARPROC m_wndProcBuddy;
|
WXFARPROC m_wndProcBuddy;
|
||||||
|
@@ -269,7 +269,7 @@ void wxSpinCtrl::OnSetFocus(wxFocusEvent& event)
|
|||||||
void wxSpinCtrl::NormalizeValue()
|
void wxSpinCtrl::NormalizeValue()
|
||||||
{
|
{
|
||||||
const int value = GetValue();
|
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
|
// 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
|
// because otherwise we could be left with empty buddy control when value
|
||||||
@@ -278,11 +278,7 @@ void wxSpinCtrl::NormalizeValue()
|
|||||||
|
|
||||||
if ( changed )
|
if ( changed )
|
||||||
{
|
{
|
||||||
wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, GetId());
|
SendSpinUpdate(value);
|
||||||
event.SetEventObject(this);
|
|
||||||
event.SetInt(value);
|
|
||||||
GetEventHandler()->ProcessEvent(event);
|
|
||||||
m_oldValue = value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,6 +295,11 @@ bool wxSpinCtrl::Create(wxWindow *parent,
|
|||||||
int min, int max, int initial,
|
int min, int max, int initial,
|
||||||
const wxString& name)
|
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
|
// before using DoGetBestSize(), have to set style to let the base class
|
||||||
// know whether this is a horizontal or vertical control (we're always
|
// know whether this is a horizontal or vertical control (we're always
|
||||||
// vertical)
|
// vertical)
|
||||||
@@ -546,27 +547,29 @@ void wxSpinCtrl::DoSetToolTip(wxToolTip *tip)
|
|||||||
#endif // wxUSE_TOOLTIPS
|
#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());
|
wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, GetId());
|
||||||
event.SetEventObject(this);
|
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);
|
|
||||||
|
|
||||||
if ( eventSpin.GetSkipped() )
|
|
||||||
{
|
|
||||||
event.Skip();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_oldValue = value;
|
m_oldValue = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::OnSpinChange(wxSpinEvent& eventSpin)
|
||||||
|
{
|
||||||
|
const int value = eventSpin.GetPosition();
|
||||||
|
if ( value != m_oldValue )
|
||||||
|
{
|
||||||
|
SendSpinUpdate(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// size calculations
|
// size calculations
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user