From ae3dfacdf946ae490749154144c8258ce186cdce Mon Sep 17 00:00:00 2001 From: ZavaruKitsu Date: Fri, 10 Nov 2023 17:36:37 +0300 Subject: [PATCH] feat: add toggles to customization --- Telegram/Resources/langs/lang.strings | 2 + Telegram/SourceFiles/ayu/ayu_settings.cpp | 25 +++ Telegram/SourceFiles/ayu/ayu_settings.h | 30 +++- .../ayu/ui/settings/settings_ayu.cpp | 147 +++++++++++++++--- .../ayu/ui/settings/settings_ayu.h | 11 +- Telegram/SourceFiles/tray.cpp | 5 +- .../SourceFiles/window/window_main_menu.cpp | 84 +++++----- 7 files changed, 233 insertions(+), 71 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 6bf7641e4..0c1422ba9 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -4493,6 +4493,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_SettingsShowID_Hide" = "Hide"; "ayu_SettingsRecentStickersCount" = "Recent stickers count"; "ayu_SettingsCustomizationHint" = "After making changes to the \"Customization\" section, you must restart the application."; +"ayu_DrawerElementsHeader" = "Drawer Elements"; +"ayu_TrayElementsHeader" = "Tray Elements"; "ayu_RegexFilters" = "Message Filters"; "ayu_RegexFiltersAmount" = "filters"; "ayu_RegexFiltersHeader" = "Filters"; diff --git a/Telegram/SourceFiles/ayu/ayu_settings.cpp b/Telegram/SourceFiles/ayu/ayu_settings.cpp index 7e3fc0934..893b7456e 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.cpp +++ b/Telegram/SourceFiles/ayu/ayu_settings.cpp @@ -286,11 +286,36 @@ void AyuGramSettings::set_recentStickersCount(int val) recentStickersCount = val; } +void AyuGramSettings::set_showLReadToggleInDrawer(bool val) +{ + showLReadToggleInDrawer = val; +} + +void AyuGramSettings::set_showSReadToggleInDrawer(bool val) +{ + showSReadToggleInDrawer = val; +} + void AyuGramSettings::set_showGhostToggleInDrawer(bool val) { showGhostToggleInDrawer = val; } +void AyuGramSettings::set_showStreamerToggleInDrawer(bool val) +{ + showStreamerToggleInDrawer = val; +} + +void AyuGramSettings::set_showGhostToggleInTray(bool val) +{ + showGhostToggleInTray = val; +} + +void AyuGramSettings::set_showStreamerToggleInTray(bool val) +{ + showStreamerToggleInTray = val; +} + void AyuGramSettings::set_mainFont(QString val) { mainFont = val; diff --git a/Telegram/SourceFiles/ayu/ayu_settings.h b/Telegram/SourceFiles/ayu/ayu_settings.h index e5d3802f7..992bf38be 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.h +++ b/Telegram/SourceFiles/ayu/ayu_settings.h @@ -63,8 +63,16 @@ public: simpleQuotesAndReplies = true; deletedMark = "🧹"; editedMark = tr::lng_edited(tr::now); - recentStickersCount = 20; + recentStickersCount = 50; + + showLReadToggleInDrawer = true; + showSReadToggleInDrawer = true; showGhostToggleInDrawer = true; + showStreamerToggleInDrawer = false; + + showGhostToggleInTray = true; + showStreamerToggleInTray = false; + mainFont = ""; monoFont = ""; @@ -105,7 +113,12 @@ public: QString deletedMark; QString editedMark; int recentStickersCount; + bool showLReadToggleInDrawer; + bool showSReadToggleInDrawer; bool showGhostToggleInDrawer; + bool showStreamerToggleInDrawer; + bool showGhostToggleInTray; + bool showStreamerToggleInTray; QString mainFont; QString monoFont; int showPeerId; @@ -160,8 +173,18 @@ public: void set_recentStickersCount(int val); + void set_showLReadToggleInDrawer(bool val); + + void set_showSReadToggleInDrawer(bool val); + void set_showGhostToggleInDrawer(bool val); + void set_showStreamerToggleInDrawer(bool val); + + void set_showGhostToggleInTray(bool val); + + void set_showStreamerToggleInTray(bool val); + void set_mainFont(QString val); void set_monoFont(QString val); @@ -201,7 +224,12 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT( deletedMark, editedMark, recentStickersCount, + showLReadToggleInDrawer, + showSReadToggleInDrawer, showGhostToggleInDrawer, + showStreamerToggleInDrawer, + showGhostToggleInTray, + showStreamerToggleInTray, mainFont, monoFont, showPeerId, diff --git a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp index 2b9018195..1c02bc483 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp +++ b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp @@ -46,22 +46,11 @@ #include "ui/wrap/slide_wrap.h" #include "ui/wrap/vertical_layout.h" #include "window/window_session_controller.h" +#include "styles/style_ayu_icons.h" + class PainterHighQualityEnabler; -const char kStreamerMode[] = - "streamer-mode"; - -base::options::toggle StreamerMode( - { - .id = kStreamerMode, - .name = "Show streamer mode toggles", - .description = "Streamer mode completely hides AyuGram windows and notifications from capture apps.", - .scope = base::options::windows, - .restartRequired = true - } -); - not_null AddInnerToggle(not_null container, const style::SettingsButton &st, std::vector> innerCheckViews, @@ -848,12 +837,134 @@ void Ayu::SetupCustomization(not_null container, AyuSettings::save(); }, container->lifetime()); + AddSkip(container); + AddDivider(container); + SetupDrawerElements(container); + AddSkip(container); + AddDivider(container); + SetupTrayElements(container); AddSkip(container); AddDivider(container); AddSkip(container); SetupFonts(container, controller); } +void Ayu::SetupDrawerElements(not_null container) +{ + auto settings = &AyuSettings::getInstance(); + + AddSkip(container); + AddSubsectionTitle(container, tr::ayu_DrawerElementsHeader()); + + AddButton( + container, + tr::ayu_LReadMessages(), + st::settingsButton, + {&st::ayuLReadMenuIcon} + )->toggleOn( + rpl::single(settings->showLReadToggleInDrawer) + )->toggledValue( + ) | rpl::filter([=](bool enabled) + { + return (enabled != settings->showLReadToggleInDrawer); + }) | start_with_next([=](bool enabled) + { + settings->set_showLReadToggleInDrawer(enabled); + AyuSettings::save(); + }, container->lifetime()); + + AddButton( + container, + tr::ayu_SReadMessages(), + st::settingsButton, + {&st::ayuSReadMenuIcon} + )->toggleOn( + rpl::single(settings->showSReadToggleInDrawer) + )->toggledValue( + ) | rpl::filter([=](bool enabled) + { + return (enabled != settings->showSReadToggleInDrawer); + }) | start_with_next([=](bool enabled) + { + settings->set_showSReadToggleInDrawer(enabled); + AyuSettings::save(); + }, container->lifetime()); + + AddButton( + container, + tr::ayu_GhostModeToggle(), + st::settingsButton, + {&st::ayuGhostIcon} + )->toggleOn( + rpl::single(settings->showGhostToggleInDrawer) + )->toggledValue( + ) | rpl::filter([=](bool enabled) + { + return (enabled != settings->showGhostToggleInDrawer); + }) | start_with_next([=](bool enabled) + { + settings->set_showGhostToggleInDrawer(enabled); + AyuSettings::save(); + }, container->lifetime()); + + AddButton( + container, + tr::ayu_StreamerModeToggle(), + st::settingsButton, + {&st::ayuStreamerModeMenuIcon} + )->toggleOn( + rpl::single(settings->showStreamerToggleInDrawer) + )->toggledValue( + ) | rpl::filter([=](bool enabled) + { + return (enabled != settings->showStreamerToggleInDrawer); + }) | start_with_next([=](bool enabled) + { + settings->set_showStreamerToggleInDrawer(enabled); + AyuSettings::save(); + }, container->lifetime()); +} + +void Ayu::SetupTrayElements(not_null container) +{ + auto settings = &AyuSettings::getInstance(); + + AddSkip(container); + AddSubsectionTitle(container, tr::ayu_TrayElementsHeader()); + + AddButton( + container, + tr::ayu_EnableGhostModeTray(), + st::settingsButtonNoIcon + )->toggleOn( + rpl::single(settings->showGhostToggleInTray) + )->toggledValue( + ) | rpl::filter([=](bool enabled) + { + return (enabled != settings->showGhostToggleInTray); + }) | start_with_next([=](bool enabled) + { + settings->set_showGhostToggleInTray(enabled); + AyuSettings::save(); + }, container->lifetime()); + + AddButton( + container, + tr::ayu_EnableStreamerModeTray(), + st::settingsButtonNoIcon + )->toggleOn( + rpl::single(settings->showStreamerToggleInTray) + )->toggledValue( + ) | rpl::filter([=](bool enabled) + { + return (enabled != settings->showStreamerToggleInTray); + }) | start_with_next([=](bool enabled) + { + settings->set_showStreamerToggleInTray(enabled); + AyuSettings::save(); + }, container->lifetime()); +} + void Ayu::SetupShowPeerId(not_null container, not_null controller) { @@ -1057,13 +1168,6 @@ void Ayu::SetupSendConfirmations(not_null container) }, container->lifetime()); } -void Ayu::SetupExperimental(not_null container, - not_null controller) -{ - AddSubsectionTitle(container, tr::lng_settings_experimental()); - AddPlatformOption(controller, container, StreamerMode, rpl::producer<>()); -} - void Ayu::SetupAyuGramSettings(not_null container, not_null controller) { @@ -1102,10 +1206,7 @@ void Ayu::SetupAyuGramSettings(not_null container, AddSkip(container); SetupSendConfirmations(container); AddSkip(container); - AddDivider(container); - AddSkip(container); - SetupExperimental(container, controller); AddDividerText(container, tr::ayu_SettingsWatermark()); } diff --git a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h index 75166fcb1..39d533967 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h +++ b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h @@ -17,10 +17,6 @@ class Controller; class SessionController; } // namespace Window -extern const char kStreamerMode[]; - -extern base::options::toggle StreamerMode; - namespace Settings { @@ -53,6 +49,10 @@ private: void SetupCustomization(not_null container, not_null controller); + void SetupDrawerElements(not_null container); + + void SetupTrayElements(not_null container); + void SetupShowPeerId(not_null container, not_null controller); void SetupRecentStickersLimitSlider(not_null container); @@ -63,9 +63,6 @@ private: void SetupSendConfirmations(not_null container); - void SetupExperimental(not_null container, - not_null controller); - void SetupAyuGramSettings(not_null container, not_null null); void setupContent(not_null controller); diff --git a/Telegram/SourceFiles/tray.cpp b/Telegram/SourceFiles/tray.cpp index 09d0fdfa9..e0c7b7fe7 100644 --- a/Telegram/SourceFiles/tray.cpp +++ b/Telegram/SourceFiles/tray.cpp @@ -100,6 +100,8 @@ void Tray::rebuildMenu() { [=] { toggleSoundNotifications(); }); } + auto settings = &AyuSettings::getInstance(); + auto turnGhostModeText = _textUpdates.events( ) | rpl::map([=] { @@ -111,7 +113,6 @@ void Tray::rebuildMenu() { }); _tray.addAction(std::move(turnGhostModeText), [=] { - auto settings = &AyuSettings::getInstance(); bool ghostMode = AyuSettings::get_ghostModeEnabled(); settings->set_ghostModeEnabled(!ghostMode); @@ -119,7 +120,7 @@ void Tray::rebuildMenu() { AyuSettings::save(); }); - if (StreamerMode.value()) { + if (settings->showStreamerToggleInTray) { auto turnStreamerModeText = _textUpdates.events( ) | rpl::map([=] { bool streamerModeEnabled = AyuFeatures::StreamerMode::isEnabled(); diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index bdf2e061b..98560fed3 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -927,28 +927,35 @@ void MainMenu::setupMenu() { )->setClickedCallback([=] { controller->showPeerHistory(controller->session().user()); }); - addAction( - tr::ayu_LReadMessages(), - { &st::ayuLReadMenuIcon } - )->setClickedCallback([=] - { - auto settings = &AyuSettings::getInstance(); - auto prev = settings->sendReadMessages; - settings->set_sendReadMessages(false); - auto chats = controller->session().data().chatsList(); - MarkAsReadChatList(chats); + const auto settings = &AyuSettings::getInstance(); - settings->set_sendReadMessages(prev); - }); - addAction( - tr::ayu_SReadMessages(), - { &st::ayuSReadMenuIcon } - )->setClickedCallback([=] - { - auto box = Box(controller); - Ui::show(std::move(box)); - }); + if (settings->showLReadToggleInDrawer) { + addAction( + tr::ayu_LReadMessages(), + {&st::ayuLReadMenuIcon} + )->setClickedCallback([=] + { + auto prev = settings->sendReadMessages; + settings->set_sendReadMessages(false); + + auto chats = controller->session().data().chatsList(); + MarkAsReadChatList(chats); + + settings->set_sendReadMessages(prev); + }); + } + + if (settings->showSReadToggleInDrawer) { + addAction( + tr::ayu_SReadMessages(), + {&st::ayuSReadMenuIcon} + )->setClickedCallback([=] + { + auto box = Box(controller); + Ui::show(std::move(box)); + }); + } } else { addAction( tr::lng_profile_add_contact(), @@ -1011,36 +1018,37 @@ void MainMenu::setupMenu() { }, _nightThemeToggle->lifetime()); const auto settings = &AyuSettings::getInstance(); - if (settings->showGhostToggleInDrawer) - { + if (settings->showGhostToggleInDrawer) { _ghostModeToggle = addAction( tr::ayu_GhostModeToggle(), - { &st::ayuGhostIcon } + {&st::ayuGhostIcon} )->toggleOn(AyuSettings::get_ghostModeEnabledReactive()); _ghostModeToggle->toggledChanges( ) | rpl::start_with_next([=](bool ghostMode) - { - settings->set_ghostModeEnabled(ghostMode); + { + settings->set_ghostModeEnabled(ghostMode); - AyuSettings::save(); - }, _ghostModeToggle->lifetime()); + AyuSettings::save(); + }, _ghostModeToggle->lifetime()); } - if (StreamerMode.value()) { + if (settings->showStreamerToggleInDrawer) { _streamerModeToggle = addAction( - tr::ayu_StreamerModeToggle(), - { &st::ayuStreamerModeMenuIcon } - )->toggleOn(rpl::single(AyuFeatures::StreamerMode::isEnabled())); + tr::ayu_StreamerModeToggle(), + {&st::ayuStreamerModeMenuIcon} + )->toggleOn(rpl::single(AyuFeatures::StreamerMode::isEnabled())); _streamerModeToggle->toggledChanges( - ) | rpl::start_with_next([=](bool enabled) { - if (enabled) { - AyuFeatures::StreamerMode::enable(); - } else { - AyuFeatures::StreamerMode::disable(); - } - }, _streamerModeToggle->lifetime()); + ) | rpl::start_with_next([=](bool enabled) + { + if (enabled) { + AyuFeatures::StreamerMode::enable(); + } + else { + AyuFeatures::StreamerMode::disable(); + } + }, _streamerModeToggle->lifetime()); } Core::App().settings().systemDarkModeValue(