From 8440c44def3d4ae15bd4c33d80ed84dff9637fff Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 10 Apr 2022 13:49:14 +0300 Subject: [PATCH] Replaced box for choosing of filter with submenu. --- .../Resources/icons/menu/add_to_folder.png | Bin 0 -> 608 bytes .../Resources/icons/menu/add_to_folder@2x.png | Bin 0 -> 1003 bytes .../Resources/icons/menu/add_to_folder@3x.png | Bin 0 -> 1413 bytes .../SourceFiles/boxes/choose_filter_box.cpp | 30 ++++++++++++++++++ .../SourceFiles/boxes/choose_filter_box.h | 5 +++ Telegram/SourceFiles/ui/menu_icons.style | 1 + .../SourceFiles/window/window_peer_menu.cpp | 28 ++++++---------- 7 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 Telegram/Resources/icons/menu/add_to_folder.png create mode 100644 Telegram/Resources/icons/menu/add_to_folder@2x.png create mode 100644 Telegram/Resources/icons/menu/add_to_folder@3x.png diff --git a/Telegram/Resources/icons/menu/add_to_folder.png b/Telegram/Resources/icons/menu/add_to_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..bf27766b51cd13f511ee3eb9eb1d69ad33fc476f GIT binary patch literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf?3AaAV~B;| z+hE_-j)5Y3=k>2^{Ngji!^@o6*(c!AS%+7%q@+*IJ#j~*-hr*Iq4CVr^%Byt!Sb3D zRlGEg-j11DEyJGwr>c6(x0|omT)X#MrtRnEg-TYztFOu&&oq(x`KQK?zy0vzj~*B7 zmK;nd*ccHbm%RJ#v80Xs<{vj5Oo&(;b~9&MYUBr1_6H?ad+)!mwYzUFcEV^~!SRIw z8GGY`xp;y#MC4-Q%67-v%@1FB;$+Nv_r(`)=D3MAId8t1bGYewr9_iPm&m`(6XMqA zn@IUBpL{57hL76imn8u&xfLZ|rEPZ9Y&iVTV5ZNlw`QT-Ck(>otWQ`QwpzuUC0Jwn z>CZp^L~2j;`0~5<$o~D)3oLR>q%Lamz52TAZr=N{-Fe%qt>!*bm5FaX;Gs9YT9t)m zu3x&*OdGlL(uy%t`eOC27wyy$>prrn^V*ce!?&3~w@9qm616sK>nyLO4>ScstE4(z z65K0zulavfD&}zip6KlRPk4vG8hg3^=Ee6b0;8n+kBfC5&D#1X>TKHQsa@A!%l5i; ztg(>dVcQzD_WJ8kt*Mt^wn&6LD6n90{P6qlieDdIFW8-8B+0>YulC*T&>tB~gFGjx fsC?nK^MAlT^T6>Nv;QU~fMVCv)z4*}Q$iB}YRdQs literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/add_to_folder@2x.png b/Telegram/Resources/icons/menu/add_to_folder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..57e8540b3da410fb86341441270db9c7d9f6a06b GIT binary patch literal 1003 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFRY^oaR9Fe^SU*T=Q5Y|k7Y#}d zMWqPwLYE2}!Xbx-+FC*gTqI~{kR1GjG!#V5tsxoWP!I({VUfEbIw-hSZW=)#sOX@+ z_oMr&tM_>Bx%XXp!@Fm=p7WjW`+dLfJKwqI9tQ^0re;9Rz<-v3LD6`prl#iS=ZA-f ziJJ9#J(tV9yu1)+6&4x{hO@J?UkojkN?EN|h23|-jgF2!Jv}jy`J+;)RAy#oxzOa^-mbkz}q0pC*(s4SSoc_bZ z!_VGra&mHTP`qjhjt&kE;GkSCYqeU!G)aU+a-8VTVzIcry-fn3%8rkZft$%>s9GJ9 z8ja@k^pwu#Yxef`c4%m*!~S!i`|J>YVNa0u5VhOw&CN}u)?%^rP#M5R+1lD#Sy@?K zT}4KN!C)`VZaJ5sbUNKV@z-P2P%IWhsMs#Ev$H}xjZg#$W9jYf?fHB@EEW-jCfnu?+Wc*o5AMc2KKEJTAU^bhDYP8_!HH5cL zJRS$)#>NK9SyG;w%_ap&*-`1lBeWHKp?fG@%8=l=d45^#z{B9b`qahUpJV`D6O z*u8gmcgQ7LG#X{(gn*%ca&p4rLb8qwPW>f>2&8hN5bD@vUaxm?aZz%LJ`8HLTB%f; zn3zC4y}rKg?Ci+H`L;sQd{lx04{X41TvCrILvL?yySuv%hl7M5F2f$4o0}USABQUU zIuN(%pN3ASyS%*Qa*GazbYGMV(G8hqrLqBN9|_4|BZm-f8sTu*Znx7@B#(_8LPtkO zD2PNNK__%^alu|Ud??D2k(uoxbu>)Ag@o`4v3xt z`uzNiMB?^?Z$G8jz#WYcg$<@a*YEe!b!5zvm+bxh9auJ-jq&uBb95}p4u)Ddrff+u#P6(002ovPDHLkV1k!@#uESl literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/add_to_folder@3x.png b/Telegram/Resources/icons/menu/add_to_folder@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..169156cacf01cf912339922643b19ce314c75d97 GIT binary patch literal 1413 zcmY*ZX*3%M5RS8GHSVj9NTiXpjRqxHQbLHhuR7M&QG(R*)J>$0M=52gqmH2MMv=PW z$ZCUKv|5d%l)hTWZtL18sw=2c8-I3R-@I?Wnfd0&H-9G2#mQD$N=*s?07&EQtlb1` zcMJ((L7pknkr9y44L4gWKM&T?GE(0L7}7 zz_Q>eMnhxW{eV3BE+6*1J5bC$1uYYtu*@)-7TcMIU{C3WyX=>Zy zWBy|nXMU}fd~_gNbnE8#@lwJYt`SWlRo}a(s;IcMzRuR)+1lFL+e?aw;PH6*HVeY0 zUS3{PQ&SZc6_heeU0t2Ozkfjo_ilA*=_Hq19E)4PscUNHWM_x*db?00(pp|#UbIEk zekX(RfyYBcIz5@E(a!pV*Voqr0|P6u{V*(nDX6chw_l2%wKLV9|-v$ON? zg){^d3Vmh>oxx(Un;RRtz2)Ufk|9X{o=)Aeva(9m`_nTsGjHF*%!XY8qodpC^y_J9 z>Md$4Hk(Z(68-%Aa;kDJw6(RtV6ffY-5mdB-{s|HyN3eX8X6i?0hf%7Ch+bEI-L$O zjG(U-nWNDlr}O8}ukOMrTI%W^_V_E5goNp_F~YC!>Tm&UnXt5N4F4Qys3tKnac#fZ zV}5RqzqR#qH)6mnqjF#Xa}#H4dpke>nyimPW@e_GoScesPgWK-B_$<19R9^3W1y=m zyS%MUPstA#zgi#-1fKEKr`S3O8rObW#4>A}6(i!Ht6 zsIZvFVzFdB5$%_;CT3=-WOA)8iQ`E1j*ix=8A^Dwu)wj(;R#sLX1t=>k2T!~T1o|XLMIrH!42+RcPhVfeX>3)H zl7d2j30Gbz1nhehw4HUR9xS?8PopZps5`lY>T89RD;jH)nNpWMnW+Cz4uk_3p#VL{C(e5mvd# z10N6y^?GtrUe!GEjazXYidQ(%gat7fLA#bz6?Q)a0)gWRl6@8~&mH2#6B&k)Bjo{L zsm4I&R>OF9Zf=X!NUh4q%>2ApRZ&alAvwmzMvQ;$#*Kec8$TQW*xRs*m(~7YTo$X+ z4N+55bMdD|DJUt~L-Zq;P$<;c*x2~^xadhUO{1;JN%!!upIFR22Ld4rsLpG&>*e@24Cr34iGi zJ>@E94HZwk*U{1Ou~nZOjQKsh$Gm@F;6v=Tt(NtJ@BhwmCn>vkq9GHbBp#Jpef$FP MHcr;9Rsos+0_F{e(f|Me literal 0 HcmV?d00001 diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.cpp b/Telegram/SourceFiles/boxes/choose_filter_box.cpp index 5f951143e..1a0ac1a50 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/choose_filter_box.cpp @@ -19,9 +19,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" // Ui::Text::Bold #include "ui/toast/toast.h" #include "ui/widgets/buttons.h" +#include "ui/widgets/popup_menu.h" #include "window/window_session_controller.h" #include "styles/style_settings.h" #include "styles/style_payments.h" // paymentsSectionButton +#include "styles/style_media_player.h" // mediaPlayerMenuCheck namespace { @@ -203,3 +205,31 @@ void ChooseFilterBox( box->addButton(tr::lng_close(), [=] { box->closeBox(); }); } + +void FillChooseFilterMenu( + not_null menu, + not_null history) { + const auto validator = ChooseFilterValidator(history); + for (const auto &filter : history->owner().chatsFilters().list()) { + const auto id = filter.id(); + const auto contains = filter.contains(history); + const auto action = menu->addAction(filter.title(), [=] { + if (filter.contains(history)) { + if (validator.canRemove(id)) { + validator.remove(id); + } + } else { + if (validator.canAdd()) { + validator.add(id); + } + } + }, contains ? &st::mediaPlayerMenuCheck : nullptr); + action->setEnabled(contains + ? validator.canRemove(id) + : validator.canAdd()); + } + history->owner().chatsFilters().changed( + ) | rpl::start_with_next([=] { + menu->hideMenu(); + }, menu->lifetime()); +} diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.h b/Telegram/SourceFiles/boxes/choose_filter_box.h index 33404bc03..2ebc1bbab 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.h +++ b/Telegram/SourceFiles/boxes/choose_filter_box.h @@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Ui { class GenericBox; +class PopupMenu; } // namespace Ui class History; @@ -31,3 +32,7 @@ private: void ChooseFilterBox( not_null box, not_null history); + +void FillChooseFilterMenu( + not_null menu, + not_null history); diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index a1b3648ed..310e698f2 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -111,6 +111,7 @@ menuIconSoundSelect: icon {{ "menu/sound_select", menuIconColor }}; menuIconSoundAdd: icon {{ "menu/sound_add", menuIconColor }}; menuIconFile: icon {{ "menu/file", menuIconColor }}; menuIconPhoto: icon {{ "menu/image", menuIconColor }}; +menuIconAddToFolder: icon {{ "menu/add_to_folder", menuIconColor }}; menuIconTTLAny: icon {{ "menu/auto_delete_plain", menuIconColor }}; menuIconTTLAnyTextPosition: point(11px, 22px); diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index f253d27d3..3381c0328 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -420,27 +420,17 @@ void Filler::addInfo() { void Filler::addToggleFolder() { const auto history = _request.key.history(); - if (!history) { + if (!history || history->owner().chatsFilters().list().empty()) { return; } - if (!_request.filterId) { - if (!ChooseFilterValidator(history).canAdd()) { - return; - } - const auto window = _controller; - _addAction(tr::lng_filters_menu_add(tr::now), [=] { - window->show(Box(ChooseFilterBox, history)); - }, nullptr); - } else { - const auto id = _request.filterId; - const auto validator = ChooseFilterValidator(history); - if (!validator.canRemove(id)) { - return; - } - _addAction(tr::lng_filters_menu_remove(tr::now), [=] { - validator.remove(id); - }, nullptr); - } + _addAction(PeerMenuCallback::Args{ + .text = tr::lng_filters_menu_add(tr::now), + .handler = nullptr, + .icon = &st::menuIconAddToFolder, + .fillSubmenu = [=](not_null menu) { + FillChooseFilterMenu(menu, history); + }, + }); } void Filler::addToggleUnreadMark() {