event.Skip();
}
- void OnTextEnter(wxCommandEvent& event)
+ void OnTextEvent(wxCommandEvent& event)
{
- // We need to forward this event to the spin control itself as it's
- // supposed to generate it if wxTE_PROCESS_ENTER is used with it.
wxCommandEvent eventCopy(event);
eventCopy.SetEventObject(m_spin);
eventCopy.SetId(m_spin->GetId());
BEGIN_EVENT_TABLE(wxSpinCtrlTextGeneric, wxTextCtrl)
EVT_CHAR(wxSpinCtrlTextGeneric::OnChar)
- EVT_TEXT_ENTER(wxID_ANY, wxSpinCtrlTextGeneric::OnTextEnter)
+
+ // 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()
wxDELETE(m_spinButton);
}
+wxWindowList wxSpinCtrlGenericBase::GetCompositeWindowParts() const
+{
+ wxWindowList parts;
+ parts.push_back(m_textCtrl);
+ parts.push_back(m_spinButton);
+ return parts;
+}
+
// ----------------------------------------------------------------------------
// geometry
// ----------------------------------------------------------------------------
wxSize wxSpinCtrlGenericBase::DoGetBestSize() const
{
- wxSize sizeBtn = m_spinButton->GetBestSize(),
- sizeText = m_textCtrl->GetBestSize();
+ return DoGetSizeFromTextSize(m_textCtrl->GetBestSize().x, -1);
+}
+
+wxSize wxSpinCtrlGenericBase::DoGetSizeFromTextSize(int xlen, int ylen) const
+{
+ wxSize sizeBtn = m_spinButton->GetBestSize();
+ wxSize totalS( m_textCtrl->GetBestSize() );
+
+ wxSize tsize(xlen + sizeBtn.x + MARGIN, totalS.y);
+#if defined(__WXMSW__)
+ tsize.IncBy(0.4 * totalS.y + 4, 0);
+#elif defined(__WXGTK__)
+ tsize.IncBy(totalS.y + 10, 0);
+#endif // MSW GTK
+
+ // Check if the user requested a non-standard height.
+ if ( ylen > 0 )
+ tsize.IncBy(0, ylen - GetCharHeight());
- return wxSize(sizeBtn.x + sizeText.x + MARGIN, sizeText.y);
+ return tsize;
}
void wxSpinCtrlGenericBase::DoMoveWindow(int x, int y, int width, int height)
else // not a number at all or out of range
{
m_textCtrl->SetValue(text);
- m_textCtrl->SetSelection(0, -1);
- m_textCtrl->SetInsertionPointEnd();
+ m_textCtrl->SelectAll();
}
}
if ( !DoTextToValue(str, &m_value ) ) // wysiwyg for textctrl
m_value = val;
m_textCtrl->SetValue( str );
- m_textCtrl->SetInsertionPointEnd();
+ m_textCtrl->SelectAll();
m_textCtrl->DiscardEdits();
return true;
}