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:
Vadim Zeitlin 2007-01-11 01:59:42 +00:00
parent b6d8301814
commit d40e9e06bb
2 changed files with 31 additions and 20 deletions

View File

@ -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;

View File

@ -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,27 +547,29 @@ 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);
if ( eventSpin.GetSkipped() )
{
event.Skip();
}
(void)GetEventHandler()->ProcessEvent(event);
m_oldValue = value;
}
void wxSpinCtrl::OnSpinChange(wxSpinEvent& eventSpin)
{
const int value = eventSpin.GetPosition();
if ( value != m_oldValue )
{
SendSpinUpdate(value);
}
}
// ----------------------------------------------------------------------------
// size calculations
// ----------------------------------------------------------------------------