From 3e325cfd1fa58b63ee2606de792b2560eaa43b24 Mon Sep 17 00:00:00 2001 From: Henry Castro Date: Wed, 6 May 2020 14:06:27 -0400 Subject: lok: add FormattedFieldUIObject class Required by mobile device to set "VALUE" number Change-Id: Ie18fa3c58b8ba107917a8b12a7b98c74a385975c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93777 Tested-by: Jenkins CollaboraOffice Reviewed-by: Henry Castro --- vcl/source/control/fmtfield.cxx | 38 ++++++++++++++++++++++++++++++++++ vcl/source/uitest/uiobject.cxx | 46 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) (limited to 'vcl') diff --git a/vcl/source/control/fmtfield.cxx b/vcl/source/control/fmtfield.cxx index 1f502e3102db..4014e0ebd1e5 100644 --- a/vcl/source/control/fmtfield.cxx +++ b/vcl/source/control/fmtfield.cxx @@ -18,6 +18,7 @@ */ #include +#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -836,6 +838,24 @@ void FormattedField::SetTextValue(const OUString& rText) ReFormat(); } +// currently used by online +void FormattedField::SetValueFromString(const OUString& rStr) +{ + sal_Int32 nEnd; + rtl_math_ConversionStatus eStatus; + double fValue = ::rtl::math::stringToDouble(rStr, '.', GetDecimalDigits(), &eStatus, &nEnd ); + + if (eStatus == rtl_math_ConversionStatus_Ok && + nEnd == rStr.getLength()) + { + SetValue(fValue); + } + else + { + SAL_WARN("vcl", "fail to convert the value: " << rStr); + } +} + void FormattedField::EnableEmptyField(bool bEnable) { if (bEnable == m_bEnableEmptyField) @@ -1061,6 +1081,24 @@ void FormattedField::UseInputStringForFormatting() m_bUseInputStringForFormatting = true; } +boost::property_tree::ptree FormattedField::DumpAsPropertyTree() +{ + boost::property_tree::ptree aTree(SpinField::DumpAsPropertyTree()); + aTree.put("min", rtl::math::doubleToString(GetMinValue(), + rtl_math_StringFormat_F, GetDecimalDigits(), '.').getStr()); + aTree.put("max", rtl::math::doubleToString(GetMaxValue(), + rtl_math_StringFormat_F, GetDecimalDigits(), '.').getStr()); + aTree.put("value", rtl::math::doubleToString(GetValue(), + rtl_math_StringFormat_F, GetDecimalDigits(), '.').getStr()); + + return aTree; +} + +FactoryFunction FormattedField::GetUITestFactory() const +{ + return FormattedFieldUIObject::create; +} + DoubleNumericField::DoubleNumericField(vcl::Window* pParent, WinBits nStyle) : FormattedField(pParent, nStyle) { diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx index c32a118017cb..efbf8e06dcf4 100644 --- a/vcl/source/uitest/uiobject.cxx +++ b/vcl/source/uitest/uiobject.cxx @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -1251,6 +1252,51 @@ std::unique_ptr MetricFieldUIObject::create(vcl::Window* pWindow) return std::unique_ptr(new MetricFieldUIObject(pMetricField)); } +FormattedFieldUIObject::FormattedFieldUIObject(const VclPtr& xFormattedField): + SpinFieldUIObject(xFormattedField), + mxFormattedField(xFormattedField) +{ +} + +FormattedFieldUIObject::~FormattedFieldUIObject() +{ +} + +void FormattedFieldUIObject::execute(const OUString& rAction, + const StringMap& rParameters) +{ + if (rAction == "VALUE") + { + auto itPos = rParameters.find("VALUE"); + if (itPos != rParameters.end()) + { + mxFormattedField->SetValueFromString(itPos->second); + } + } + else + SpinFieldUIObject::execute(rAction, rParameters); +} + +StringMap FormattedFieldUIObject::get_state() +{ + StringMap aMap = EditUIObject::get_state(); + aMap["Value"] = OUString::number(mxFormattedField->GetValue()); + + return aMap; +} + +OUString FormattedFieldUIObject::get_name() const +{ + return "FormattedFieldUIObject"; +} + +std::unique_ptr FormattedFieldUIObject::create(vcl::Window* pWindow) +{ + FormattedField* pFormattedField = dynamic_cast(pWindow); + assert(pFormattedField); + return std::unique_ptr(new FormattedFieldUIObject(pFormattedField)); +} + TabControlUIObject::TabControlUIObject(const VclPtr& xTabControl): WindowUIObject(xTabControl), mxTabControl(xTabControl) -- cgit