diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 0048817882..ba74247376 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1568,8 +1568,8 @@ PRIVATE settings/settings_experimental.h settings/settings_folders.cpp settings/settings_folders.h - settings/settings_global_ttl.cpp - settings/settings_global_ttl.h + settings/sections/settings_global_ttl.cpp + settings/sections/settings_global_ttl.h settings/settings_information.cpp settings/settings_information.h settings/settings_intro.cpp diff --git a/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp b/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp index 1dc546bcc6..bac5cf0336 100644 --- a/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp +++ b/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp @@ -49,7 +49,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "calls/calls_box_controller.h" #include "settings/settings_credits.h" #include "settings/settings_folders.h" -#include "settings/settings_global_ttl.h" +#include "settings/sections/settings_global_ttl.h" #include "settings/settings_information.h" #include "settings/settings_local_passcode.h" #include "settings/sections/settings_main.h" diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index fee4857594..3069bd1c16 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -59,7 +59,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/settings_credits.h" #include "settings/settings_credits_graphics.h" #include "settings/settings_information.h" -#include "settings/settings_global_ttl.h" +#include "settings/sections/settings_global_ttl.h" #include "settings/settings_folders.h" #include "settings/sections/settings_main.h" #include "settings/settings_privacy_controllers.h" diff --git a/Telegram/SourceFiles/settings/settings_global_ttl.cpp b/Telegram/SourceFiles/settings/sections/settings_global_ttl.cpp similarity index 88% rename from Telegram/SourceFiles/settings/settings_global_ttl.cpp rename to Telegram/SourceFiles/settings/sections/settings_global_ttl.cpp index c35d133987..a92a22a666 100644 --- a/Telegram/SourceFiles/settings/settings_global_ttl.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_global_ttl.cpp @@ -5,9 +5,8 @@ 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 */ -#include "settings/settings_global_ttl.h" +#include "settings/sections/settings_global_ttl.h" -#include "settings/settings_common.h" #include "api/api_self_destruct.h" #include "apiwrap.h" #include "boxes/peer_list_controllers.h" @@ -20,7 +19,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lottie/lottie_icon.h" #include "main/main_session.h" #include "menu/menu_ttl_validator.h" -#include "settings/settings_common_session.h" +#include "settings/sections/settings_privacy_security.h" +#include "settings/settings_builder.h" +#include "settings/settings_common.h" #include "ui/boxes/confirm_box.h" #include "ui/painter.h" #include "ui/vertical_list.h" @@ -33,12 +34,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_session_controller.h" #include "styles/style_boxes.h" #include "styles/style_layers.h" +#include "styles/style_menu_icons.h" #include "styles/style_settings.h" #include "styles/style_calls.h" namespace Settings { namespace { +using namespace Builder; + class TTLRow : public ChatsListBoxController::Row { public: using ChatsListBoxController::Row::Row; @@ -89,9 +93,9 @@ void TTLRow::paintStatusText( class TTLChatsBoxController : public ChatsListBoxController { public: - TTLChatsBoxController(not_null session); + TTLChatsBoxController(not_null<::Main::Session*> session); - Main::Session &session() const override; + ::Main::Session &session() const override; void rowClicked(not_null row) override; protected: @@ -99,18 +103,18 @@ protected: std::unique_ptr createRow(not_null history) override; private: - const not_null _session; + const not_null<::Main::Session*> _session; rpl::lifetime _lifetime; }; -TTLChatsBoxController::TTLChatsBoxController(not_null session) +TTLChatsBoxController::TTLChatsBoxController(not_null<::Main::Session*> session) : ChatsListBoxController(session) , _session(session) { } -Main::Session &TTLChatsBoxController::session() const { +::Main::Session &TTLChatsBoxController::session() const { return *_session; } @@ -187,36 +191,37 @@ void SetupTopContent( } +const auto kMeta = BuildHelper({ + .id = GlobalTTL::Id(), + .parentId = PrivacySecurity::Id(), + .title = &tr::lng_settings_ttl_title, + .icon = &st::menuIconTTL, +}, [](SectionBuilder &builder) { + builder.addSubsectionTitle({ + .id = u"auto-delete/period"_q, + .title = tr::lng_settings_ttl_after_subtitle(), + .keywords = { u"ttl"_q, u"auto-delete"_q, u"timer"_q }, + }); + + builder.add(nullptr, [] { + return SearchEntry{ + .id = u"auto-delete/set-custom"_q, + .title = tr::lng_settings_ttl_after_custom(tr::now), + .keywords = { u"custom"_q, u"ttl"_q, u"period"_q }, + }; + }); + + builder.add(nullptr, [] { + return SearchEntry{ + .id = u"auto-delete/apply-existing"_q, + .title = tr::lng_settings_ttl_after_about_link(tr::now), + .keywords = { u"apply"_q, u"existing"_q, u"chats"_q }, + }; + }); +}); + } // namespace -class GlobalTTL : public Section { -public: - GlobalTTL( - QWidget *parent, - not_null controller); - - [[nodiscard]] rpl::producer title() override; - void setupContent(); - - void showFinished() override final; - -private: - void rebuildButtons(TimeId currentTTL) const; - void showSure(TimeId ttl, bool rebuild) const; - - void request(TimeId ttl) const; - - const std::shared_ptr _group; - const std::shared_ptr _show; - - not_null _buttons; - QPointer _customButton; - - rpl::event_stream<> _showFinished; - rpl::lifetime _requestLifetime; - -}; - GlobalTTL::GlobalTTL( QWidget *parent, not_null controller) @@ -248,7 +253,7 @@ void GlobalTTL::showSure(TimeId ttl, bool rebuild) const { lt_after_duration, { .text = ttlText }, tr::marked)); - _show->hideLayer(); // Don't use close(). + _show->hideLayer(); }); request(ttl); }; @@ -441,4 +446,9 @@ Type GlobalTTLId() { return GlobalTTL::Id(); } +namespace Builder { + +SectionBuildMethod GlobalTTLSection = kMeta.build; + +} // namespace Builder } // namespace Settings diff --git a/Telegram/SourceFiles/settings/sections/settings_global_ttl.h b/Telegram/SourceFiles/settings/sections/settings_global_ttl.h new file mode 100644 index 0000000000..644ff1e420 --- /dev/null +++ b/Telegram/SourceFiles/settings/sections/settings_global_ttl.h @@ -0,0 +1,62 @@ +/* +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_session.h" +#include "settings/settings_type.h" + +namespace Main { +class SessionShow; +} // namespace Main + +namespace Ui { +class RadiobuttonGroup; +class VerticalLayout; +class SettingsButton; +} // namespace Ui + +namespace Window { +class SessionController; +} // namespace Window + +namespace Settings { + +class GlobalTTL : public Section { +public: + GlobalTTL( + QWidget *parent, + not_null controller); + + [[nodiscard]] rpl::producer title() override; + +private: + void setupContent(); + void showFinished() override; + void rebuildButtons(TimeId currentTTL) const; + void showSure(TimeId ttl, bool rebuild) const; + void request(TimeId ttl) const; + + const std::shared_ptr _group; + const std::shared_ptr<::Main::SessionShow> _show; + + not_null _buttons; + QPointer _customButton; + + rpl::event_stream<> _showFinished; + rpl::lifetime _requestLifetime; + +}; + +Type GlobalTTLId(); + +namespace Builder { + +extern SectionBuildMethod GlobalTTLSection; + +} // namespace Builder +} // namespace Settings diff --git a/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp index 6a376819db..2db21ebb8c 100644 --- a/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp @@ -45,7 +45,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/sections/settings_main.h" #include "settings/settings_active_sessions.h" #include "settings/settings_blocked_peers.h" -#include "settings/settings_global_ttl.h" +#include "settings/sections/settings_global_ttl.h" #include "settings/settings_local_passcode.h" #include "settings/settings_passkeys.h" #include "settings/settings_premium.h" diff --git a/Telegram/SourceFiles/settings/settings_global_ttl.h b/Telegram/SourceFiles/settings/settings_global_ttl.h deleted file mode 100644 index a97c7491b6..0000000000 --- a/Telegram/SourceFiles/settings/settings_global_ttl.h +++ /dev/null @@ -1,17 +0,0 @@ -/* -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_type.h" - -namespace Settings { - -Type GlobalTTLId(); - -} // namespace Settings -