diff --git a/Telegram/Resources/icons/menu/hide.png b/Telegram/Resources/icons/menu/hide.png new file mode 100644 index 000000000..1cdc079be Binary files /dev/null and b/Telegram/Resources/icons/menu/hide.png differ diff --git a/Telegram/Resources/icons/menu/hide@2x.png b/Telegram/Resources/icons/menu/hide@2x.png new file mode 100644 index 000000000..c5dc78095 Binary files /dev/null and b/Telegram/Resources/icons/menu/hide@2x.png differ diff --git a/Telegram/Resources/icons/menu/hide@3x.png b/Telegram/Resources/icons/menu/hide@3x.png new file mode 100644 index 000000000..e32ae8b29 Binary files /dev/null and b/Telegram/Resources/icons/menu/hide@3x.png differ diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index da01f574f..0db096ca3 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -79,8 +79,13 @@ "other": "Recent stickers: show {count} stickers" }, "ktg_settings_recent_stickers_limit_none": "Recent stickers: hide all", + "ktg_filters_context_edit_all": "Edit folders", "ktg_settings_filters": "Folders", + "ktg_settings_filters_only_unmuted_counter": "Do not count muted chats", + "ktg_settings_filters_hide_edit": "Hide Edit button", + "ktg_settings_filters_hide_folder_names": "Compact folders", "ktg_settings_messages": "Messages", + "ktg_settings_filters_hide_all": "Hide \"All chats\" folder", "ktg_settings_userpic_rounding": "Profile pictures rounding", "ktg_settings_userpic_rounding_none": "Square", "ktg_settings_userpic_rounding_small": "Small", @@ -109,6 +114,10 @@ "ktg_supergroup_id_copied": "Supergroup ID copied to clipboard.", "ktg_channel_id_copied": "Channel ID copied to clipboard.", "ktg_settings_forward": "Forward", + "ktg_filters_hide_folder": "Hide folder", + "ktg_filters_hide_button": "Hide button", + "ktg_filters_hide_all_chats_toast": "\"All Chats\" folder is hidden.\nYou can enable it back in Kotatogram Settings.", + "ktg_filters_hide_edit_toast": "Edit button is hidden.\nYou can enable it back in Kotatogram Settings.", "ktg_in_app_update_disabled": "In-app updater is disabled.", "dummy_last_string": "" } diff --git a/Telegram/SourceFiles/kotato/kotato_settings.cpp b/Telegram/SourceFiles/kotato/kotato_settings.cpp index 54b2e38b0..3974285fc 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings.cpp @@ -386,6 +386,18 @@ const std::map> DefinitionMap { .type = SettingType::IntSetting, .defaultValue = 0, .limitHandler = IntLimit(0, 5), }}, + { "folders/count_unmuted_only", { + .type = SettingType::BoolSetting, + .defaultValue = false, }}, + { "folders/hide_edit_button", { + .type = SettingType::BoolSetting, + .defaultValue = false, }}, + { "folders/hide_names", { + .type = SettingType::BoolSetting, + .defaultValue = false, }}, + { "folders/hide_all_chats", { + .type = SettingType::BoolSetting, + .defaultValue = false, }}, }; using OldOptionKey = QString; diff --git a/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp b/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp index 058170211..b809c3f08 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp @@ -145,6 +145,22 @@ QString ChatIdLabel(int option) { ::Kotato::JsonSettings::Write(); \ }, container->lifetime()); +#define SettingsMenuJsonFilterSwitch(LangKey, Option) AddButton( \ + container, \ + rktr(#LangKey), \ + st::settingsButtonNoIcon \ +)->toggleOn( \ + rpl::single(::Kotato::JsonSettings::GetBool(#Option)) \ +)->toggledValue( \ +) | rpl::filter([](bool enabled) { \ + return (enabled != ::Kotato::JsonSettings::GetBool(#Option)); \ +}) | rpl::start_with_next([controller](bool enabled) { \ + ::Kotato::JsonSettings::Set(#Option, enabled); \ + ::Kotato::JsonSettings::Write(); \ + controller->reloadFiltersMenu(); \ + App::wnd()->fixOrder(); \ +}, container->lifetime()); + void SetupKotatoChats( not_null controller, not_null container) { @@ -410,6 +426,10 @@ void SetupKotatoFolders( AddSkip(container); AddSubsectionTitle(container, rktr("ktg_settings_filters")); + SettingsMenuJsonFilterSwitch(ktg_settings_filters_only_unmuted_counter, folders/count_unmuted_only); + SettingsMenuJsonFilterSwitch(ktg_settings_filters_hide_all, folders/hide_all_chats); + SettingsMenuJsonFilterSwitch(ktg_settings_filters_hide_edit, folders/hide_edit_button); + SettingsMenuJsonFilterSwitch(ktg_settings_filters_hide_folder_names, folders/hide_names); AddSkip(container); } diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index 10a503c13..ef7105ab2 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -76,6 +76,7 @@ menuIconFake: icon {{ "menu/fake", menuIconColor }}; menuIconPersonal: icon {{ "menu/personal", menuIconColor }}; menuIconPorn: icon {{ "menu/porn", menuIconColor }}; menuIconViolence: icon {{ "menu/violence", menuIconColor }}; +menuIconHide: icon {{ "menu/hide", menuIconColor }}; menuIconMuteFor: icon {{ "menu/mute_for", menuIconColor }}; menuIconSilent: icon {{ "menu/silent", menuIconColor }}; menuIconCustomize: icon {{ "menu/customize", menuIconColor }}; diff --git a/Telegram/SourceFiles/window/window.style b/Telegram/SourceFiles/window/window.style index 2e004ecf1..79c291f64 100644 --- a/Telegram/SourceFiles/window/window.style +++ b/Telegram/SourceFiles/window/window.style @@ -258,10 +258,11 @@ createThemeLink: InputField(defaultInputField) { } windowFiltersWidth: 72px; +windowFiltersWidthNoText: 50px; windowFiltersButton: SideBarButton(defaultSideBarButton) { textTop: 40px; textSkip: 6px; - minHeight: 62px; + minHeight: 48px; minTextWidth: 48px; style: TextStyle(defaultTextStyle) { font: font(11px semibold); diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index 1384bac35..2faeac5de 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "window/window_filters_menu.h" +#include "kotato/kotato_settings.h" +#include "kotato/kotato_lang.h" #include "mainwindow.h" #include "window/window_session_controller.h" #include "window/window_controller.h" @@ -23,6 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/filter_icons.h" #include "ui/wrap/vertical_layout_reorder.h" #include "ui/widgets/popup_menu.h" +#include "ui/toast/toast.h" #include "ui/boxes/confirm_box.h" #include "boxes/filters/edit_filter_box.h" #include "boxes/premium_limits_box.h" @@ -97,7 +100,9 @@ void FiltersMenu::setup() { _parent->heightValue( ) | rpl::start_with_next([=](int height) { - const auto width = st::windowFiltersWidth; + const auto width = (::Kotato::JsonSettings::GetBool("folders/hide_names") + ? st::windowFiltersWidthNoText + : st::windowFiltersWidth); _outer.setGeometry({ 0, 0, width, height }); _menu.resizeToWidth(width); _menu.move(0, 0); @@ -237,11 +242,13 @@ void FiltersMenu::refresh() { void FiltersMenu::setupList() { _list = _container->add(object_ptr(_container)); - _setup = prepareButton( - _container, - -1, - tr::lng_filters_setup(tr::now), - Ui::FilterIcon::Edit); + if (!::Kotato::JsonSettings::GetBool("folders/hide_edit_button")) { + _setup = prepareButton( + _container, + -1, + tr::lng_filters_setup(tr::now), + Ui::FilterIcon::Edit); + } _reorder = std::make_unique(_list, &_scroll); _reorder->updates( @@ -276,7 +283,9 @@ base::unique_qptr FiltersMenu::prepareButton( bool toBeginning) { auto prepared = object_ptr( container, - id ? title : tr::lng_filters_all(tr::now), + (::Kotato::JsonSettings::GetBool("folders/hide_names") + ? QString() + : id ? title : tr::lng_filters_all(tr::now)), st::windowFiltersButton); auto added = toBeginning ? container->insert(0, std::move(prepared)) @@ -294,12 +303,22 @@ base::unique_qptr FiltersMenu::prepareButton( ) | rpl::start_with_next([=](const Dialogs::UnreadState &state) { const auto count = (state.chats + state.marks); const auto muted = (state.chatsMuted + state.marksMuted); - const auto string = !count - ? QString() - : (count > 99) - ? "99+" - : QString::number(count); - raw->setBadge(string, count == muted); + if (::Kotato::JsonSettings::GetBool("folders/count_unmuted_only")) { + const auto unmuted = count - muted; + const auto string = !unmuted + ? QString() + : (unmuted > 99) + ? "99+" + : QString::number(unmuted); + raw->setBadge(string, false); + } else { + const auto string = !count + ? QString() + : (count > 99) + ? "99+" + : QString::number(count); + raw->setBadge(string, count == muted); + } }, raw->lifetime()); } raw->setActive(_session->activeChatsFilterCurrent() == id); @@ -324,17 +343,16 @@ base::unique_qptr FiltersMenu::prepareButton( } } }); - if (id > 0) { - raw->events( - ) | rpl::filter([](not_null e) { - return e->type() == QEvent::ContextMenu; - }) | rpl::start_with_next([=] { - if (raw->locked()) { - return; - } + raw->events( + ) | rpl::filter([=](not_null e) { + return e->type() == QEvent::ContextMenu; + }) | rpl::start_with_next([=] { + if (id == -1) { + showEditMenu(QCursor::pos()); + } else if (id > 0 && !raw->locked()) { showMenu(QCursor::pos(), id); - }, raw->lifetime()); - } + } + }, raw->lifetime()); return button; } @@ -360,7 +378,7 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { addAction( tr::lng_filters_context_edit(tr::now), - [=] { showEditBox(id); }, + crl::guard(&_outer, [=] { showEditBox(id); }), &st::menuIconEdit); auto filteredChats = [=] { @@ -378,6 +396,30 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { _popupMenu->popup(position); } +void FiltersMenu::showEditMenu(QPoint position) { + if (_popupMenu) { + _popupMenu = nullptr; + return; + } + _popupMenu = base::make_unique_q( + _setup, + st::popupMenuWithIcons); + _popupMenu->addAction( + ktr("ktg_filters_hide_button"), + crl::guard(&_outer, [=] { + ::Kotato::JsonSettings::Set("folders/hide_edit_button", true); + ::Kotato::JsonSettings::Write(); + _setup = nullptr; + Ui::Toast::Show(Ui::Toast::Config{ + .text = { ktr("ktg_filters_hide_edit_toast") }, + .st = &st::windowArchiveToast, + .multiline = true, + }); + }), &st::menuIconHide); + + _popupMenu->popup(position); +} + void FiltersMenu::showEditBox(FilterId id) { EditExistingFilter(_session, id); } diff --git a/Telegram/SourceFiles/window/window_filters_menu.h b/Telegram/SourceFiles/window/window_filters_menu.h index c640f70eb..4d3544744 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.h +++ b/Telegram/SourceFiles/window/window_filters_menu.h @@ -51,6 +51,7 @@ private: bool toBeginning = false); void setupMainMenuIcon(); void showMenu(QPoint position, FilterId id); + void showEditMenu(QPoint position); void showEditBox(FilterId id); void showRemoveBox(FilterId id); void remove(FilterId id); diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index f240c1f7c..c6ba504f5 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -1546,7 +1546,11 @@ not_null SessionController::content() const { } int SessionController::filtersWidth() const { - return _filters ? st::windowFiltersWidth : 0; + return _filters + ? (::Kotato::JsonSettings::GetBool("folders/hide_names") + ? st::windowFiltersWidthNoText + : st::windowFiltersWidth) + : 0; } rpl::producer SessionController::activeChatsFilter() const {