summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/toolkit/spinfld.hxx9
-rw-r--r--vcl/source/control/fmtfield.cxx7
-rw-r--r--vcl/source/control/spinfld.cxx31
3 files changed, 44 insertions, 3 deletions
diff --git a/include/vcl/toolkit/spinfld.hxx b/include/vcl/toolkit/spinfld.hxx
index f6de1202a45d..d82348bd44bb 100644
--- a/include/vcl/toolkit/spinfld.hxx
+++ b/include/vcl/toolkit/spinfld.hxx
@@ -61,6 +61,11 @@ public:
virtual FactoryFunction GetUITestFactory() const override;
+ SAL_DLLPRIVATE void SetUpperEnabled(bool bEnabled);
+ SAL_DLLPRIVATE void SetLowerEnabled(bool bEnabled);
+ SAL_DLLPRIVATE bool IsUpperEnabled() const { return mbUpperEnabled; }
+ SAL_DLLPRIVATE bool IsLowerEnabled() const { return mbLowerEnabled; }
+
protected:
tools::Rectangle maUpperRect;
tools::Rectangle maLowerRect;
@@ -91,7 +96,9 @@ private:
mbInitialDown:1,
mbUpperIn:1,
mbLowerIn:1,
- mbInDropDown:1;
+ mbInDropDown:1,
+ mbUpperEnabled:1,
+ mbLowerEnabled:1;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/control/fmtfield.cxx b/vcl/source/control/fmtfield.cxx
index c07b7e3ab3c5..3aee3317c829 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)