diff options
author | Caolán McNamara <caolanm@redhat.com> | 2022-05-29 21:25:09 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2022-06-01 12:30:36 +0200 |
commit | e6d224bf4040c896252c95731b104ed5d7777fd0 (patch) | |
tree | 866a86333cf19d6460c9d8afd95f39bcd5403045 /vcl/source | |
parent | da0506bc1f14438952e17b78b23813dab0a7901d (diff) |
Related: tdf#89131 draw up/down spins disabled if value is at max/min
if there is a max/min set.
Change-Id: I2dc7ccccad9ec2aa7eb89d8b5fa137e077a846fd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135105
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 2896c5dad1799addd72b626d93d7e89b1cf19ff6)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135070
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/control/fmtfield.cxx | 7 | ||||
-rw-r--r-- | vcl/source/control/spinfld.cxx | 31 |
2 files changed, 36 insertions, 2 deletions
diff --git a/vcl/source/control/fmtfield.cxx b/vcl/source/control/fmtfield.cxx index a0d96dd9caae..d3f7d88985f2 100644 --- a/vcl/source/control/fmtfield.cxx +++ b/vcl/source/control/fmtfield.cxx @@ -922,6 +922,13 @@ namespace { m_rSpinButton.SpinField::Modify(); } + + virtual void UpdateCurrentValue(double dCurrentValue) override + { + Formatter::UpdateCurrentValue(dCurrentValue); + m_rSpinButton.SetUpperEnabled(!m_bHasMax || dCurrentValue < m_dMaxValue); + m_rSpinButton.SetLowerEnabled(!m_bHasMin || dCurrentValue > m_dMinValue); + } }; class DoubleNumericFormatter : public FieldFormatter diff --git a/vcl/source/control/spinfld.cxx b/vcl/source/control/spinfld.cxx index 8db25dfbc699..6bc1fac297a9 100644 --- a/vcl/source/control/spinfld.cxx +++ b/vcl/source/control/spinfld.cxx @@ -298,6 +298,8 @@ void SpinField::ImplInitSpinFieldData() mbInitialUp = false; mbInitialDown = false; mbInDropDown = false; + mbUpperEnabled = true; + mbLowerEnabled = true; } void SpinField::ImplInit(vcl::Window* pParent, WinBits nWinStyle) @@ -578,13 +580,38 @@ void SpinField::FillLayoutData() const Edit::FillLayoutData(); } +void SpinField::SetUpperEnabled(bool bEnabled) +{ + if (mbUpperEnabled == bEnabled) + return; + + mbUpperEnabled = bEnabled; + + if (mbSpin) + Invalidate(maUpperRect); +} + +void SpinField::SetLowerEnabled(bool bEnabled) +{ + if (mbLowerEnabled == bEnabled) + return; + + mbLowerEnabled = bEnabled; + + if (mbSpin) + Invalidate(maLowerRect); +} + void SpinField::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) { if (mbSpin) { - bool bEnable = IsEnabled(); + bool bEnabled = IsEnabled(); + bool bUpperEnabled = bEnabled && IsUpperEnabled(); + bool bLowerEnabled = bEnabled && IsLowerEnabled(); ImplDrawSpinButton(rRenderContext, this, maUpperRect, maLowerRect, - mbUpperIn, mbLowerIn, bEnable, bEnable); + mbUpperIn && bUpperEnabled, mbLowerIn && bLowerEnabled, + bUpperEnabled, bLowerEnabled); } if (GetStyle() & WB_DROPDOWN) |