diff --git a/CMakeLists.txt b/CMakeLists.txt index a9dc2d7..b9f8549 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -202,6 +202,8 @@ PRIVATE ui/widgets/input_fields.h ui/widgets/labels.cpp ui/widgets/labels.h + ui/widgets/fields/number_input.cpp + ui/widgets/fields/number_input.h ui/widgets/fields/password_input.cpp ui/widgets/fields/password_input.h ui/widgets/fields/time_part_input.cpp diff --git a/ui/widgets/fields/number_input.cpp b/ui/widgets/fields/number_input.cpp new file mode 100644 index 0000000..293cae0 --- /dev/null +++ b/ui/widgets/fields/number_input.cpp @@ -0,0 +1,49 @@ +// This file is part of Desktop App Toolkit, +// a set of libraries for developing nice desktop applications. +// +// For license and copyright information please follow this link: +// https://github.com/desktop-app/legal/blob/master/LEGAL +// +#include "ui/widgets/fields/number_input.h" + +namespace Ui { + +NumberInput::NumberInput( + QWidget *parent, + const style::InputField &st, + rpl::producer placeholder, + const QString &value, + int limit) +: MaskedInputField(parent, st, std::move(placeholder), value) +, _limit(limit) { + if (!value.toInt() || (limit > 0 && value.toInt() > limit)) { + setText(QString()); + } +} + +void NumberInput::correctValue( + const QString &was, + int wasCursor, + QString &now, + int &nowCursor) { + QString newText; + newText.reserve(now.size()); + auto newPos = nowCursor; + for (auto i = 0, l = int(now.size()); i < l; ++i) { + if (now.at(i).isDigit()) { + newText.append(now.at(i)); + } else if (i < nowCursor) { + --newPos; + } + } + if (!newText.toInt()) { + newText = QString(); + newPos = 0; + } else if (_limit > 0 && newText.toInt() > _limit) { + newText = was; + newPos = wasCursor; + } + setCorrectedText(now, nowCursor, newText, newPos); +} + +} // namespace Ui diff --git a/ui/widgets/fields/number_input.h b/ui/widgets/fields/number_input.h new file mode 100644 index 0000000..bf10abf --- /dev/null +++ b/ui/widgets/fields/number_input.h @@ -0,0 +1,38 @@ +// This file is part of Desktop App Toolkit, +// a set of libraries for developing nice desktop applications. +// +// For license and copyright information please follow this link: +// https://github.com/desktop-app/legal/blob/master/LEGAL +// +#pragma once + +#include "ui/widgets/input_fields.h" + +namespace style { +struct InputField; +} // namespace style + +namespace Ui { + +class NumberInput final : public MaskedInputField { +public: + NumberInput( + QWidget *parent, + const style::InputField &st, + rpl::producer placeholder, + const QString &value, + int limit); + +protected: + void correctValue( + const QString &was, + int wasCursor, + QString &now, + int &nowCursor) override; + +private: + int _limit = 0; + +}; + +} // namespace Ui diff --git a/ui/widgets/input_fields.cpp b/ui/widgets/input_fields.cpp index 0458a70..87338df 100644 --- a/ui/widgets/input_fields.cpp +++ b/ui/widgets/input_fields.cpp @@ -4349,44 +4349,6 @@ void MaskedInputField::onCursorPositionChanged(int oldPosition, int position) { _oldcursor = position; } -NumberInput::NumberInput( - QWidget *parent, - const style::InputField &st, - rpl::producer placeholder, - const QString &value, - int limit) -: MaskedInputField(parent, st, std::move(placeholder), value) -, _limit(limit) { - if (!value.toInt() || (limit > 0 && value.toInt() > limit)) { - setText(QString()); - } -} - -void NumberInput::correctValue( - const QString &was, - int wasCursor, - QString &now, - int &nowCursor) { - QString newText; - newText.reserve(now.size()); - auto newPos = nowCursor; - for (auto i = 0, l = int(now.size()); i < l; ++i) { - if (now.at(i).isDigit()) { - newText.append(now.at(i)); - } else if (i < nowCursor) { - --newPos; - } - } - if (!newText.toInt()) { - newText = QString(); - newPos = 0; - } else if (_limit > 0 && newText.toInt() > _limit) { - newText = was; - newPos = wasCursor; - } - setCorrectedText(now, nowCursor, newText, newPos); -} - HexInput::HexInput( QWidget *parent, const style::InputField &st, diff --git a/ui/widgets/input_fields.h b/ui/widgets/input_fields.h index fd7a832..aa62d84 100644 --- a/ui/widgets/input_fields.h +++ b/ui/widgets/input_fields.h @@ -718,27 +718,6 @@ private: }; -class NumberInput : public MaskedInputField { -public: - NumberInput( - QWidget *parent, - const style::InputField &st, - rpl::producer placeholder, - const QString &value, - int limit); - -protected: - void correctValue( - const QString &was, - int wasCursor, - QString &now, - int &nowCursor) override; - -private: - int _limit = 0; - -}; - class HexInput : public MaskedInputField { public: HexInput(QWidget *parent, const style::InputField &st, rpl::producer placeholder, const QString &val);