public:
wxSpinCtrlTextGeneric(wxSpinCtrlGenericBase *spin, const wxString& value, long style=0)
: wxTextCtrl(spin->GetParent(), wxID_ANY, value, wxDefaultPosition, wxDefaultSize,
- style & wxALIGN_MASK)
+ // This is tricky: we want to honour any alignment flags
+ // but not wxALIGN_CENTER_VERTICAL because it's the same
+ // as wxTE_PASSWORD and we definitely don't want to show
+ // asterisks in spin control.
+ style & (wxALIGN_MASK | wxTE_PROCESS_ENTER) & ~wxTE_PASSWORD)
{
m_spin = spin;
SetSizeHints(wxDefaultCoord, wxDefaultCoord);
}
- virtual ~wxSpinCtrlTextGeneric()
+ virtual ~wxSpinCtrlTextGeneric() wxNOEXCEPT
{
// MSW sends extra kill focus event on destroy
if (m_spin)
void OnChar( wxKeyEvent &event )
{
- if (m_spin)
- m_spin->ProcessWindowEvent(event);
+ if ( !m_spin->ProcessWindowEvent(event) )
+ event.Skip();
+ }
+
+ void OnTextEvent(wxCommandEvent& event)
+ {
+ wxCommandEvent eventCopy(event);
+ eventCopy.SetEventObject(m_spin);
+ eventCopy.SetId(m_spin->GetId());
+ m_spin->ProcessWindowEvent(eventCopy);
}
void OnKillFocus(wxFocusEvent& event)
BEGIN_EVENT_TABLE(wxSpinCtrlTextGeneric, wxTextCtrl)
EVT_CHAR(wxSpinCtrlTextGeneric::OnChar)
+ // Forward the text events to wxSpinCtrl itself adjusting them slightly in
+ // the process.
+ EVT_TEXT(wxID_ANY, wxSpinCtrlTextGeneric::OnTextEvent)
+
+ // And we need to forward this one too as wxSpinCtrl is supposed to
+ // generate it if wxTE_PROCESS_ENTER is used with it (and if it isn't,
+ // we're never going to get EVT_TEXT_ENTER in the first place).
+ EVT_TEXT_ENTER(wxID_ANY, wxSpinCtrlTextGeneric::OnTextEvent)
+
EVT_KILL_FOCUS(wxSpinCtrlTextGeneric::OnKillFocus)
END_EVENT_TABLE()