Use generic spin control itself as parent for its children.

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
This commit is contained in:
Vadim Zeitlin
2013-03-09 15:08:31 +00:00
parent bde7eee92e
commit 29cc4cc9bc
2 changed files with 20 additions and 20 deletions

View File

@@ -43,7 +43,7 @@ class wxSpinCtrlTextGeneric; // wxTextCtrl used for the wxSpinCtrlGenericBase
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxSpinCtrlGenericBase
: public wxCompositeWindow<wxSpinCtrlBase>
: public wxNavigationEnabled<wxCompositeWindow<wxSpinCtrlBase> >
{
public:
wxSpinCtrlGenericBase() { Init(); }
@@ -88,6 +88,8 @@ public:
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; }

View File

@@ -64,7 +64,7 @@ class wxSpinCtrlTextGeneric : public wxTextCtrl
{
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
@@ -137,7 +137,7 @@ class wxSpinCtrlButtonGeneric : public wxSpinButton
{
public:
wxSpinCtrlButtonGeneric(wxSpinCtrlGenericBase *spin, int style)
: wxSpinButton(spin->GetParent(), wxID_ANY, wxDefaultPosition,
: wxSpinButton(spin, wxID_ANY, wxDefaultPosition,
wxDefaultSize, style | wxSP_VERTICAL)
{
m_spin = spin;
@@ -213,6 +213,7 @@ bool wxSpinCtrlGenericBase::Create(wxWindow *parent,
m_textCtrl = new wxSpinCtrlTextGeneric(this, value, style);
m_spinButton = new wxSpinCtrlButtonGeneric(this, style);
#if wxUSE_TOOLTIPS
m_textCtrl->SetToolTip(GetToolTipText());
m_spinButton->SetToolTip(GetToolTipText());
@@ -237,16 +238,6 @@ bool wxSpinCtrlGenericBase::Create(wxWindow *parent,
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;
return true;
}
@@ -313,8 +304,8 @@ void wxSpinCtrlGenericBase::DoMoveWindow(int x, int y, int width, int height)
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);
}
// ----------------------------------------------------------------------------
@@ -331,11 +322,7 @@ void wxSpinCtrlGenericBase::SetFocus()
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 // __WXMSW__
@@ -394,6 +381,17 @@ void wxSpinCtrlGenericBase::DoSetToolTip(wxToolTip *tip)
}
#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
// ----------------------------------------------------------------------------