This fixes a problem with using wxSpinCtrlGeneric in toolbars under wxOSX,
using the toolbar itself (i.e. the parent of the spin control) as parent for
the children didn't work there and no windows were visible at all.
Also use wxNavigationEnabled as base class of wxSpinCtrlGeneric to fix
keyboard navigation.
And override SetBackgroundColour() to set it for the text control part of the
spin control only.
Closes #15016.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73630
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxSpinCtrlGenericBase
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxSpinCtrlGenericBase
- : public wxCompositeWindow<wxSpinCtrlBase>
+ : public wxNavigationEnabled<wxCompositeWindow<wxSpinCtrlBase> >
{
public:
wxSpinCtrlGenericBase() { Init(); }
{
public:
wxSpinCtrlGenericBase() { Init(); }
virtual void DoSetToolTip(wxToolTip *tip);
#endif // wxUSE_TOOLTIPS
virtual void DoSetToolTip(wxToolTip *tip);
#endif // wxUSE_TOOLTIPS
+ virtual bool SetBackgroundColour(const wxColour& colour);
+
// get the subcontrols
wxTextCtrl *GetText() const { return m_textCtrl; }
wxSpinButton *GetSpinButton() const { return m_spinButton; }
// get the subcontrols
wxTextCtrl *GetText() const { return m_textCtrl; }
wxSpinButton *GetSpinButton() const { return m_spinButton; }
{
public:
wxSpinCtrlTextGeneric(wxSpinCtrlGenericBase *spin, const wxString& value, long style=0)
{
public:
wxSpinCtrlTextGeneric(wxSpinCtrlGenericBase *spin, const wxString& value, long style=0)
- : wxTextCtrl(spin->GetParent(), wxID_ANY, value, wxDefaultPosition, wxDefaultSize,
+ : wxTextCtrl(spin, wxID_ANY, value, wxDefaultPosition, wxDefaultSize,
// 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
// 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
{
public:
wxSpinCtrlButtonGeneric(wxSpinCtrlGenericBase *spin, int style)
{
public:
wxSpinCtrlButtonGeneric(wxSpinCtrlGenericBase *spin, int style)
- : wxSpinButton(spin->GetParent(), wxID_ANY, wxDefaultPosition,
+ : wxSpinButton(spin, wxID_ANY, wxDefaultPosition,
wxDefaultSize, style | wxSP_VERTICAL)
{
m_spin = spin;
wxDefaultSize, style | wxSP_VERTICAL)
{
m_spin = spin;
m_textCtrl = new wxSpinCtrlTextGeneric(this, value, style);
m_spinButton = new wxSpinCtrlButtonGeneric(this, style);
m_textCtrl = new wxSpinCtrlTextGeneric(this, value, style);
m_spinButton = new wxSpinCtrlButtonGeneric(this, style);
#if wxUSE_TOOLTIPS
m_textCtrl->SetToolTip(GetToolTipText());
m_spinButton->SetToolTip(GetToolTipText());
#if wxUSE_TOOLTIPS
m_textCtrl->SetToolTip(GetToolTipText());
m_spinButton->SetToolTip(GetToolTipText());
SetInitialSize(size);
Move(pos);
SetInitialSize(size);
Move(pos);
- // have to disable this window to avoid interfering it with message
- // processing to the text and the button... but pretend it is enabled to
- // make IsEnabled() return true
- wxControl::Enable(false); // don't use non virtual Disable() here!
- m_isEnabled = true;
-
- // we don't even need to show this window itself - and not doing it avoids
- // that it overwrites the text control
- wxControl::Show(false);
- m_isShown = true;
wxSize sizeBtn = m_spinButton->GetSize();
wxCoord wText = width - sizeBtn.x - MARGIN;
wxSize sizeBtn = m_spinButton->GetSize();
wxCoord wText = width - sizeBtn.x - MARGIN;
- m_textCtrl->SetSize(x, y, wText, height);
- m_spinButton->SetSize(x + wText + MARGIN, y, wxDefaultCoord, height);
+ m_textCtrl->SetSize(0, 0, wText, height);
+ m_spinButton->SetSize(0 + wText + MARGIN, 0, wxDefaultCoord, height);
}
// ----------------------------------------------------------------------------
}
// ----------------------------------------------------------------------------
void wxSpinCtrlGenericBase::DoEnable(bool enable)
{
void wxSpinCtrlGenericBase::DoEnable(bool enable)
{
- // We never enable this control itself, it must stay disabled to avoid
- // interfering with the siblings event handling (see e.g. #12045 for the
- // kind of problems which arise otherwise).
- if ( !enable )
- wxSpinCtrlBase::DoEnable(enable);
+ wxSpinCtrlBase::DoEnable(enable);
}
#endif // wxUSE_TOOLTIPS
}
#endif // wxUSE_TOOLTIPS
+bool wxSpinCtrlGenericBase::SetBackgroundColour(const wxColour& colour)
+{
+ // We need to provide this otherwise the entire composite window
+ // background and therefore the between component spaces
+ // will be changed.
+ if ( m_textCtrl )
+ return m_textCtrl->SetBackgroundColour(colour);
+
+ return true;
+}
+
// ----------------------------------------------------------------------------
// Handle sub controls events
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Handle sub controls events
// ----------------------------------------------------------------------------