/* 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 */ #pragma once #include "base/timer.h" #include "ui/widgets/input_fields.h" namespace Ui { class SentCodeField final : public Ui::InputField { public: SentCodeField( QWidget *parent, const style::InputField &st, rpl::producer placeholder = nullptr, const QString &val = QString()); void setAutoSubmit(int length, Fn submitCallback); void setChangedCallback(Fn changedCallback); [[nodiscard]] QString getDigitsOnly() const; private: void fix(); // Flag for not calling onTextChanged() recursively. bool _fixing = false; int _autoSubmitLength = 0; Fn _submitCallback; Fn _changedCallback; }; class SentCodeCall final { public: SentCodeCall( FnMut callCallback, Fn updateCallback); enum class State { Waiting, Calling, Called, Disabled, }; struct Status { Status() { } Status(State state, int timeout) : state(state), timeout(timeout) { } State state = State::Disabled; int timeout = 0; }; void setStatus(const Status &status); void callDone(); [[nodiscard]] QString getText() const; private: Status _status; base::Timer _timer; FnMut _call; Fn _update; }; } // namespace Ui