adding events on kill-focus (Robert's Patch)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41936 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
class WXDLLEXPORT wxSpinButton;
|
class WXDLLEXPORT wxSpinButton;
|
||||||
class WXDLLEXPORT wxTextCtrl;
|
class WXDLLEXPORT wxTextCtrl;
|
||||||
|
class WXDLLEXPORT wxSpinCtrlText;
|
||||||
|
class WXDLLEXPORT wxSpinCtrlButton;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxSpinCtrl is a combination of wxTextCtrl and wxSpinButton
|
// wxSpinCtrl is a combination of wxTextCtrl and wxSpinButton
|
||||||
@@ -106,6 +108,10 @@ private:
|
|||||||
wxTextCtrl *m_text;
|
wxTextCtrl *m_text;
|
||||||
wxSpinButton *m_btn;
|
wxSpinButton *m_btn;
|
||||||
|
|
||||||
|
friend class wxSpinCtrlText;
|
||||||
|
friend class wxSpinCtrlButton;
|
||||||
|
|
||||||
|
int m_oldValue;
|
||||||
private:
|
private:
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
DECLARE_DYNAMIC_CLASS(wxSpinCtrl)
|
DECLARE_DYNAMIC_CLASS(wxSpinCtrl)
|
||||||
|
@@ -57,6 +57,43 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void OnKillFocus(wxFocusEvent &event)
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
if ( !GetValue().ToLong(&l) )
|
||||||
|
{
|
||||||
|
// not a number at all
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// is within range
|
||||||
|
if (l < m_spin->GetMin())
|
||||||
|
l = m_spin->GetMin();
|
||||||
|
if (l > m_spin->GetMax())
|
||||||
|
l = m_spin->GetMax();
|
||||||
|
|
||||||
|
// Update text control
|
||||||
|
wxString str;
|
||||||
|
str.Printf( wxT("%d"), (int)l );
|
||||||
|
if (str != GetValue())
|
||||||
|
SetValue( str );
|
||||||
|
|
||||||
|
if (l != m_spin->m_oldValue)
|
||||||
|
{
|
||||||
|
// set value in spin button
|
||||||
|
// does that trigger an event?
|
||||||
|
m_spin->m_btn->SetValue( l );
|
||||||
|
|
||||||
|
// if not
|
||||||
|
wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId());
|
||||||
|
event.SetEventObject(m_spin);
|
||||||
|
event.SetInt(l);
|
||||||
|
m_spin->GetEventHandler()->ProcessEvent(event);
|
||||||
|
|
||||||
|
m_spin->m_oldValue = l;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OnTextChange(wxCommandEvent& event)
|
void OnTextChange(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
@@ -93,6 +130,7 @@ private:
|
|||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxSpinCtrlText, wxTextCtrl)
|
BEGIN_EVENT_TABLE(wxSpinCtrlText, wxTextCtrl)
|
||||||
EVT_TEXT(wxID_ANY, wxSpinCtrlText::OnTextChange)
|
EVT_TEXT(wxID_ANY, wxSpinCtrlText::OnTextChange)
|
||||||
|
EVT_KILL_FOCUS( wxSpinCtrlText::OnKillFocus)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -121,13 +159,16 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void OnSpinButton(wxSpinEvent& eventSpin)
|
void OnSpinButton(wxSpinEvent& eventSpin)
|
||||||
{
|
{
|
||||||
m_spin->SetTextValue(eventSpin.GetPosition());
|
int pos = eventSpin.GetPosition();
|
||||||
|
m_spin->SetTextValue(pos);
|
||||||
|
|
||||||
wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId());
|
wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId());
|
||||||
event.SetEventObject(m_spin);
|
event.SetEventObject(m_spin);
|
||||||
event.SetInt(eventSpin.GetPosition());
|
event.SetInt(pos);
|
||||||
|
|
||||||
m_spin->GetEventHandler()->ProcessEvent(event);
|
m_spin->GetEventHandler()->ProcessEvent(event);
|
||||||
|
|
||||||
|
m_spin->m_oldValue = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -199,6 +240,8 @@ bool wxSpinCtrl::Create(wxWindow *parent,
|
|||||||
|
|
||||||
m_btn->SetRange(min, max);
|
m_btn->SetRange(min, max);
|
||||||
m_btn->SetValue(initial);
|
m_btn->SetValue(initial);
|
||||||
|
// make it different
|
||||||
|
m_oldValue = GetMin()-1;
|
||||||
|
|
||||||
if ( size.x == wxDefaultCoord ){
|
if ( size.x == wxDefaultCoord ){
|
||||||
csize.x = m_text->GetSize().x + MARGIN + m_btn->GetSize().x ;
|
csize.x = m_text->GetSize().x + MARGIN + m_btn->GetSize().x ;
|
||||||
@@ -348,6 +391,7 @@ void wxSpinCtrl::SetValue(int val)
|
|||||||
SetTextValue(val);
|
SetTextValue(val);
|
||||||
|
|
||||||
m_btn->SetValue(val);
|
m_btn->SetValue(val);
|
||||||
|
m_oldValue = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSpinCtrl::SetValue(const wxString& text)
|
void wxSpinCtrl::SetValue(const wxString& text)
|
||||||
|
Reference in New Issue
Block a user