From fc71a640a6a47697430dd92185f272d853a091d2 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 28 Mar 2022 23:12:38 +0300 Subject: [PATCH] Added implementation of menu for auto-delete settings. --- Telegram/Resources/icons/menu/auto_delete.png | Bin 0 -> 661 bytes .../Resources/icons/menu/auto_delete@2x.png | Bin 0 -> 1273 bytes .../Resources/icons/menu/auto_delete@3x.png | Bin 0 -> 1931 bytes .../icons/menu/auto_delete_plain.png | Bin 0 -> 464 bytes .../icons/menu/auto_delete_plain@2x.png | Bin 0 -> 987 bytes .../icons/menu/auto_delete_plain@3x.png | Bin 0 -> 1549 bytes Telegram/Resources/icons/menu/customize.png | Bin 0 -> 581 bytes .../Resources/icons/menu/customize@2x.png | Bin 0 -> 1002 bytes .../Resources/icons/menu/customize@3x.png | Bin 0 -> 1436 bytes Telegram/Resources/icons/menu/disable.png | Bin 0 -> 549 bytes Telegram/Resources/icons/menu/disable@2x.png | Bin 0 -> 877 bytes Telegram/Resources/icons/menu/disable@3x.png | Bin 0 -> 1401 bytes Telegram/Resources/langs/lang.strings | 13 +- Telegram/SourceFiles/menu/menu_ttl.cpp | 217 ++++++++++++++++++ Telegram/SourceFiles/menu/menu_ttl.h | 32 +++ Telegram/SourceFiles/ui/chat/chat.style | 19 +- Telegram/SourceFiles/ui/menu_icons.style | 6 + .../SourceFiles/ui/text/format_values.cpp | 12 + Telegram/SourceFiles/ui/text/format_values.h | 1 + Telegram/cmake/td_ui.cmake | 2 + 20 files changed, 292 insertions(+), 10 deletions(-) create mode 100644 Telegram/Resources/icons/menu/auto_delete.png create mode 100644 Telegram/Resources/icons/menu/auto_delete@2x.png create mode 100644 Telegram/Resources/icons/menu/auto_delete@3x.png create mode 100644 Telegram/Resources/icons/menu/auto_delete_plain.png create mode 100644 Telegram/Resources/icons/menu/auto_delete_plain@2x.png create mode 100644 Telegram/Resources/icons/menu/auto_delete_plain@3x.png create mode 100644 Telegram/Resources/icons/menu/customize.png create mode 100644 Telegram/Resources/icons/menu/customize@2x.png create mode 100644 Telegram/Resources/icons/menu/customize@3x.png create mode 100644 Telegram/Resources/icons/menu/disable.png create mode 100644 Telegram/Resources/icons/menu/disable@2x.png create mode 100644 Telegram/Resources/icons/menu/disable@3x.png create mode 100644 Telegram/SourceFiles/menu/menu_ttl.cpp create mode 100644 Telegram/SourceFiles/menu/menu_ttl.h diff --git a/Telegram/Resources/icons/menu/auto_delete.png b/Telegram/Resources/icons/menu/auto_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..c1fd7790c5939a904f57a4f48ba944d9baccbda5 GIT binary patch literal 661 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf?7ydrV~B;| z(<%E`HztZ4|GPu*sk@?5YCzaz$3KiB%^pHth9^9_HW?a3>C8A|)RE$37$MP9H|3y1 zmyqVW!ms-(?md5d?_JsM_n+o{w!HtjWL~i!fAh!xb_)Yue5^S2v}pHTKNX=142v(W z2+?|Jb#M{ejhr$av1q;NJ7eAz?JTj9wct*PTVK90B4u-A7FU~t;@Py~tx=AaK5D{& z5JM;;a!B<;U%KmWX^=Awo3d!87@! z$y~q0rVBYi2c8xwPvm%M*ITz=zSnKOU1F-y%-3J5cHa$JDRS^#{n{|@3Fn{hKeXFc zuAjM)!HJcLamB;eWxI8*-M(}%rO{hulKUz4nLFdwuMD=A;X9fXxcFkr;lvf)BF&6d z-A6aw&5M6{_uTW(8)P;9w&t77?mxcRN9}iF-rBIuQEMwcCKxP`mYI~W{r1CaTUK*l zww>$ew_MnB@h-dh`XXF`KPR&^AN>52XKn4Ga_{ArJ(pf8cYACp)AzUT{_C#`>g4*} zS0(K9UMjR^>FK9R56#(P kHOFkWkJ|c$`xEM!6!`Z({yyR5b5N4-boFyt=akR{016QlZvX%Q literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/auto_delete@2x.png b/Telegram/Resources/icons/menu/auto_delete@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..72a6c2279691968f07462dd25cb2490e4a61e383 GIT binary patch literal 1273 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NGV@X6oR9Fe^SV<_gQ5e4Fg}F$6 zlyQNDNFte5NF*#wMM9=Rv9l2yv7xZBknEHp#m10KnKqP=BJ&u^JpK=F_xk4hec$!> z|NY%>@!j*i=Xsy=+;iS@&U=nVV|=z{<)>Wg9Zxf`fy{#>Ut(J{}(*cXoCL z1_oSQT!;s933GaST3=spV`C$eUjfY4*0#I5`~Cf$TDrWv#Aj-1s*{rwpT*nTduC=v zr@N)4g^w}F;_2zRwzftMoSmIjR8&}4Sm?cLws&&bHo3swLK4-bb3QiHIy zv$Ip+{NqqBFRzP>3#fT|ddknwH;_L!H@B>;%)~_P)J8C_uC782!WI+9KsD&vx3@R2 zm6w;Rq(TJHNaf|_sia`LO-xLH@b2!;$H#|VBjXDpNplKuBLglAg4uU_dkam|)6??N%lD)v!VR|m$Uqa!f@$8Kq9+1S|l{QRs_gF;$b8VAPwM1&F8 z-rk;RM_HiX5Co`@FKBRZFflQa$=lV{)!*OGv~bGE=E#CI<>uywS!>Gtpt7^GGYaSD z=lm+ZB`hqAqh@PsOYf}4Vog;1MNUA_)zuZyj*gD}=J^&5Vv5tPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS>^+`lQRA>e5T3JX{PZ+*Up_yS&nxRFsfL8cm*h>~kg-D=Q776NugfEglXjB%JZ_z@jkzt`oi!0@Vm71-l zrl6LYn%Vycr@rQ1&pG#;x#zn4x%WZ8GxO~;^UXKkj813ySv+9zfW-qA4_G{4@xYAp zfR(v5TD*Ai%9SgZELpN};lep{<~(@tpufN0+(OO8KQJ)x*s){x?%nI@>G`eyYinz> zwY6mhdwF@ey1KG0GY)oibWBM}X>M-Tx5e_i=x+f+k%FE05@8554Z%pkQ&VH0+0f9?ty{PD z?c0a2p+vb|yLR2Va|d2v`J|<#DWNqBPH1RocXv0d&9`sgGBPse&!5jBZ`rbC7~A3D zVSyn=n1hK1Bp8s9krA?Le0==;`SVcDMAl1}E{%_m-@0|HiF`Q8F)U;ffcExw#CJ|! zGl%Tp!Go+-6%`eT@@7>JyBvhFn}qh_u&&q{c(crn zUn94+w6th8Sx%omO?-26bEOq9R}aoRPoF*|9gv-AAPGk)oS+1zU%!5x%1Ov-@9XOe z=}-gNiJO}n+rfaO%`4%@)F&H*bXD>g(%Uuwa1#4OOG~ z`1m}0_z+UAU%#%Jn2!KEvS1bdUcP*pkBJNw_V?7()E_^72vV+HyC#FIWmjfqCK(nL z6{RI>oeo}WYHA|>U%q@XJ&jhX;p4}T1;JRd2>MFNjNvU>v?xD69~A+z3c&8&yN%Il z)Q@>GHZ~^6E-EV0h^sC-I+}JxG7NSq=YRO{VI*{`R;^M_qKAo-JPAI2{J35p*N3O4 z=iR$^i6;TrbCs8I_Uzds5Ptml5&IjDB3M);+r)VS4H6R*al|Hu1R#|O3JOxLADe}E zcz8$=$|bTa8G^nP3#0AW;){!mH*VZ0iix!5#fulBU80S>y}i_qVDstIC;DUoIm6g9 z!rn~69b*;|J5|88ZQG=*!j6C7 zzyZujRSc2o6TVC~EN9rSU%!ZjwY4?DssKbFDSXr$adMUFm1<`L1~v>yG^q}>v!ldL zOBs^MT__JvZbZw43l|U}MZ4r15o`znDGR|W0QPXXcI{dflng57vyhcj7zFU@)hq7p z9(Njbb#-8ZkfVH)U^LR{wr}4~+Qh`f==G`jK&=MFOt5EsTM)cmjdx0WbcEP)qFxs}&JU31ph)^?LPve>R)(JpW@X3_=H1tCgl{<#PFOI5>_|DwWdk zg2tZb^?E(5S(deJ+jU(*5WWi}isEE4sn_dRUoIC#Q3w=Rz{QM@NzpYMh7pG0Znx8Q z9TOFc#b^uK-)=YR@ueqdqgJa0K_JWWd_KS5@6+it+9DQ<#R7bjfXFGs;c&a%Vo|A7 zKuwaQ&z*qP?RNM3J;r?C)9?5>WTrRd5BvVy2 zpU)>T!cV8uso87-_o+FDsWmzy0+2^T3IFSap zX*3$O+il8M`ofIMGz$w0A0HpDudl1Ct7^46 z;6w&-gSD`*(C72Lyu7@>zx(`Rv)M8-G8phg_Ox0ppq!nZX*8Po`FX;0aBxsrS;>Z> znwlCQ*xlX5UMiI~H#c8hUE$>U`MIN`<4<`aO9q1h=GWKPqobqgT&Yy9tgH}KeSLkQ zjVEvr85tRT>HhwH7@nD#p+h`?H8C;KZnxtc-Xxwvg6UK8r>Cc3cwk_F<4UZA3BD^U zD+`tHN=izqtE*#TVge_7dwa-vyPf6{8b(_G&JD(ySuxTloVkAb#-+?xM%_lcR6m34l84(O<&0z?u@3(|yB<+{7O2~bZ@&-Y~p=0V=n)D!@X zjg19r)$a>WX=&-(+Z!k;C@3J?ILBI5RfQXW>M2ePVeReh1)!y+C0-2CRZxqeYk7G& zE-voZN)TsIvazud8ym|v;b&)Op=)?}m=n1_99s!cMMVYti@uwkoz07+goK2xtu5$6 z6a6Zcej-UpNo#9s4u>PS%KwHQB*@9h33?$Ng^?u z%^(S_6frJ}*Hbvl?REnbUInRRgC}MgM~3nKMI9bJgm?Uyb&6NibUO*#p(|bWDynVg;VFU^hUv2nx&XCBw|ihlp`(8m*0aAzr*k)RzEg9 zhx1$1#fR}Avi@ziLz8zSA){(>gwX+;@Ud;`}_0q z@`T6~B{!u~X)>9XmzRJ3{7F{)0Fte(t@F=WVY{-ja_`S8b$a15BU(IG8&k#3v2EqAY6xxxgSoSYPFhqJxH7M0`S!-s-y z&!0c{_xIl|%52wd@87>q#Rdllx72~B2LuFkcXtcibUNK`DI{pMAt51~hmPqdF}+^D z-B@`_SXkK5(2!6ki;9YNjGIs%;33dz2L=WzD=VE3K#bXJHWGtf{7vSN0BQ-22eDtj zepxJ*h=_cdv>+68&U9a2 zAG>gGZ!ZaVbac2L=D)=V5-A=_| zGXChw2tr;NSD+p7ToplR!4T0^7>!1LGd4EHC_*j4WOHzs{$t0Exj6AW1`#+vKTrLy zUAyKXFT#7&*4D1B1NT0C`ZRxnZb%G95t|YYXm4-#_4Rc1U9f^%X7+&t2hh!+-v5b<$B!TL zF33_($d#U+PPq_lT(Q_d%(*oGU76-tO-)TKLL(z1o=}YS5cm7|@gvmRZVE8CzfO0a z2zSPIg1#a=ce@d7ZEXyFlgZ?!V#RBoJ9m!05iNuZb?ybbFmU_!ZMS-YLx&E1`t%7m zLMc)zmF{JQCqmd961#ZuqPyG6@#DwQ(Bk9c-7Z&DRMeL*Ur4N=pgqRy`+TerLQ*_3<{CHE7=lSt(FbiX0shR zazqN;NFXI81;o%dv8}JKSBUrJ-3GvSKYjX?OE=@=<0_R(3YkW6^7HeT)`5V$b?cTy zM1wd!K0ZA?JzTnh$Jb~y3JLrXfKhki#0g=M43C?K4&+eO)lez8!+HtLeba*fN$Tvy?gf#v5HhID=XvLp!i}EICbjOvuDr9ic5~p zuv)Erbt1A>&f#Kv_Uze~mKKM@v9<|(E$I4^@UD{%fH?+3ole)=+iS5{>~_1+Xhb%O z*fDSEtpWoBrSm*0wSURVkRd~c3>h+HxQKrN77Z!!CJM8000000NkvXXu0mjfAi?4R literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/customize.png b/Telegram/Resources/icons/menu/customize.png new file mode 100644 index 0000000000000000000000000000000000000000..ef86a7a98e55b8487cc587acf807eb5d658776f8 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfY`v$8V~B;| z+u+^n7z0JVN(diIcCrz26iDIf^jb7MLzPQ@LEsODvws?c7SHrk;p&wS$m(!U!4ZeID$7`aXF z+m0p)o|$|y#cX!xq8X>3-Yb1%)qlL$YOdGPNiJclLw8I$nsm@qe}ml9Pd{t+#__j0 z2_+jyEXdn@^G=SLM|1PjqMKP;1)LRF%vN8`GMc&Wy7q(y&q+PUAJ^@d&n$RQVDZ7J zh-+7bj+o4G%ej8@&tHF8(sp>^#UDSUHa%o*IzG#9xqbce`|sTsUldPz8)6~D$HH{W zYN?alwn^drck;^3W~*{6y8fE8X@TCQl!Zs?_Rl~6d_(F7qYc|yjwqs@G;rFI7P-pUg_lqOzyEqb_iTCL<%&Oc20O_MXXR=m*$MWLswpUXO@geCyO C!0Lej literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/customize@2x.png b/Telegram/Resources/icons/menu/customize@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed42cbaac52fd349767ace4ad0d2a75b1ae6ecb GIT binary patch literal 1002 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFR7pfZR9Fe^SW8H1K^X2~4}!3; z2LwUULZPCE#$AO_8yA5Pn2SUZ+SH;|611|7wQkc+a*>-5H&I5E3nfrXqQD?Uaif71 zK@Y1N-TQF|4##umRLVIwxcAKBF!MiWzW<+pW==(g+++k~1Y`tc1WG}mzP^58VIdd{ zX0zE$CbPG3ov_?lqwOTDGxm>QVukZHuw#b-t1BF6ye0&UOZfnm8Bo11L9 zwEgMnX%Z-t$;9{Ma5xBeaBz^%m4xDUyWujKOj4~kG&H=uy+L4cagiz@J`qU+e_LBy zLZ(TwBX&PaZ;y|UcDr53aut;U9njm`+o@a-+uGXjt*NO&ww2ld@c8(+kYxpxae8_> zF)=YbJlxvan$PDsGCG}3rBZ>ozP=7g4)@a`aNXYC{#2|;K&@84yu2W4Uaz;Rst84_ z50e1v>guYov9U-^(!tWw61<{?LLrnN%%iEP39wyWUJ|;|Xq0pUT;tW%)qsci#uwY_ z{r#N`(OF$xw<5bBwby7+XL%LP2JE9d9u+4tSa$;rFBJFt$9 zjyMN^_>*8P;wDL=v$C?n5Sfm}Vj*0l7ei!s1Vh%+(t?8mMTjl^l|IU**=$CwLf{@A z9{4Khbh@jnYhz;r?*%?rkmC3I$x_PuVrL1NCMVLt!2wl(e*J(b6i}ecKnM%K-X`}G zs!PHu6be+X_(bMDJ}@xAx8B^`e1CtBNjsfRK35V7Qs?^m8ZM*JC5S_TD3==FMyMuU*yW{1}mwKA1qSyqt|kP(m(__3u zq$Ddssw;*#F@`g7x4HLv(M;1B=+)Nxoe zNzT|ksO*#L>Dxw7If1T_++2Xx_j)UG2Tk?EMR*%hI(FyWP=%m4kIIA@E{PM`R-OvXCpWpYqci5tDB}yhcKa8FJ zad-3n<}9tHXOkDYM$r!Yk8HoO2xC{hh>eY9Fc__^tx~BpGBR>?b(KIMbeGuN^dA@) zz+f=u=H_#AbGr}Ic|4xCw|7E90$88(#ASPX`*Lh7w~Dk%j#6%wwdF8p2lamz+g;iR6H9tRJU0p4c$;4uDetv#-wh|meq0?u_$9+y- z>n|P~8#CJK>pL4BZa{z;8nU?DW7`_nPuSYZj)S+Vii@2WLPA4NojSE^6iy;(IozF@ z2@DLJsVN4J&dtoY=Tjpi)!vSO`h*km`7RgR_^k5s^6F+4a$Vij%uGgldi?h2D3SO) zJ#&uFZfS0glD>QQPBqIq|43JRyQYp#Ub2UW2Zh2C!&-pc+}yUw$;oo^&$gL8Jw4Gh z!T5NTb7PXHhsQ542Y5?MON`@*#KSbP_eytfZ^IdRQ!#3`Mtnt66^-odY*htz(djd1 zuH@8IR%$+=L_}=LWXLxz3AP9XLOw!FKj6H03&ddEEh%AupQmE6Dq3ow?xm%riHQk4 z=F_K7c{~Ep{0jOA!Tx;GWBfRW$;>2&(P-{S&PxXSu=<>MX^F$Ao=>c-s92LoN@Hc} zcs%~gLUv9Lm!FoFHf{}`Jb*ylR(I|W4i5GulS|X+bh@RbB{x$fqCm934f_emOWk)+ zB{}xPU3sHclbMEsD$#_4Xp5P-GckQ@SCOWwN|KC$Y7DD5|eN zs-~u<^NDsYp!~k_$7IDap)ib_YGG+P{~egns7}kFYHyoZFyHEw362k57G5BBqNh{o z^cS6-xr^T9qDKdE?ci{D_p@h)gaWXmY;Db=ym=VKnANGMs=At#G{4ix)#9o1Rwa_w zs}nX_XqjJ7(Bi||^+O$r&D>jc;u71KWp0O)IEzNScFk$QC>A#;N@2OVxuH;~G?+7r zBoGK5+sDPl4F<wRFHymWLSXoUk`3QsfiyJo@q-$%6N=hIF zt2%^69_v=qAsr8CVMoV_i+8(5H#d{REqDBkNpz8^e3=W5*!dRS<;6wx@awTL@9TLx zuDJZ#E_c{c)YQ}zR^NTYDiia&1uk+w%HGO~AoVrbR>;W6z~;Fhi!rLHso{U|#N+EZ z98gx8V(jCod;FAs*YzCN$a*##?e|>;z$kiU7^9YT@cWI84bGp?f}=ul8}(j!`4EIk zr9ui&!}PGQ%-8Z8z!(#*LGVJM5ZUKtrDZzJC0wXiZbD1rphu*NSlEzg9=WuMp9rS@15Wr>M z>0TeujSCFaja#u-ZYP?Hc6;pB95oVCTDfzv;L zHEaJHmCG-4Pef_WD*k!SK0VDZTSESKjp^Gno7S96F_Pi)z1&i1BX|6NY&{{DuC6h_ZGG&f8A6ziu zM={4FCWh5%pE>q2Y`j%sb#}4q>Z@6~+oKI0B)NSITP@1H=u?fI?D0S&R$*O(2TmbY zCEof;?kiqwJ<#yl{6*!xr$rNY)_~#yV=5*fn$$H1q zHb0bQY20%4&D*lgxzTP#ijqORd#8Clb2^i^{(5lnp}b2>%a)vyUV2zh@apF*o1Cw| zytNL6ZY{aaugf;6aq#36V$D4#{jEE{N8z|^uiN6f{rltAr*Dp&mb%n5tA*v@tpC3@PA#!N`Ipsn W!P9S>?eb56qR7+L&t;ucLK6Uzf8L}3 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/disable@2x.png b/Telegram/Resources/icons/menu/disable@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a514806d1fa6ac94b9a3e769965f384af818da6c GIT binary patch literal 877 zcmV-z1CsoSP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NE*GWV{R9Fe^m_N^9K@`Sco9IX= zZ6hS~5~W6|Q0Vv!NGN?Wh3r!J4kR?1m1q#65V8APXWd-)@66oy-6-xf_uiRvp7YF^ zIcLt?kB_*;9*8~gwH`8bb&mhOi#GmUJ?i?DcxP-Of(qcswo^i=U6i3!nB;gi%3J%aD?AwOU=T*JA8` zzt3i~;c!?e6x_;mGK2tPBEMR#PNN#S?=$wFMwszmUt-SPbYRWl9 z!hIQdenjL1EQBzDp(kYEv(;+J*7H0WL^TR0U%_-_cID7IfF6e zhW_U6qP(G#+QvO(@0ri%jYi{qKBrQt@pueB`)KgHfQuoAq&Xpgj5+BM63U5$QZZ@9 zNx<0{4)^fs;US@)%jMkCo;?Pf1bn;Qx&eI&c`mS9UwU*oDQ?q$=2XJolbK@N6^li^ zun$d)o@}I3g_Cw-1Ulg82wHwE(|U(8$AAUGNO2@qj} zzaw3PgwuOn6fHl=1&t{ZCXPbeZz&Ozm_iHnPw;}bLF|os~xwTrh~{ME?U;em6g2W+DK%IB}s(q z;IJzxlE-$ZdEMkU*K3pEF3Bt6PUqam_ngo7^L>22=lkC$+t0^CRSBvD0DvkU=Sq+; zZXXKLlKh^A(2$VS6@rH|P|r13kTk9r1MuPA-hjEJRsf_jqX5}`i3Csy06>N*1;|KP zYJbL*{&$OG%KTUF3+X6#F#yQU;$2VrN6IZT94*P-+P#CkNIyTnEDgxRM+K4EaPtRU z2i`_$7i!kUP3z;#5U!C~p5H?tGlYURa^hsrB>v1;)BIA&_%`Q$-<>+TeR2bPuTw}G zdq%$0B5Jtpq;tbu`bXIs1%JpU8B+bkWn^sZgq4+*gM)*O&B*BJ==gYc!^Xx&YisMo z#6)dv?e_L|d3kvP04IKDU=VozJfF``NlE!SyW;|&Zk^6nfmg7ub-ZY9P9TxG5OxbT ziP=iGt3wg+N`)$+P>4h#p-#w61(SQXf$B5SC!Dpkw1`AvQ&W?kjaS#!*4FOsu0SAI zTU%qZmD`o|uAZY%Hv0PdHa9nSc6LTa3bCg$Gcy+#7wMdLG5p?^mKL!%4r>t<6qKBt z%x1GYIyzu>8ZNpz+AW5h3z*l=VI}M9>&weOsiv=Rx!iZ}0_=UwD#}n<$_96j2e{WZ zG>Dg$ywdEj*au~0$k4?&!`xs`;v2|cyG5R>if9UjGE>^o%wk1}?+kHK=_gZ~XOQ;j zgBfKOSGxuVJfqaqdL%J8=&NYtGhB~P4#HwED(dQv#zohAlD0p8Mu73>-xqr1hkAk^ zx~-0&v2l2Ae}6w7)-4|_*X5B|HT#B9_*EXL;%V(xG^neo-I6cWC!Yz9ZkzTAlzC)E zD#k?R-4ogs9sku9jDON8b3qVjyClL`t)`4ZW9{ztNxQ=r8LDE(f>@L%DVW`wQOZ3< z4eK`Bxuu*Ab9X2%Mzv7&>rKmL2_aBDxq2$eEWajvQbap8B@bv_Ft$xb3$9r#(rp5d zH}*bdNjbd)IP!i|if1XIIbu4!6i0{!=wbp@hnWv~3^gGutAU(}=QKR4pQUa!B?$S5 zi7;f3#KpuUR*o(vfK(VAoZz@I21=NM49igQlu#HR9xhy2;o;UdHjIpny2oli=)ASE z!4P?Fx!0Ixey#M&eZ~;9s!MkhjFoj-pq)NHAE9?ZjSxR9QRx@t+jephsTA4z%*LVJ_8xDRKyEu&SGt&)23Tf!-T+Ge)+5ryAS$MfXPXGeWh=v9N9PWttq+c^cMRIH}0o!v0`iGk-(vXYMQAPbMhQ zjVjU@kH;GxUY$rq9G>fEB{=?Zv{G{qrCHZ=bc$g>=UrBx$}`D!wnO>*xng~;u<(bI zM4)$Sw{Ju#KQ!rcBG-1e{7Yj~+NHIc|ND+Y&db!0qeNPCMBLqd+rzv0xYj!d-~1bl CzlSOS literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index ebc0cc69f..f88ef925b 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1122,11 +1122,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_manage_history_visibility_hidden_about" = "New members won't see earlier messages."; "lng_manage_history_visibility_hidden_legacy" = "New members won't see more than 100 previous messages."; -"lng_manage_messages_ttl_title" = "Auto-delete messages"; -"lng_manage_messages_ttl_never" = "Off"; -"lng_manage_messages_ttl_after1" = "1 day"; -"lng_manage_messages_ttl_after2" = "1 week"; -"lng_manage_messages_ttl_after3" = "1 month"; +"lng_manage_messages_ttl_title" = "Auto-delete after..."; +"lng_manage_messages_ttl_never" = "Disable"; +"lng_manage_messages_ttl_after1" = "1 hour"; +"lng_manage_messages_ttl_after2" = "1 day"; +"lng_manage_messages_ttl_after3" = "1 week"; +"lng_manage_messages_ttl_after4" = "1 month"; +"lng_manage_messages_ttl_after_custom" = "Custom"; +"lng_manage_messages_ttl_menu" = "Auto-Delete"; "lng_ttl_edit_about" = "Automatically delete new messages after a certain period of time for you and {user}."; "lng_ttl_edit_about_group" = "Automatically delete new messages sent in this chat after a certain period of time."; diff --git a/Telegram/SourceFiles/menu/menu_ttl.cpp b/Telegram/SourceFiles/menu/menu_ttl.cpp new file mode 100644 index 000000000..31ec538e4 --- /dev/null +++ b/Telegram/SourceFiles/menu/menu_ttl.cpp @@ -0,0 +1,217 @@ +/* +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 +*/ +#include "menu/menu_ttl.h" + +#include "lang/lang_keys.h" +#include "ui/boxes/choose_time.h" +#include "ui/layers/generic_box.h" +#include "ui/text/format_values.h" +#include "ui/widgets/labels.h" +#include "ui/widgets/menu/menu_action.h" +#include "ui/widgets/popup_menu.h" +#include "styles/style_chat.h" +#include "styles/style_dialogs.h" // dialogsScamFont +#include "styles/style_menu_icons.h" + +namespace TTLMenu { + +namespace { + +constexpr auto kTTLDurHours1 = crl::time(1); +constexpr auto kTTLDurSeconds1 = kTTLDurHours1 * 3600; +constexpr auto kTTLDurHours2 = crl::time(24); +constexpr auto kTTLDurSeconds2 = kTTLDurHours2 * 3600; +constexpr auto kTTLDurHours3 = crl::time(24 * 7); +constexpr auto kTTLDurSeconds3 = kTTLDurHours3 * 3600; +constexpr auto kTTLDurHours4 = crl::time(24 * 30); +constexpr auto kTTLDurSeconds4 = kTTLDurHours4 * 3600; + +class IconWithText final : public Ui::Menu::Action { +public: + using Ui::Menu::Action::Action; + + void setData(const QString &text, const QPoint &iconPosition); + +protected: + void paintEvent(QPaintEvent *e) override; + +private: + QPoint _iconPosition; + QString _text; + +}; + +void IconWithText::setData(const QString &text, const QPoint &iconPosition) { + _iconPosition = iconPosition; + _text = text; +} + +void IconWithText::paintEvent(QPaintEvent *e) { + Ui::Menu::Action::paintEvent(e); + + Painter p(this); + p.setFont(st::dialogsScamFont); + p.setPen(st::menuIconColor); + p.drawText(_iconPosition, _text); +} + +class TextItem final : public Ui::Menu::ItemBase { +public: + TextItem( + not_null parent, + const style::Menu &st, + rpl::producer &&text); + + not_null action() const override; + bool isEnabled() const override; + +protected: + int contentHeight() const override; + +private: + const base::unique_qptr _label; + const not_null _dummyAction; + +}; + +TextItem::TextItem( + not_null parent, + const style::Menu &st, + rpl::producer &&text) +: ItemBase(parent, st) +, _label(base::make_unique_q( + this, + std::move(text), + st::historyMessagesTTLLabel)) +, _dummyAction(Ui::CreateChild(parent.get())) { + + setAttribute(Qt::WA_TransparentForMouseEvents); + + setMinWidth(st::historyMessagesTTLLabel.minWidth + + st.itemIconPosition.x()); + + sizeValue( + ) | rpl::start_with_next([=](const QSize &s) { + _label->moveToLeft( + st.itemIconPosition.x(), + (s.height() - _label->height()) / 2); + }, lifetime()); + + initResizeHook(parent->sizeValue()); +} + +not_null TextItem::action() const { + return _dummyAction; +} + +bool TextItem::isEnabled() const { + return false; +} + +int TextItem::contentHeight() const { + return _label->height(); +} + +void TTLBox( + not_null box, + Fn callback, + TimeId startTtlPeriod) { + struct State { + int lastSeconds = 0; + }; + const auto startTtl = startTtlPeriod ? startTtlPeriod : kTTLDurSeconds2; + auto chooseTimeResult = ChooseTimeWidget(box, startTtl); + box->addRow(std::move(chooseTimeResult.widget)); + + const auto state = box->lifetime().make_state(); + + box->setTitle(tr::lng_manage_messages_ttl_title()); + + auto confirmText = std::move( + chooseTimeResult.secondsValue + ) | rpl::map([=](int seconds) { + state->lastSeconds = seconds; + return !seconds + ? tr::lng_manage_messages_ttl_never() + : tr::lng_enable_auto_delete(); + }) | rpl::flatten_latest(); + const auto confirm = box->addButton(std::move(confirmText), [=] { + callback(state->lastSeconds); + box->closeBox(); + }); + box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); +} + +} // namespace + +void FillTTLMenu(not_null menu, Args args) { + const auto &st = menu->st().menu; + const auto iconTextPosition = st.itemIconPosition + + st::menuIconTTLAnyTextPosition; + const auto addAction = [&](const QString &text, TimeId ttl) { + auto item = base::make_unique_q( + menu, + st, + Ui::Menu::CreateAction( + menu->menu().get(), + text, + [=] { args.callback(ttl); }), + &st::menuIconTTLAny, + &st::menuIconTTLAny); + item->setData(Ui::FormatTTLTiny(ttl), iconTextPosition); + menu->addAction(std::move(item)); + }; + addAction(tr::lng_manage_messages_ttl_after1(tr::now), kTTLDurSeconds1); + addAction(tr::lng_manage_messages_ttl_after2(tr::now), kTTLDurSeconds2); + addAction(tr::lng_manage_messages_ttl_after3(tr::now), kTTLDurSeconds3); + addAction(tr::lng_manage_messages_ttl_after4(tr::now), kTTLDurSeconds4); + + menu->addAction( + tr::lng_manage_messages_ttl_after_custom(tr::now), + [a = args] { a.show->showBox(Box(TTLBox, a.callback, a.startTtl)); }, + &st::menuIconCustomize); + + if (args.startTtl) { + const auto disable = menu->addAction( + tr::lng_manage_messages_ttl_never(tr::now), + [=] { args.callback(0); }, + &st::menuIconDisableAttention); + disable->setData(st::menuIconAttentionColor->c); + } + + menu->addSeparator(); + + menu->addAction(base::make_unique_q( + menu, + menu->st().menu, + std::move(args.about))); +} + +void SetupTTLMenu( + not_null parent, + rpl::producer<> triggers, + Args args) { + struct State { + base::unique_qptr menu; + }; + const auto state = parent->lifetime().make_state(); + std::move( + triggers + ) | rpl::start_with_next([=] { + if (state->menu) { + return; + } + state->menu = base::make_unique_q( + parent, + st::popupMenuExpandedSeparator); + FillTTLMenu(state->menu.get(), args); + state->menu->popup(QCursor::pos()); + }, parent->lifetime()); +} + +} // namespace TTLMenu diff --git a/Telegram/SourceFiles/menu/menu_ttl.h b/Telegram/SourceFiles/menu/menu_ttl.h new file mode 100644 index 000000000..a1f5e0f78 --- /dev/null +++ b/Telegram/SourceFiles/menu/menu_ttl.h @@ -0,0 +1,32 @@ +/* +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 + +namespace Ui { +class PopupMenu; +class RpWidget; +class Show; +} // namespace Ui + +namespace TTLMenu { + +struct Args { + std::shared_ptr show; + TimeId startTtl; + rpl::producer about; + Fn callback; +}; + +void FillTTLMenu(not_null menu, Args args); + +void SetupTTLMenu( + not_null parent, + rpl::producer<> triggers, + Args args); + +} // namespace TTLMenu diff --git a/Telegram/SourceFiles/ui/chat/chat.style b/Telegram/SourceFiles/ui/chat/chat.style index cec6daac7..6987ada8c 100644 --- a/Telegram/SourceFiles/ui/chat/chat.style +++ b/Telegram/SourceFiles/ui/chat/chat.style @@ -319,6 +319,12 @@ historyMessagesTTL2Icon: icon {{ "chat/input_autodelete_7d", historyComposeIconF historyMessagesTTL2IconOver: icon {{ "chat/input_autodelete_7d", historyComposeIconFgOver }}; historyMessagesTTL3Icon: icon {{ "chat/input_autodelete_30d", historyComposeIconFg }}; historyMessagesTTL3IconOver: icon {{ "chat/input_autodelete_30d", historyComposeIconFgOver }}; +historyMessagesTTLLabel: FlatLabel(defaultFlatLabel) { + minWidth: 200px; + align: align(topleft); + textFg: windowSubTextFg; +} + historyAttachEmojiFgActive: windowBgActive; historyAttachEmojiActive: icon {{ "chat/input_smile_face", historyAttachEmojiFgActive }}; historyAttachEmojiTooltipDelta: 4px; @@ -881,6 +887,13 @@ ttlDividerLabelPadding: margins(22px, 10px, 22px, 19px); ttlItemPadding: margins(0px, 4px, 0px, 4px); ttlItemTimerFont: font(12px); +popupMenuExpandedSeparator: PopupMenu(popupMenuWithIcons) { + menu: Menu(menuWithIcons) { + separatorPadding: margins(0px, 4px, 0px, 4px); + separatorWidth: 6px; + } +} + WhoRead { userpics: GroupCallUserpics; photoLeft: pixels; @@ -904,13 +917,9 @@ defaultWhoRead: WhoRead { iconPosition: point(15px, 7px); itemPadding: margins(44px, 9px, 17px, 7px); } -whoReadMenu: PopupMenu(popupMenuWithIcons) { +whoReadMenu: PopupMenu(popupMenuExpandedSeparator) { scrollPadding: margins(0px, 6px, 0px, 4px); maxHeight: 400px; - menu: Menu(menuWithIcons) { - separatorPadding: margins(0px, 4px, 0px, 4px); - separatorWidth: 6px; - } } whoReadChecks: icon{{ "menu/read_ticks", windowBoldFg }}; whoReadChecksOver: icon{{ "menu/read_ticks", windowBoldFg }}; diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index 2c1a73c37..f2f95e0c8 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -96,6 +96,11 @@ menuIconPorn: icon {{ "menu/porn", menuIconColor }}; menuIconViolence: icon {{ "menu/violence", menuIconColor }}; menuIconMuteFor: icon {{ "menu/mute_for", menuIconColor }}; menuIconSilent: icon {{ "menu/silent", menuIconColor }}; +menuIconCustomize: icon {{ "menu/customize", menuIconColor }}; + +menuIconTTLAny: icon {{ "menu/auto_delete_plain", menuIconColor }}; +menuIconTTLAnyTextPosition: point(11px, 22px); +menuIconTTL: icon {{ "menu/auto_delete", menuIconColor }}; mediaMenuIconStickers: icon {{ "menu/stickers", mediaviewMenuFg }}; mediaMenuIconCancel: icon {{ "menu/cancel", mediaviewMenuFg }}; @@ -112,3 +117,4 @@ menuIconStartStreamWith: icon {{ "menu/start_stream_with", menuIconColor }}; menuIconDeleteAttention: icon {{ "menu/delete", menuIconAttentionColor }}; menuIconLeaveAttention: icon {{ "menu/leave", menuIconAttentionColor }}; +menuIconDisableAttention: icon {{ "menu/disable", menuIconAttentionColor }}; diff --git a/Telegram/SourceFiles/ui/text/format_values.cpp b/Telegram/SourceFiles/ui/text/format_values.cpp index a34cf46b0..01199b248 100644 --- a/Telegram/SourceFiles/ui/text/format_values.cpp +++ b/Telegram/SourceFiles/ui/text/format_values.cpp @@ -384,4 +384,16 @@ QString FormatPhone(const QString &phone) { return Countries::Instance().format({ .phone = phone }).formatted; } +QString FormatTTLTiny(float64 ttl) { + return (ttl <= 3600 * 9) + ? tr::lng_hours_tiny(tr::now, lt_count, std::ceil(ttl / 3600)) + : (ttl <= (86400) * 6) + ? tr::lng_days_tiny(tr::now, lt_count, std::ceil(ttl / (86400))) + : (ttl <= (86400 * 7) * 3) + ? tr::lng_weeks_tiny(tr::now, lt_count, std::ceil(ttl / (86400 * 7))) + : (ttl <= (86400 * 30) * 11) + ? tr::lng_months_tiny({}, lt_count, std::ceil(ttl / (86400 * 30))) + : tr::lng_years_tiny({}, lt_count, std::ceil(ttl / (86400 * 360))); +} + } // namespace Ui diff --git a/Telegram/SourceFiles/ui/text/format_values.h b/Telegram/SourceFiles/ui/text/format_values.h index 56b0d1c78..6f33b9f8b 100644 --- a/Telegram/SourceFiles/ui/text/format_values.h +++ b/Telegram/SourceFiles/ui/text/format_values.h @@ -27,6 +27,7 @@ inline constexpr auto FileStatusSizeFailed = 0x7FFFFFF2; [[nodiscard]] QString FormatPlayedText(qint64 played, qint64 duration); [[nodiscard]] QString FormatImageSizeText(const QSize &size); [[nodiscard]] QString FormatPhone(const QString &phone); +[[nodiscard]] QString FormatTTLTiny(float64 ttl); struct CurrencyRule { const char *international = ""; diff --git a/Telegram/cmake/td_ui.cmake b/Telegram/cmake/td_ui.cmake index 31643282a..eec6b9e76 100644 --- a/Telegram/cmake/td_ui.cmake +++ b/Telegram/cmake/td_ui.cmake @@ -104,6 +104,8 @@ PRIVATE menu/menu_check_item.cpp menu/menu_check_item.h + menu/menu_ttl.cpp + menu/menu_ttl.h passport/ui/passport_details_row.cpp passport/ui/passport_details_row.h