/* 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 "mtproto/sender.h" #include "api/api_user_privacy.h" namespace Ui { class VerticalLayout; class FlatLabel; class LinkButton; template class RadioenumGroup; template class Radioenum; template class SlideWrap; } // namespace Ui namespace Window { class SessionController; } // namespace Window class EditPrivacyBox; class EditPrivacyController { public: using Key = Api::UserPrivacy::Key; using Option = Api::UserPrivacy::Option; enum class Exception { Always, Never, }; [[nodiscard]] virtual Key key() const = 0; [[nodiscard]] virtual rpl::producer title() const = 0; [[nodiscard]] virtual bool hasOption(Option option) const { return true; } [[nodiscard]] virtual rpl::producer optionsTitleKey() const = 0; [[nodiscard]] virtual QString optionLabel(Option option) const; [[nodiscard]] virtual rpl::producer warning() const { return nullptr; } virtual void prepareWarningLabel(not_null warning) const { } [[nodiscard]] virtual rpl::producer exceptionButtonTextKey( Exception exception) const = 0; [[nodiscard]] virtual rpl::producer exceptionBoxTitle( Exception exception) const = 0; [[nodiscard]] virtual auto exceptionsDescription() const -> rpl::producer = 0; virtual void handleExceptionsChange( Exception exception, rpl::producer value) { } [[nodiscard]] virtual object_ptr setupAboveWidget( not_null parent, rpl::producer