diff options
author | Henry Castro <hcastro@collabora.com> | 2020-04-22 18:22:33 -0400 |
---|---|---|
committer | Henry Castro <hcastro@collabora.com> | 2020-05-10 17:36:18 +0200 |
commit | cb3e249e4dbc851f39bd80dfc7fd076543734c6d (patch) | |
tree | 9537438c1459385acecad71429375ddb8b6069c2 | |
parent | d6ab59ef40b546ec62df2a7dbe389492a1159fe0 (diff) |
lok: add MetricFieldUIObject class
Add new action "VALUE" to set the value number
for metric input controls
Change-Id: I5058260c2e1562cfc6d10508d5981d185c5f2212
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92738
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Henry Castro <hcastro@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93070
Tested-by: Jenkins
-rw-r--r-- | desktop/source/lib/init.cxx | 6 | ||||
-rw-r--r-- | include/vcl/field.hxx | 2 | ||||
-rw-r--r-- | include/vcl/toolkit/field.hxx | 1 | ||||
-rw-r--r-- | include/vcl/uitest/metricfielduiobject.hxx | 35 | ||||
-rw-r--r-- | include/vcl/uitest/uiobject.hxx | 3 | ||||
-rw-r--r-- | vcl/source/control/field.cxx | 23 | ||||
-rw-r--r-- | vcl/source/uitest/uiobject.cxx | 40 |
7 files changed, 108 insertions, 2 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 86212ed28e8e..1a26cdd20b94 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -3568,6 +3568,7 @@ static void doc_sendDialogEvent(LibreOfficeKitDocument* /*pThis*/, unsigned nWin const OUString sTypeAction("TYPE"); const OUString sUpAction("UP"); const OUString sDownAction("DOWN"); + const OUString sValue("VALUE"); try { @@ -3599,6 +3600,11 @@ static void doc_sendDialogEvent(LibreOfficeKitDocument* /*pThis*/, unsigned nWin pUIWindow->execute(sClearAction, aMap); pUIWindow->execute(sTypeAction, aMap); } + else if (aMap["cmd"] == "value") + { + aMap["VALUE"] = aMap["data"]; + pUIWindow->execute(sValue, aMap); + } else bIsClickAction = true; } diff --git a/include/vcl/field.hxx b/include/vcl/field.hxx index d9b76c56680d..beb3a30c356f 100644 --- a/include/vcl/field.hxx +++ b/include/vcl/field.hxx @@ -150,6 +150,8 @@ public: sal_Int64 Normalize( sal_Int64 nValue ) const; sal_Int64 Denormalize( sal_Int64 nValue ) const; + virtual void SetValueFromString(const OUString& rStr); + protected: sal_Int64 mnLastValue; sal_Int64 mnMin; diff --git a/include/vcl/toolkit/field.hxx b/include/vcl/toolkit/field.hxx index bd3e92e13dcc..76c998b22c11 100644 --- a/include/vcl/toolkit/field.hxx +++ b/include/vcl/toolkit/field.hxx @@ -101,6 +101,7 @@ public: virtual void dispose() override; virtual boost::property_tree::ptree DumpAsPropertyTree() override; + virtual FactoryFunction GetUITestFactory() const override; }; class VCL_DLLPUBLIC MetricBox : public ComboBox, public MetricFormatter diff --git a/include/vcl/uitest/metricfielduiobject.hxx b/include/vcl/uitest/metricfielduiobject.hxx new file mode 100644 index 000000000000..a23c555225a0 --- /dev/null +++ b/include/vcl/uitest/metricfielduiobject.hxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_VCL_UITEST_METRICFIELDUIOBJECT_HXX +#define INCLUDED_VCL_UITEST_METRICFIELDUIOBJECT_HXX + +#include <vcl/uitest/uiobject.hxx> + +class MetricField; + +class UITEST_DLLPUBLIC MetricFieldUIObject : public SpinFieldUIObject +{ + VclPtr<MetricField> mxMetricField; + +public: + MetricFieldUIObject(const VclPtr<MetricField>& xEdit); + virtual ~MetricFieldUIObject() override; + + virtual void execute(const OUString& rAction, const StringMap& rParameters) override; + + static std::unique_ptr<UIObject> create(vcl::Window* pWindow); + +protected: + virtual OUString get_name() const override; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx index 3de90891015e..2c9a3e36cc60 100644 --- a/include/vcl/uitest/uiobject.hxx +++ b/include/vcl/uitest/uiobject.hxx @@ -15,7 +15,6 @@ #include <memory> #include <vcl/window.hxx> - #include <vcl/dllapi.h> #include <set> @@ -364,7 +363,7 @@ private: virtual OUString get_name() const override; }; -class SpinFieldUIObject final : public EditUIObject +class SpinFieldUIObject : public EditUIObject { VclPtr<SpinField> mxSpinField; diff --git a/vcl/source/control/field.cxx b/vcl/source/control/field.cxx index c7d088d643b5..c10e6a409855 100644 --- a/vcl/source/control/field.cxx +++ b/vcl/source/control/field.cxx @@ -32,6 +32,8 @@ #include <vcl/event.hxx> #include <vcl/svapp.hxx> #include <vcl/settings.hxx> +#include <vcl/uitest/uiobject.hxx> +#include <vcl/uitest/metricfielduiobject.hxx> #include <svdata.hxx> @@ -623,6 +625,22 @@ sal_Int64 NumericFormatter::GetValueFromString(const OUString& rStr) const return mnLastValue; } +// currently used by online +void NumericFormatter::SetValueFromString(const OUString& rStr) +{ + sal_Int64 nValue; + + if (ImplNumericGetValue(rStr, nValue, GetDecimalDigits(), + Application::GetSettings().GetNeutroLocaleDataWrapper())) + { + SetValue(nValue); + } + else + { + SAL_WARN("vcl", "fail to convert the value: " << rStr ); + } +} + sal_Int64 NumericFormatter::GetValue() const { if (mbFormatting) //don't parse the entry if we're currently formatting what to put in it @@ -1701,6 +1719,11 @@ boost::property_tree::ptree MetricField::DumpAsPropertyTree() return aTree; } +FactoryFunction MetricField::GetUITestFactory() const +{ + return MetricFieldUIObject::create; +} + MetricBox::MetricBox(vcl::Window* pParent, WinBits nWinStyle) : ComboBox(pParent, nWinStyle) , MetricFormatter(this) diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx index cbbd35f26754..a387fb41ab02 100644 --- a/vcl/source/uitest/uiobject.cxx +++ b/vcl/source/uitest/uiobject.cxx @@ -8,6 +8,7 @@ */ #include <vcl/uitest/uiobject.hxx> +#include <vcl/uitest/metricfielduiobject.hxx> #include <vcl/combobox.hxx> #include <vcl/event.hxx> @@ -19,6 +20,7 @@ #include <vcl/spinfld.hxx> #include <vcl/toolkit/button.hxx> #include <vcl/toolkit/dialog.hxx> +#include <vcl/toolkit/field.hxx> #include <vcl/edit.hxx> #include <vcl/vclmedit.hxx> #include <vcl/uitest/logger.hxx> @@ -1289,6 +1291,44 @@ std::unique_ptr<UIObject> SpinFieldUIObject::create(vcl::Window* pWindow) return std::unique_ptr<UIObject>(new SpinFieldUIObject(pSpinField)); } + +MetricFieldUIObject::MetricFieldUIObject(const VclPtr<MetricField>& xMetricField): + SpinFieldUIObject(xMetricField), + mxMetricField(xMetricField) +{ +} + +MetricFieldUIObject::~MetricFieldUIObject() +{ +} + +void MetricFieldUIObject::execute(const OUString& rAction, + const StringMap& rParameters) +{ + if (rAction == "VALUE") + { + auto itPos = rParameters.find("VALUE"); + if (itPos != rParameters.end()) + { + mxMetricField->SetValueFromString(itPos->second); + } + } + else + SpinFieldUIObject::execute(rAction, rParameters); +} + +OUString MetricFieldUIObject::get_name() const +{ + return "MetricFieldUIObject"; +} + +std::unique_ptr<UIObject> MetricFieldUIObject::create(vcl::Window* pWindow) +{ + MetricField* pMetricField = dynamic_cast<MetricField*>(pWindow); + assert(pMetricField); + return std::unique_ptr<UIObject>(new MetricFieldUIObject(pMetricField)); +} + TabControlUIObject::TabControlUIObject(const VclPtr<TabControl>& xTabControl): WindowUIObject(xTabControl), mxTabControl(xTabControl) |