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:
@@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user