Fix calculation of the size of wxSpinCtrlDouble numeric box

Every time spin control precision, minimal or maximal value changes there
is necessary to adjust numeric box size to the new dimension of displayed
number.

See #18734.
This commit is contained in:
Artur Wieczorek
2020-05-20 21:00:46 +02:00
parent 250e211d7f
commit 6c64f4994e

View File

@@ -74,6 +74,8 @@ public:
{
m_spin = spin;
InvalidateBestSize();
// remove the default minsize, the spinctrl will have one instead
SetSizeHints(wxDefaultCoord, wxDefaultCoord);
}
@@ -110,6 +112,16 @@ public:
event.Skip();
}
virtual wxSize DoGetBestSize() const wxOVERRIDE
{
wxString minVal = m_spin->DoValueToText(m_spin->m_min);
wxString maxVal = m_spin->DoValueToText(m_spin->m_max);
wxSize minValSize = GetSizeFromText(minVal);
wxSize maxValSize = GetSizeFromText(maxVal);
return wxSize(wxMax(minValSize.x, maxValSize.x), wxMax(minValSize.y, maxValSize.y));
}
wxSpinCtrlGenericBase *m_spin;
private:
@@ -575,6 +587,9 @@ double wxSpinCtrlGenericBase::AdjustToFitInRange(double value) const
void wxSpinCtrlGenericBase::DoSetRange(double min, double max)
{
if ( min != m_min || max != m_max )
m_textCtrl->InvalidateBestSize();
m_min = min;
if ( m_value < m_min )
DoSetValue(m_min, SendEvent_None);
@@ -707,6 +722,8 @@ void wxSpinCtrlDouble::SetDigits(unsigned digits)
m_format.Printf(wxT("%%0.%ulf"), digits);
m_textCtrl->InvalidateBestSize();
DoSetValue(m_value, SendEvent_None);
}