/* 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 "settings/settings_common.h" namespace Settings { namespace details { class LocalPasscodeEnter : public AbstractSection { public: enum class EnterType { Create, Check, Change, }; LocalPasscodeEnter( QWidget *parent, not_null controller); ~LocalPasscodeEnter(); void showFinished() override; void setInnerFocus() override; [[nodiscard]] rpl::producer sectionShowOther() override; [[nodiscard]] rpl::producer<> sectionShowBack() override; [[nodiscard]] rpl::producer title() override; protected: void setupContent(); [[nodiscard]] virtual EnterType enterType() const = 0; private: const not_null _controller; rpl::event_stream<> _showFinished; rpl::event_stream<> _setInnerFocus; rpl::event_stream _showOther; rpl::event_stream<> _showBack; }; } // namespace details class LocalPasscodeCreate; class LocalPasscodeCheck; class LocalPasscodeChange; template class TypedLocalPasscodeEnter : public details::LocalPasscodeEnter { public: TypedLocalPasscodeEnter( QWidget *parent, not_null controller) : details::LocalPasscodeEnter(parent, controller) { setupContent(); } [[nodiscard]] static Type Id() { return &SectionMetaImplementation::Meta; } [[nodiscard]] Type id() const final override { return Id(); } protected: [[nodiscard]] EnterType enterType() const final override { if constexpr (std::is_same_v) { return EnterType::Create; } if constexpr (std::is_same_v) { return EnterType::Check; } if constexpr (std::is_same_v) { return EnterType::Change; } return EnterType::Create; } }; class LocalPasscodeCreate final : public TypedLocalPasscodeEnter { public: using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; }; class LocalPasscodeCheck final : public TypedLocalPasscodeEnter { public: using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; }; class LocalPasscodeChange final : public TypedLocalPasscodeEnter { public: using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; }; class LocalPasscodeManage : public Section { public: LocalPasscodeManage( QWidget *parent, not_null controller); ~LocalPasscodeManage(); [[nodiscard]] rpl::producer title() override; void showFinished() override; [[nodiscard]] rpl::producer sectionShowOther() override; [[nodiscard]] rpl::producer<> sectionShowBack() override; [[nodiscard]] rpl::producer> removeFromStack() override; [[nodiscard]] QPointer createPinnedToBottom( not_null parent) override; private: void setupContent(); const not_null _controller; rpl::variable _isBottomFillerShown; rpl::event_stream<> _showFinished; rpl::event_stream _showOther; rpl::event_stream<> _showBack; }; } // namespace Settings