diff --git a/Telegram/Resources/icons/menu_calls.png b/Telegram/Resources/icons/menu_calls.png deleted file mode 100644 index a88e1226a..000000000 Binary files a/Telegram/Resources/icons/menu_calls.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_calls@2x.png b/Telegram/Resources/icons/menu_calls@2x.png deleted file mode 100644 index 18f189a5c..000000000 Binary files a/Telegram/Resources/icons/menu_calls@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_calls@3x.png b/Telegram/Resources/icons/menu_calls@3x.png deleted file mode 100644 index ff274b720..000000000 Binary files a/Telegram/Resources/icons/menu_calls@3x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_cloud.png b/Telegram/Resources/icons/menu_cloud.png deleted file mode 100644 index 837fb5074..000000000 Binary files a/Telegram/Resources/icons/menu_cloud.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_cloud@2x.png b/Telegram/Resources/icons/menu_cloud@2x.png deleted file mode 100644 index 7ecd31190..000000000 Binary files a/Telegram/Resources/icons/menu_cloud@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_contacts.png b/Telegram/Resources/icons/menu_contacts.png deleted file mode 100644 index 5df86715b..000000000 Binary files a/Telegram/Resources/icons/menu_contacts.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_contacts@2x.png b/Telegram/Resources/icons/menu_contacts@2x.png deleted file mode 100644 index 5b879588a..000000000 Binary files a/Telegram/Resources/icons/menu_contacts@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_fix_order.png b/Telegram/Resources/icons/menu_fix_order.png deleted file mode 100644 index 3532df78b..000000000 Binary files a/Telegram/Resources/icons/menu_fix_order.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_fix_order@2x.png b/Telegram/Resources/icons/menu_fix_order@2x.png deleted file mode 100644 index 7f614949f..000000000 Binary files a/Telegram/Resources/icons/menu_fix_order@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_fix_order@3x.png b/Telegram/Resources/icons/menu_fix_order@3x.png deleted file mode 100644 index f1547f7db..000000000 Binary files a/Telegram/Resources/icons/menu_fix_order@3x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_help.png b/Telegram/Resources/icons/menu_help.png deleted file mode 100644 index 80de9d1ea..000000000 Binary files a/Telegram/Resources/icons/menu_help.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_help@2x.png b/Telegram/Resources/icons/menu_help@2x.png deleted file mode 100644 index 1444e19c9..000000000 Binary files a/Telegram/Resources/icons/menu_help@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_new_channel.png b/Telegram/Resources/icons/menu_new_channel.png deleted file mode 100644 index 26cfa9b74..000000000 Binary files a/Telegram/Resources/icons/menu_new_channel.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_new_channel@2x.png b/Telegram/Resources/icons/menu_new_channel@2x.png deleted file mode 100644 index d735771a8..000000000 Binary files a/Telegram/Resources/icons/menu_new_channel@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_new_channel@3x.png b/Telegram/Resources/icons/menu_new_channel@3x.png deleted file mode 100644 index bd69025fd..000000000 Binary files a/Telegram/Resources/icons/menu_new_channel@3x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_new_group.png b/Telegram/Resources/icons/menu_new_group.png deleted file mode 100644 index 77a4e4201..000000000 Binary files a/Telegram/Resources/icons/menu_new_group.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_new_group@2x.png b/Telegram/Resources/icons/menu_new_group@2x.png deleted file mode 100644 index 33ed7b53c..000000000 Binary files a/Telegram/Resources/icons/menu_new_group@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_new_group@3x.png b/Telegram/Resources/icons/menu_new_group@3x.png deleted file mode 100644 index 18948c9c4..000000000 Binary files a/Telegram/Resources/icons/menu_new_group@3x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_night_mode.png b/Telegram/Resources/icons/menu_night_mode.png deleted file mode 100644 index 0bcd64145..000000000 Binary files a/Telegram/Resources/icons/menu_night_mode.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_night_mode@2x.png b/Telegram/Resources/icons/menu_night_mode@2x.png deleted file mode 100644 index 53ad3d7fc..000000000 Binary files a/Telegram/Resources/icons/menu_night_mode@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_night_mode@3x.png b/Telegram/Resources/icons/menu_night_mode@3x.png deleted file mode 100644 index 5fa4859cb..000000000 Binary files a/Telegram/Resources/icons/menu_night_mode@3x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_reload.png b/Telegram/Resources/icons/menu_reload.png deleted file mode 100644 index d54f7d0b0..000000000 Binary files a/Telegram/Resources/icons/menu_reload.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_reload@2x.png b/Telegram/Resources/icons/menu_reload@2x.png deleted file mode 100644 index ed37c4f74..000000000 Binary files a/Telegram/Resources/icons/menu_reload@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/menu_reload@3x.png b/Telegram/Resources/icons/menu_reload@3x.png deleted file mode 100644 index 4bf8e37e4..000000000 Binary files a/Telegram/Resources/icons/menu_reload@3x.png and /dev/null differ diff --git a/Telegram/Resources/icons/settings/channel.png b/Telegram/Resources/icons/settings/channel.png new file mode 100644 index 000000000..1248e6f7e Binary files /dev/null and b/Telegram/Resources/icons/settings/channel.png differ diff --git a/Telegram/Resources/icons/settings/channel@2x.png b/Telegram/Resources/icons/settings/channel@2x.png new file mode 100644 index 000000000..edee414ff Binary files /dev/null and b/Telegram/Resources/icons/settings/channel@2x.png differ diff --git a/Telegram/Resources/icons/settings/channel@3x.png b/Telegram/Resources/icons/settings/channel@3x.png new file mode 100644 index 000000000..39b116e56 Binary files /dev/null and b/Telegram/Resources/icons/settings/channel@3x.png differ diff --git a/Telegram/Resources/icons/settings/group.png b/Telegram/Resources/icons/settings/group.png new file mode 100644 index 000000000..06f26d6f0 Binary files /dev/null and b/Telegram/Resources/icons/settings/group.png differ diff --git a/Telegram/Resources/icons/settings/group@2x.png b/Telegram/Resources/icons/settings/group@2x.png new file mode 100644 index 000000000..27c32bef4 Binary files /dev/null and b/Telegram/Resources/icons/settings/group@2x.png differ diff --git a/Telegram/Resources/icons/settings/group@3x.png b/Telegram/Resources/icons/settings/group@3x.png new file mode 100644 index 000000000..b377b4a99 Binary files /dev/null and b/Telegram/Resources/icons/settings/group@3x.png differ diff --git a/Telegram/Resources/icons/settings/key.png b/Telegram/Resources/icons/settings/key.png new file mode 100644 index 000000000..6daaa1dfd Binary files /dev/null and b/Telegram/Resources/icons/settings/key.png differ diff --git a/Telegram/Resources/icons/settings/key@2x.png b/Telegram/Resources/icons/settings/key@2x.png new file mode 100644 index 000000000..49afae7ef Binary files /dev/null and b/Telegram/Resources/icons/settings/key@2x.png differ diff --git a/Telegram/Resources/icons/settings/key@3x.png b/Telegram/Resources/icons/settings/key@3x.png new file mode 100644 index 000000000..8e116d26e Binary files /dev/null and b/Telegram/Resources/icons/settings/key@3x.png differ diff --git a/Telegram/Resources/icons/settings/night.png b/Telegram/Resources/icons/settings/night.png new file mode 100644 index 000000000..ce1b75200 Binary files /dev/null and b/Telegram/Resources/icons/settings/night.png differ diff --git a/Telegram/Resources/icons/settings/night@2x.png b/Telegram/Resources/icons/settings/night@2x.png new file mode 100644 index 000000000..52ea9170c Binary files /dev/null and b/Telegram/Resources/icons/settings/night@2x.png differ diff --git a/Telegram/Resources/icons/settings/night@3x.png b/Telegram/Resources/icons/settings/night@3x.png new file mode 100644 index 000000000..58ee424c1 Binary files /dev/null and b/Telegram/Resources/icons/settings/night@3x.png differ diff --git a/Telegram/Resources/icons/settings/reload.png b/Telegram/Resources/icons/settings/reload.png new file mode 100644 index 000000000..e8ad977a9 Binary files /dev/null and b/Telegram/Resources/icons/settings/reload.png differ diff --git a/Telegram/Resources/icons/settings/reload@2x.png b/Telegram/Resources/icons/settings/reload@2x.png new file mode 100644 index 000000000..8a0d60c51 Binary files /dev/null and b/Telegram/Resources/icons/settings/reload@2x.png differ diff --git a/Telegram/Resources/icons/settings/reload@3x.png b/Telegram/Resources/icons/settings/reload@3x.png new file mode 100644 index 000000000..161e5e6ee Binary files /dev/null and b/Telegram/Resources/icons/settings/reload@3x.png differ diff --git a/Telegram/Resources/icons/settings/saved_messages.png b/Telegram/Resources/icons/settings/saved_messages.png new file mode 100644 index 000000000..bd0ced24d Binary files /dev/null and b/Telegram/Resources/icons/settings/saved_messages.png differ diff --git a/Telegram/Resources/icons/settings/saved_messages@2x.png b/Telegram/Resources/icons/settings/saved_messages@2x.png new file mode 100644 index 000000000..686e8af02 Binary files /dev/null and b/Telegram/Resources/icons/settings/saved_messages@2x.png differ diff --git a/Telegram/Resources/icons/settings/saved_messages@3x.png b/Telegram/Resources/icons/settings/saved_messages@3x.png new file mode 100644 index 000000000..304198b33 Binary files /dev/null and b/Telegram/Resources/icons/settings/saved_messages@3x.png differ diff --git a/Telegram/Resources/icons/settings/settings.png b/Telegram/Resources/icons/settings/settings.png new file mode 100644 index 000000000..c2761c595 Binary files /dev/null and b/Telegram/Resources/icons/settings/settings.png differ diff --git a/Telegram/Resources/icons/settings/settings@2x.png b/Telegram/Resources/icons/settings/settings@2x.png new file mode 100644 index 000000000..a6f463a20 Binary files /dev/null and b/Telegram/Resources/icons/settings/settings@2x.png differ diff --git a/Telegram/Resources/icons/settings/settings@3x.png b/Telegram/Resources/icons/settings/settings@3x.png new file mode 100644 index 000000000..d59d28346 Binary files /dev/null and b/Telegram/Resources/icons/settings/settings@3x.png differ diff --git a/Telegram/Resources/icons/settings/user.png b/Telegram/Resources/icons/settings/user.png new file mode 100644 index 000000000..ae91dfea0 Binary files /dev/null and b/Telegram/Resources/icons/settings/user.png differ diff --git a/Telegram/Resources/icons/settings/user@2x.png b/Telegram/Resources/icons/settings/user@2x.png new file mode 100644 index 000000000..d9bbbc15e Binary files /dev/null and b/Telegram/Resources/icons/settings/user@2x.png differ diff --git a/Telegram/Resources/icons/settings/user@3x.png b/Telegram/Resources/icons/settings/user@3x.png new file mode 100644 index 000000000..39ed102de Binary files /dev/null and b/Telegram/Resources/icons/settings/user@3x.png differ diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index 4746e7346..658d59ac4 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -373,22 +373,14 @@ infoProfileToggleOver: Toggle(infoProfileToggle) { untoggledFg: menuIconFgOver; } infoProfileButton: SettingsButton(defaultSettingsButton) { - textFg: windowBoldFg; - textFgOver: windowBoldFgOver; - textBg: windowBg; - textBgOver: windowBgOver; - font: normalFont; - height: 20px; padding: margins(79px, 10px, 8px, 8px); iconLeft: 22px; toggle: infoProfileToggle; toggleOver: infoProfileToggleOver; toggleSkip: 20px; - - ripple: defaultRippleAnimation; } infoNotificationsButton: SettingsButton(infoProfileButton) { padding: margins(79px, 13px, 8px, 9px); diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style index e0322f423..bd6cc0b4f 100644 --- a/Telegram/SourceFiles/settings/settings.style +++ b/Telegram/SourceFiles/settings/settings.style @@ -65,6 +65,14 @@ settingsIconAskQuestion: icon {{ "settings/ask_question", settingsIconFg }}; settingsIconStickers: icon {{ "settings/stickers", settingsIconFg }}; settingsIconEmoji: icon {{ "settings/emoji", settingsIconFg }}; settingsIconThemes: icon {{ "settings/palette", settingsIconFg }}; +settingsIconNewGroup: icon {{ "settings/group", settingsIconFg }}; +settingsIconNewChannel: icon {{ "settings/channel", settingsIconFg }}; +settingsIconContacts: icon {{ "settings/user", settingsIconFg }}; +settingsIconSavedMessages: icon {{ "settings/saved_messages", settingsIconFg }}; +settingsIconKey: icon {{ "settings/key", settingsIconFg }}; +settingsIconReload: icon {{ "settings/reload", settingsIconFg }}; +settingsIconNight: icon {{ "settings/night", settingsIconFg }}; +settingsIconSettings: icon {{ "settings/settings", settingsIconFg }}; settingsSetPhotoSkip: 7px; diff --git a/Telegram/SourceFiles/window/window.style b/Telegram/SourceFiles/window/window.style index 8a61c1aae..7287b3f64 100644 --- a/Telegram/SourceFiles/window/window.style +++ b/Telegram/SourceFiles/window/window.style @@ -111,10 +111,11 @@ mainMenuResetScaleLeft: 36px; mainMenuResetScaleRight: 12px; mainMenuResetScaleTop: 2px; mainMenuResetScaleIconLeft: 5px; -mainMenuCoverTextLeft: 30px; +mainMenuCoverNameLeft: 26px; mainMenuCoverNameTop: 84px; -mainMenuCoverStatusTop: 102px; -mainMenuSkip: 10px; +mainMenuCoverStatusLeft: 24px; +mainMenuCoverStatusTop: 103px; +mainMenuSkip: 6px; mainMenu: Menu(defaultMenu) { itemFg: windowBoldFg; itemFgOver: windowBoldFgOver; @@ -129,23 +130,14 @@ mainMenu: Menu(defaultMenu) { } itemToggleShift: 11px; } +mainMenuButton: SettingsButton(defaultSettingsButton) { + font: semiboldFont; + padding: margins(61px, 11px, 22px, 9px); + toggleSkip: 18px; + iconLeft: 21px; +} + mainMenuShadow: icon {{ "menu_shadow", windowShadowFg }}; -mainMenuNewGroup: icon {{ "menu_new_group", menuIconFg }}; -mainMenuNewGroupOver: icon {{ "menu_new_group", menuIconFgOver }}; -mainMenuNewChannel: icon {{ "menu_new_channel", menuIconFg }}; -mainMenuNewChannelOver: icon {{ "menu_new_channel", menuIconFgOver }}; -mainMenuContacts: icon {{ "settings/settings_name", menuIconFg }}; -mainMenuContactsOver: icon {{ "settings/settings_name", menuIconFgOver }}; -mainMenuCalls: icon {{ "settings/settings_phone_number", menuIconFg }}; -mainMenuCallsOver: icon {{ "settings/settings_phone_number", menuIconFgOver }}; -mainMenuSettings: icon {{ "menu_settings", menuIconFg }}; -mainMenuSettingsOver: icon {{ "menu_settings", menuIconFgOver }}; -mainMenuNightMode: icon {{ "menu_night_mode", menuIconFg }}; -mainMenuNightModeOver: icon {{ "menu_night_mode", menuIconFgOver }}; -mainMenuReload: icon {{ "menu_reload", menuIconFg }}; -mainMenuReloadOver: icon {{ "menu_reload", menuIconFgOver }}; -mainMenuFixOrder: icon {{ "menu_fix_order", menuIconFg }}; -mainMenuFixOrderOver: icon {{ "menu_fix_order", menuIconFgOver }}; mainMenuAddAccount: icon {{ "menu_add_account", menuIconFg }}; mainMenuAddAccountOver: icon {{ "menu_add_account", menuIconFgOver }}; mainMenuAccountSize: 32px; diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index 8fe51327c..321fb254a 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -13,9 +13,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/chat/chat_theme.h" #include "ui/widgets/buttons.h" #include "ui/widgets/labels.h" -#include "ui/widgets/menu/menu.h" -#include "ui/widgets/menu/menu_common.h" -#include "ui/widgets/menu/menu_toggle.h" #include "ui/widgets/popup_menu.h" #include "ui/widgets/scroll_area.h" #include "ui/widgets/shadow.h" @@ -584,7 +581,6 @@ MainMenu::MainMenu( st::mainMenuUserpic) , _toggleAccounts(this) , _archiveButton(this, st::mainMenuCloudButton) -, _cloudButton(this, st::mainMenuCloudButton) , _scroll(this, st::defaultSolidScroll) , _inner(_scroll->setOwnedWidget( object_ptr(_scroll.data()))) @@ -595,7 +591,7 @@ MainMenu::MainMenu( _inner.get(), object_ptr(_inner.get())))) , _menu(_inner->add( - object_ptr(_inner.get(), st::mainMenu), + object_ptr(_inner.get()), { 0, st::mainMenuSkip, 0, 0 })) , _footer(_inner->add(object_ptr(_inner.get()))) , _telegram( @@ -607,18 +603,18 @@ MainMenu::MainMenu( setAttribute(Qt::WA_OpaquePaintEvent); setupArchiveButton(); - setupCloudButton(); setupUserpicButton(); setupAccountsToggle(); setupAccounts(); + setupMenu(); _nightThemeSwitch.setCallback([this] { - if (const auto action = *_nightThemeAction) { - const auto nightMode = Window::Theme::IsNightMode(); - if (action->isChecked() != nightMode) { - Window::Theme::ToggleNightMode(); - Window::Theme::KeepApplied(); - } + Expects(_nightThemeToggle != nullptr); + + const auto nightMode = Window::Theme::IsNightMode(); + if (_nightThemeToggle->toggled() != nightMode) { + Window::Theme::ToggleNightMode(); + Window::Theme::KeepApplied(); } }); @@ -636,10 +632,6 @@ MainMenu::MainMenu( }, _inner->lifetime()); parentResized(); - _menu->setTriggeredCallback([](const Ui::Menu::CallbackData &data) { - data.action->triggered(); - }); - refreshMenu(); refreshBackground(); _telegram->setMarkedText(Ui::Text::Link( @@ -682,13 +674,7 @@ MainMenu::MainMenu( Window::Theme::Background()->updates( ) | rpl::start_with_next([=](const BackgroundUpdate &update) { if (update.type == BackgroundUpdate::Type::ApplyingTheme) { - if (const auto action = *_nightThemeAction) { - const auto nightMode = Window::Theme::IsNightMode(); - if (action->isChecked() != nightMode) { - action->setChecked(nightMode); - _menu->finishAnimating(); - } - } + _nightThemeSwitches.fire(Window::Theme::IsNightMode()); } if (update.type == BackgroundUpdate::Type::New) { refreshBackground(); @@ -768,15 +754,6 @@ void MainMenu::setupArchiveButton() { }, lifetime()); } -void MainMenu::setupCloudButton() { - _cloudButton->setClickedCallback([=] { - _controller->content()->choosePeer( - _controller->session().userPeerId(), - ShowAtUnreadMsgId); - }); - _cloudButton->show(); -} - void MainMenu::setupUserpicButton() { _userpicButton->setClickedCallback([=] { toggleAccounts(); }); _userpicButton->show(); @@ -976,60 +953,95 @@ void MainMenu::parentResized() { resize(st::mainMenuWidth, parentWidget()->height()); } -void MainMenu::refreshMenu() { - _menu->clearActions(); +void MainMenu::setupMenu() { + using namespace Settings; + const auto controller = _controller; - if (!_controller->session().supportMode()) { - _menu->addAction(tr::lng_create_group_title(tr::now), [=] { - controller->showNewGroup(); - }, &st::mainMenuNewGroup, &st::mainMenuNewGroupOver); - _menu->addAction(tr::lng_create_channel_title(tr::now), [=] { - controller->showNewChannel(); - }, &st::mainMenuNewChannel, &st::mainMenuNewChannelOver); - _menu->addAction(tr::lng_menu_contacts(tr::now), [=] { - controller->show(PrepareContactsBox(controller)); - }, &st::mainMenuContacts, &st::mainMenuContactsOver); - if (_controller->session().serverConfig().phoneCallsEnabled.current()) { - _menu->addAction(tr::lng_menu_calls(tr::now), [=] { - ShowCallsBox(controller); - }, &st::mainMenuCalls, &st::mainMenuCallsOver); - } - } else { - _menu->addAction(tr::lng_profile_add_contact(tr::now), [=] { - controller->showAddContact(); - }, &st::mainMenuContacts, &st::mainMenuContactsOver); - - const auto fix = std::make_shared>(); - auto fixCallback = [=] { - (*fix)->setChecked(!(*fix)->isChecked()); - _controller->session().settings().setSupportFixChatsOrder( - (*fix)->isChecked()); - _controller->session().saveSettings(); - }; - auto item = base::make_unique_q( + const auto addAction = [&]( + rpl::producer text, + IconDescriptor &&descriptor) { + return AddButton( _menu, - st::mainMenu, - u"Fix chats order"_q, - std::move(fixCallback), - &st::mainMenuFixOrder, - &st::mainMenuFixOrderOver); - *fix = _menu->addAction(std::move(item)); - (*fix)->setCheckable(true); - (*fix)->setChecked( - _controller->session().settings().supportFixChatsOrder()); - - _menu->addAction(qsl("Reload templates"), [=] { + std::move(text), + st::mainMenuButton, + std::move(descriptor)); + }; + if (!_controller->session().supportMode()) { + addAction( + tr::lng_create_group_title(), + { &st::settingsIconNewGroup, kIconLightBlue } + )->setClickedCallback([=] { + controller->showNewGroup(); + }); + addAction( + tr::lng_create_channel_title(), + { &st::settingsIconNewChannel, kIconLightOrange } + )->setClickedCallback([=] { + controller->showNewChannel(); + }); + addAction( + tr::lng_menu_contacts(), + { &st::settingsIconContacts, kIconRed } + )->setClickedCallback([=] { + controller->show(PrepareContactsBox(controller)); + }); + addAction( + tr::lng_menu_calls(), + { &st::settingsIconCalls, kIconGreen } + )->setClickedCallback([=] { + ShowCallsBox(controller); + }); + addAction( + tr::lng_saved_messages(), + { &st::settingsIconSavedMessages, kIconLightBlue } + )->setClickedCallback([=] { + controller->content()->choosePeer( + controller->session().userPeerId(), + ShowAtUnreadMsgId); + }); + } else { + addAction( + tr::lng_profile_add_contact(), + { &st::settingsIconContacts, kIconRed } + )->setClickedCallback([=] { + controller->showAddContact(); + }); + addAction( + rpl::single(u"Fix chats order"_q), + { &st::settingsIconKey, kIconGreen } + )->toggleOn(rpl::single( + _controller->session().settings().supportFixChatsOrder() + ))->toggledChanges( + ) | rpl::start_with_next([=](bool fix) { + _controller->session().settings().setSupportFixChatsOrder(fix); + _controller->session().saveSettings(); + }, _menu->lifetime()); + addAction( + rpl::single(u"Reload templates"_q), + { &st::settingsIconReload, kIconLightBlue } + )->setClickedCallback([=] { _controller->session().supportTemplates().reload(); - }, &st::mainMenuReload, &st::mainMenuReloadOver); + }); } - _menu->addAction(tr::lng_menu_settings(tr::now), [=] { + addAction( + tr::lng_menu_settings(), + { &st::settingsIconSettings, kIconPurple } + )->setClickedCallback([=] { controller->showSettings(); - }, &st::mainMenuSettings, &st::mainMenuSettingsOver); + }); - _nightThemeAction = std::make_shared>(); - - auto nightCallback = [=] { + _nightThemeToggle = addAction( + tr::lng_menu_night_mode(), + { &st::settingsIconNight, kIconDarkBlue } + )->toggleOn(_nightThemeSwitches.events_starting_with( + Window::Theme::IsNightMode() + )); + _nightThemeToggle->toggledChanges( + ) | rpl::filter([=](bool night) { + return (night != Window::Theme::IsNightMode()); + }) | rpl::start_with_next([=](bool night) { if (Window::Theme::Background()->editingTheme()) { + _nightThemeSwitches.fire(!night); controller->show(Box( tr::lng_theme_editor_cant_change_theme(tr::now))); return; @@ -1039,36 +1051,23 @@ void MainMenu::refreshMenu() { if (!weak) { Window::Theme::ToggleNightMode(); Window::Theme::KeepApplied(); - } else if (auto action = *_nightThemeAction) { - action->setChecked(!action->isChecked()); + } else { _nightThemeSwitch.callOnce(st::mainMenu.itemToggle.duration); } }; Window::Theme::ToggleNightModeWithConfirmation( &_controller->window(), toggle); - }; + }, _nightThemeToggle->lifetime()); - auto item = base::make_unique_q( - _menu, - st::mainMenu, - tr::lng_menu_night_mode(tr::now), - std::move(nightCallback), - &st::mainMenuNightMode, - &st::mainMenuNightModeOver); - - auto action = _menu->addAction(std::move(item)); - *_nightThemeAction = action; - action->setCheckable(true); - action->setChecked(Window::Theme::IsNightMode()); Core::App().settings().systemDarkModeValue( ) | rpl::start_with_next([=](std::optional darkMode) { - const auto darkModeEnabled = Core::App().settings().systemDarkModeEnabled(); + const auto darkModeEnabled + = Core::App().settings().systemDarkModeEnabled(); if (darkModeEnabled && darkMode.has_value()) { - action->setChecked(*darkMode); + _nightThemeSwitches.fire_copy(*darkMode); } - }, lifetime()); - _menu->finishAnimating(); + }, _nightThemeToggle->lifetime()); updatePhone(); } @@ -1107,7 +1106,7 @@ void MainMenu::refreshBackground() { // Cut off the part of the background that is under text. const QRect underText( - st::mainMenuCoverTextLeft, + st::mainMenuCoverNameLeft, st::mainMenuCoverNameTop, std::max( st::semiboldFont->width( @@ -1121,7 +1120,6 @@ void MainMenu::refreshBackground() { } void MainMenu::resizeEvent(QResizeEvent *e) { - _menu->setForceWidth(width()); _inner->resizeToWidth(width()); updateControlsGeometry(); } @@ -1132,17 +1130,13 @@ void MainMenu::updateControlsGeometry() { st::mainMenuUserpicTop); if (_resetScaleButton) { _resetScaleButton->moveToRight(0, 0); - _cloudButton->moveToRight(_resetScaleButton->width(), 0); - _archiveButton->moveToRight( - _resetScaleButton->width() + _cloudButton->width(), - 0); + _archiveButton->moveToRight(_resetScaleButton->width(), 0); } else { const auto right = st::mainMenuTogglePosition.x() - - (_cloudButton->width() / 2); + - (_archiveButton->width() / 2); const auto top = st::mainMenuUserpicTop - - (_cloudButton->height() - st::mainMenuCloudSize) / 2; - _cloudButton->moveToRight(right, top); - _archiveButton->moveToRight(right + _cloudButton->width(), top); + - (_archiveButton->height() - st::mainMenuCloudSize) / 2; + _archiveButton->moveToRight(right, top); } _toggleAccounts->setGeometry( 0, @@ -1187,7 +1181,7 @@ void MainMenu::paintEvent(QPaintEvent *e) { if (!cover.isEmpty()) { const auto widthText = width() - - st::mainMenuCoverTextLeft + - st::mainMenuCoverNameLeft - _toggleAccounts->rightSkip(); if (isFill) { @@ -1197,24 +1191,16 @@ void MainMenu::paintEvent(QPaintEvent *e) { p.setFont(st::semiboldFont); _controller->session().user()->nameText().drawLeftElided( p, - st::mainMenuCoverTextLeft, + st::mainMenuCoverNameLeft, st::mainMenuCoverNameTop, widthText, width()); p.setFont(st::normalFont); - p.drawTextLeft(st::mainMenuCoverTextLeft, st::mainMenuCoverStatusTop, width(), _phoneText); - - // Draw Saved Messages button. - if (!_cloudButton->isHidden()) { - Ui::EmptyUserpic::PaintSavedMessages( - p, - _cloudButton->x() + (_cloudButton->width() - st::mainMenuCloudSize) / 2, - _cloudButton->y() + (_cloudButton->height() - st::mainMenuCloudSize) / 2, - width(), - st::mainMenuCloudSize, - isFill ? st::mainMenuCloudBg : st::msgServiceBg, - isFill ? st::mainMenuCloudFg : st::msgServiceFg); - } + p.drawTextLeft( + st::mainMenuCoverStatusLeft, + st::mainMenuCoverStatusTop, + width(), + _phoneText); // Draw Archive button. if (!_archiveButton->isHidden()) { diff --git a/Telegram/SourceFiles/window/window_main_menu.h b/Telegram/SourceFiles/window/window_main_menu.h index af64cdcd5..8bef9a89b 100644 --- a/Telegram/SourceFiles/window/window_main_menu.h +++ b/Telegram/SourceFiles/window/window_main_menu.h @@ -23,11 +23,9 @@ class VerticalLayout; class VerticalLayoutReorder; class RippleButton; class PlainShadow; +class SettingsButton; template class SlideWrap; -namespace Menu { -class Menu; -} // namespace Menu } // namespace Ui namespace Main { @@ -58,18 +56,17 @@ private: class ResetScaleButton; void setupArchiveButton(); - void setupCloudButton(); void setupUserpicButton(); void setupAccounts(); void setupAccountsToggle(); [[nodiscard]] not_null*> setupAddAccount( not_null container); + void setupMenu(); void rebuildAccounts(); void updateControlsGeometry(); void updateInnerControlsGeometry(); void updatePhone(); void initResetScaleButton(); - void refreshMenu(); void refreshBackground(); void toggleAccounts(); @@ -77,7 +74,6 @@ private: object_ptr _userpicButton; object_ptr _toggleAccounts; object_ptr _archiveButton; - object_ptr _cloudButton; object_ptr _resetScaleButton = { nullptr }; object_ptr _scroll; not_null _inner; @@ -87,11 +83,12 @@ private: not_null*> _accounts; Ui::SlideWrap *_addAccount = nullptr; not_null*> _shadow; - not_null _menu; + not_null _menu; not_null _footer; not_null _telegram; not_null _version; - std::shared_ptr> _nightThemeAction; + QPointer _nightThemeToggle; + rpl::event_stream _nightThemeSwitches; base::Timer _nightThemeSwitch; base::unique_qptr _contextMenu;