/* 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 "boxes/abstract_box.h" #include "api/api_common.h" #include "data/data_poll.h" #include "base/flags.h" struct PollData; namespace Ui { class VerticalLayout; } // namespace Ui namespace Main { class Session; } // namespace Main class CreatePollBox : public Ui::BoxContent { public: struct Result { PollData poll; Api::SendOptions options; }; CreatePollBox( QWidget*, not_null<Main::Session*> session, PollData::Flags chosen, PollData::Flags disabled, Api::SendType sendType); rpl::producer<Result> submitRequests() const; void submitFailed(const QString &error); void setInnerFocus() override; protected: void prepare() override; private: enum class Error { Question = 0x01, Options = 0x02, Correct = 0x04, Other = 0x08, }; friend constexpr inline bool is_flag_type(Error) { return true; } using Errors = base::flags<Error>; object_ptr<Ui::RpWidget> setupContent(); not_null<Ui::InputField*> setupQuestion( not_null<Ui::VerticalLayout*> container); const not_null<Main::Session*> _session; const PollData::Flags _chosen = PollData::Flags(); const PollData::Flags _disabled = PollData::Flags(); const Api::SendType _sendType = Api::SendType(); Fn<void()> _setInnerFocus; Fn<rpl::producer<bool>()> _dataIsValidValue; rpl::event_stream<Result> _submitRequests; };