/* 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 "ui/layers/box_content.h" #include "api/api_common.h" #include "data/data_poll.h" #include "base/flags.h" struct PollData; namespace Ui { class VerticalLayout; } // namespace Ui namespace Window { class SessionController; } // namespace Window namespace SendMenu { enum class Type; } // namespace SendMenu class CreatePollBox : public Ui::BoxContent { public: struct Result { PollData poll; Api::SendOptions options; }; CreatePollBox( QWidget*, not_null controller, PollData::Flags chosen, PollData::Flags disabled, Api::SendType sendType, SendMenu::Type sendMenuType); [[nodiscard]] rpl::producer 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, Solution = 0x10, }; friend constexpr inline bool is_flag_type(Error) { return true; } using Errors = base::flags; [[nodiscard]] object_ptr setupContent(); [[nodiscard]] not_null setupQuestion( not_null container); [[nodiscard]] not_null setupSolution( not_null container, rpl::producer shown); const not_null _controller; const PollData::Flags _chosen = PollData::Flags(); const PollData::Flags _disabled = PollData::Flags(); const Api::SendType _sendType = Api::SendType(); const SendMenu::Type _sendMenuType; Fn _setInnerFocus; Fn()> _dataIsValidValue; rpl::event_stream _submitRequests; };