// 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/rp_widget.h" #include "ui/effects/animations.h" #include "ui/widgets/labels.h" namespace Ui { class TimePart; class TimeInput final : public RpWidget { public: TimeInput( QWidget *parent, const QString &value, const style::InputField &stField, const style::InputField &stDateField, const style::FlatLabel &stSeparator, const style::margins &stSeparatorPadding); bool setFocusFast(); rpl::producer value() const; rpl::producer<> submitRequests() const; rpl::producer<> focuses() const; QString valueCurrent() const; void showError(); int resizeGetHeight(int width) override; protected: void paintEvent(QPaintEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; private: void setInnerFocus(); void putNext(const object_ptr &field, QChar ch); void erasePrevious(const object_ptr &field); void setErrorShown(bool error); void setFocused(bool focused); void startBorderAnimation(); template bool insideSeparator(QPoint position, const Widget &widget) const; int hour() const; int minute() const; const style::InputField &_stField; const style::InputField &_stDateField; const style::FlatLabel &_stSeparator; const style::margins &_stSeparatorPadding; object_ptr _hour; object_ptr> _separator1; object_ptr _minute; rpl::variable _value; rpl::event_stream<> _submitRequests; rpl::event_stream<> _focuses; style::cursor _cursor = style::cur_default; Animations::Simple _a_borderShown; int _borderAnimationStart = 0; Animations::Simple _a_borderOpacity; bool _borderVisible = false; Animations::Simple _a_error; bool _error = false; Animations::Simple _a_focused; bool _focused = false; }; } // namespace Ui