Moved out NumberInput to separate module.

This commit is contained in:
23rd 2023-08-31 14:25:02 +03:00
parent 225380044e
commit 26b72fedc7
5 changed files with 89 additions and 59 deletions

View file

@ -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

View file

@ -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<QString> 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

View file

@ -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<QString> 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

View file

@ -4349,44 +4349,6 @@ void MaskedInputField::onCursorPositionChanged(int oldPosition, int position) {
_oldcursor = position;
}
NumberInput::NumberInput(
QWidget *parent,
const style::InputField &st,
rpl::producer<QString> 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,

View file

@ -718,27 +718,6 @@ private:
};
class NumberInput : public MaskedInputField {
public:
NumberInput(
QWidget *parent,
const style::InputField &st,
rpl::producer<QString> 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<QString> placeholder, const QString &val);