diff options
author | John Preston <johnprestonmail@gmail.com> | 2021-03-26 19:23:12 +0400 |
---|---|---|
committer | John Preston <johnprestonmail@gmail.com> | 2021-03-26 19:23:12 +0400 |
commit | 9a722ea8d47e50233d6aababff36853fba1f438a (patch) | |
tree | d4479e8b86345e756520771e01058d98821e79f5 /Telegram/SourceFiles/payments/ui/payments_field.cpp | |
parent | 1aefada45d0db1bef0776f31a7036600e4b77f8f (diff) |
Improve checkout information / card page design.
Diffstat (limited to 'Telegram/SourceFiles/payments/ui/payments_field.cpp')
-rw-r--r-- | Telegram/SourceFiles/payments/ui/payments_field.cpp | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/Telegram/SourceFiles/payments/ui/payments_field.cpp b/Telegram/SourceFiles/payments/ui/payments_field.cpp new file mode 100644 index 0000000000..2161772f91 --- /dev/null +++ b/Telegram/SourceFiles/payments/ui/payments_field.cpp @@ -0,0 +1,140 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#include "payments/ui/payments_field.h" + +#include "ui/widgets/input_fields.h" +#include "styles/style_payments.h" + +namespace Payments::Ui { +namespace { + +[[nodiscard]] bool UseMaskedField(FieldType type) { + switch (type) { + case FieldType::Text: + case FieldType::Email: + return false; + case FieldType::CardNumber: + case FieldType::CardExpireDate: + case FieldType::CardCVC: + case FieldType::Country: + case FieldType::Phone: + return true; + } + Unexpected("FieldType in Payments::Ui::UseMaskedField."); +} + +[[nodiscard]] base::unique_qptr<RpWidget> CreateWrap( + QWidget *parent, + FieldConfig &config) { + switch (config.type) { + case FieldType::Text: + case FieldType::Email: + return base::make_unique_q<InputField>( + parent, + st::paymentsField, + std::move(config.placeholder), + config.value); + case FieldType::CardNumber: + case FieldType::CardExpireDate: + case FieldType::CardCVC: + case FieldType::Country: + case FieldType::Phone: + return base::make_unique_q<RpWidget>(parent); + } + Unexpected("FieldType in Payments::Ui::CreateWrap."); +} + +[[nodiscard]] InputField *LookupInputField( + not_null<RpWidget*> wrap, + FieldConfig &config) { + return UseMaskedField(config.type) + ? nullptr + : static_cast<InputField*>(wrap.get()); +} + +[[nodiscard]] MaskedInputField *LookupMaskedField( + not_null<RpWidget*> wrap, + FieldConfig &config) { + if (!UseMaskedField(config.type)) { + return nullptr; + } + switch (config.type) { + case FieldType::Text: + case FieldType::Email: + return nullptr; + case FieldType::CardNumber: + case FieldType::CardExpireDate: + case FieldType::CardCVC: + case FieldType::Country: + case FieldType::Phone: + return CreateChild<MaskedInputField>( + wrap.get(), + st::paymentsField, + std::move(config.placeholder), + config.value); + } + Unexpected("FieldType in Payments::Ui::LookupMaskedField."); +} + +} // namespace + +Field::Field(QWidget *parent, FieldConfig &&config) +: _type(config.type) +, _wrap(CreateWrap(parent, config)) +, _input(LookupInputField(_wrap.get(), config)) +, _masked(LookupMaskedField(_wrap.get(), config)) { + if (_masked) { + _wrap->resize(_masked->size()); + _wrap->widthValue( + ) | rpl::start_with_next([=](int width) { + _masked->resize(width, _masked->height()); + }, _masked->lifetime()); + _masked->heightValue( + ) | rpl::start_with_next([=](int height) { + _wrap->resize(_wrap->width(), height); + }, _masked->lifetime()); + } +} + +RpWidget *Field::widget() const { + return _wrap.get(); +} + +object_ptr<RpWidget> Field::ownedWidget() const { + return object_ptr<RpWidget>::fromRaw(_wrap.get()); +} + +[[nodiscard]] QString Field::value() const { + return _input ? _input->getLastText() : _masked->getLastText(); +} + +void Field::setFocus() { + if (_input) { + _input->setFocus(); + } else { + _masked->setFocus(); + } +} + +void Field::setFocusFast() { + if (_input) { + _input->setFocusFast(); + } else { + _masked->setFocusFast(); + } +} + +void Field::showError() { + if (_input) { + _input->showError(); + } else { + _masked->showError(); + } +} + +} // namespace Payments::Ui |