// constants
// ----------------------------------------------------------------------------
-// the margin between the text control and the spin
-static const wxCoord MARGIN = 2;
+// The margin between the text control and the spin: the value here is the same
+// as the margin between the spin button and its "buddy" text control in wxMSW
+// so the generic control looks similarly to the native one there, we might
+// need to use different value for the other platforms (and maybe even
+// determine it dynamically?).
+static const wxCoord MARGIN = 1;
#define SPINCTRLBUT_MAX 32000 // large to avoid wrap around trouble
public:
wxSpinCtrlTextGeneric(wxSpinCtrlGenericBase *spin, const wxString& value, long style=0)
: wxTextCtrl(spin->GetParent(), wxID_ANY, value, wxDefaultPosition, wxDefaultSize,
- ( style & wxALIGN_MASK ) | wxTE_NOHIDESEL | wxTE_PROCESS_ENTER)
+ style & wxALIGN_MASK)
{
m_spin = spin;
m_spin = NULL;
}
- void OnTextEnter(wxCommandEvent& event)
- {
- if (m_spin)
- m_spin->OnTextEnter(event);
- }
-
void OnChar( wxKeyEvent &event )
{
if (m_spin)
void OnKillFocus(wxFocusEvent& event)
{
if (m_spin)
- {
- if ( m_spin->SyncSpinToText() )
- m_spin->DoSendEvent();
- }
+ m_spin->OnTextLostFocus();
event.Skip();
}
};
BEGIN_EVENT_TABLE(wxSpinCtrlTextGeneric, wxTextCtrl)
- EVT_TEXT_ENTER(wxID_ANY, wxSpinCtrlTextGeneric::OnTextEnter)
-
EVT_CHAR(wxSpinCtrlTextGeneric::OnChar)
EVT_KILL_FOCUS(wxSpinCtrlTextGeneric::OnKillFocus)
// position the subcontrols inside the client area
wxSize sizeBtn = m_spinButton->GetSize();
- wxCoord wText = width - sizeBtn.x;
+ wxCoord wText = width - sizeBtn.x - MARGIN;
m_textCtrl->SetSize(x, y, wText, height);
m_spinButton->SetSize(x + wText + MARGIN, y, wxDefaultCoord, height);
}
// operations forwarded to the subcontrols
// ----------------------------------------------------------------------------
+void wxSpinCtrlGenericBase::SetFocus()
+{
+ if ( m_textCtrl )
+ m_textCtrl->SetFocus();
+}
+
bool wxSpinCtrlGenericBase::Enable(bool enable)
{
// Notice that we never enable this control itself, it must stay disabled
DoSendEvent();
}
-void wxSpinCtrlGenericBase::OnTextEnter(wxCommandEvent& event)
+void wxSpinCtrlGenericBase::OnTextLostFocus()
{
SyncSpinToText();
DoSendEvent();
- event.Skip();
}
void wxSpinCtrlGenericBase::OnTextChar(wxKeyEvent& event)
// wxSpinCtrl
//-----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxSpinCtrlGenericBase)
-
void wxSpinCtrl::DoSendEvent()
{
wxSpinEvent event( wxEVT_COMMAND_SPINCTRL_UPDATED, GetId());