From a4c98450f3a27a11e8bdb9d343f10fbd0b61e282 Mon Sep 17 00:00:00 2001 From: Maxim Stewart Date: Sun, 16 Jun 2019 20:47:15 -0500 Subject: [PATCH] Cleanedup Icon creation --- bin/pytop-0-0-1-x64.deb | Bin 19484 -> 19336 bytes src/debs/pytop-0-0-1-x64/opt/Pytop/PyTop.py | 4 - .../opt/Pytop/resources/PyTop.glade | 218 +++++++++--------- .../pytop-0-0-1-x64/opt/Pytop/utils/Events.py | 10 - .../pytop-0-0-1-x64/opt/Pytop/utils/Grid.py | 42 ++-- .../pytop-0-0-1-x64/opt/Pytop/utils/Icon.py | 72 +++--- src/versions/pytop-0.0.1/Pytop/PyTop.py | 4 - .../pytop-0.0.1/Pytop/resources/PyTop.glade | 218 +++++++++--------- .../pytop-0.0.1/Pytop/utils/Events.py | 10 - src/versions/pytop-0.0.1/Pytop/utils/Grid.py | 42 ++-- src/versions/pytop-0.0.1/Pytop/utils/Icon.py | 72 +++--- 11 files changed, 304 insertions(+), 388 deletions(-) diff --git a/bin/pytop-0-0-1-x64.deb b/bin/pytop-0-0-1-x64.deb index b408fd7e63cec977ff66b38effb360d30c5ccf8d..c21dd689b6ef08906df403592bff99a502a62d2e 100644 GIT binary patch delta 17310 zcmV(Kie`f_L z1)`xu3-cXK65KnM@pk$tL3U|;4NW+GWZOW}ivGRZB+%cw0Dlhi-r-&0WpZS*bFHF@ z@y+KbC=J=W?e__CySp{;lwJeLULRxq^fIHC(|@V+#uLwclFcnC6JfrWB*)EH4t*aU zvFEX=rH!L<(aW29CKQP@TWu0_JWpF9tUV*;&X58O8xz#Wt4RdR35irm||IY2qUvbdMsj*hDEyBRUroSA2?-j-jVTDC>$yf7b4qKABgW>h}1V z(M%It&WoQF5qJSEU)eoxRMJbF-1;5-nWTZ&j^YriNkruP+8$34w(K3g zXbG`clVnl?-h?y|-?>35<^TPkWCs}VT-lmIoqw^2>U^|SqLib}VU_V>z##sTA|-@j4qx zea^iBiqjM22XQiLoY2Aiei~Hqb<%nWjqmqasS)Axq$;d)dTI?`hSa)aWI!EHg%o`8 zm;f8ip2Aeb8pEY-0(>}s>VnWrmJRF-0gUQ!Y)N3Z!1_ryAx@!XMIV-hXLFlO zaC)8uPNXIygXfjg9mq;#FLo(Wv~x~_g*EoKG&DQ^v`9aGBH zB`Oz=e=ox@BvzVmC-A4=l|nl6COr${ZXb;I`1KU-wywN(3a0M}kg0gar0zW@1$-Hg zC^fn`SXPd^#>k1&QrT(#4=eqGUqB`FlIU{6pwr*(TnIS9CygxA<)tRM4&XmhPrl%o ziX)jWrnFR|pgJ^JGUpLu$m=(soz8SmcX5|4f5GbPc`vgt`|xx5f@DV$ zs?d`HqNDOAhwN{g?*Mx}4H%?(8s!!eJ{@g0hxe_YAL!hT4Sj_G;bTV}hY4zt5}&p_ ze|(v;R=81>AF*O!rv4xSptIsxI*oOs9|hw!A=u7gy9*DNUm8Dk$JF!82z&QvU~bR_ z(Pc=hThFd)*$Teb9anIr_d}Y|`-s)9cM*EguMEOu0dX?wx`&I%jBM`~ITjFnZ`jFM z(1!hF{I+W7wBLxS8vWGCvFXQPmmTVK1K8h$!wsSITfJ4O&{~ z1fQKx);~!61wxEov!faTCj;;v3XuY*o99FbMts1)i)bvz)Oep!) z`Y5#!wON>#>`5Oem*d$rz~I4ke+lqeOBl60qMqCTFBqtTwDizoIxh+2+*a+q&#KQM z)|~@DkMKAP(Qx1BuHPESz>m=pQgN5ICr6D+xZ0vG%)PUNy|;CEy(SHBebT=biMfAeowUPpGX z%~>36lwgM>HmOR%l(Z>frR}w%AgX1w^IFQLqXc|5=;;^PtMpkwp<)mLnM!-PIB%ot z#mrJmq)OI^iKldO=h(Pm+BDbP=xx=(AVe4NSqBc8JNm>Dz?H6O6 zq^_vpD7EVTEPg+)VavU6p`9 z!SxXyAR=@+a%Q!l*u6(7)y}bbV0FYK@81eJ(-o!j3gy!!sweX_1{)R7U6+5TDZPxP ztY)PW&YoI}S0$~c*Y;H)SET%;m0eaFOJmOyHK)D4ANO4!y`g2we>qx#ps5>#6uen? zA3!L4R$7fyV{|dfdv~IFAnh?dke}Z@8AOQ|q>tnDoeo%dU%&+jgrXDaqb=Bu&+lVk zK|n1B;*-{v;D;8-BvDFm&|M5}mOX8Z5_Z_vgLlrcSVF2u>3+bmO{(py>^EjS#RYZF z^IOKxaG&8d4uJLvf0`OVZQ@$9*+SrnMD^hpY76p}@yYo~zNpGlhYo9n{3Mv{arrcl zYM&+r_7U4!HZ!Oa4WsAJNXQi~O?9T^jv_Y|;zaVOI|uasdDyc=Y<;&FIXj0XQK36GfoK61C(REeubpz_fgL$~>nZ zo?3=L0AIRV-+i>q%C)B_~F@wroAmer+E-W)#o%WL=blWReraP_6rL}td20r zflm}oD$t4JAo3L=8uUU!WuXMZUZ&RZ@o&q!*|7bLe{$zRS8~5@QDb;!)UPZ6gWjR% zfW4YT#$k{wIo_9Vz|eXQ6_VtChTmP4hGBivp0ej%=+jnWEi04QR=sse@ zLs`r!@OtH1@`)2pKGa0bsG$niT#+*z zf8L0h;0TtjDwHb*(P8a582N)$UxLi|734_Az-~U?_K%7Qk070{X&(5B>_A4z;WIU6 zD${O|k-|vSh|GiY3ZYg8I$F@6r_R-~jHj9;sjCmkE*clnSwhLLSp-4B9$OWBsfr-{ z%7`g;9q2y1L9}DuV5tIz+wfVRj#N& z(ChxHx_bkV2;jRkJh4`jPG^qxX8?688?ZaST za)`6H=$R+w@&)Y9C;snQ1%RTZe~9&aV3BUn&sWubHdsIr`Iuo}`mQ#NQ@wh~c6B?s; z28y(*@~gYZz`N>9I}zjd)p&M!Gmq(y8uZ+jgwT=*ZJ|-n4GSy;GoM1hf6e`!@Rv>X znKtZ}q^PKVjXrzz{EPZFe69GLONES*a>!UN=CIe_s6<5nN#O|@<|~D`ix=Yx6w!Gw zYLk<@tBRFRkTqf$_776wf|IF85v^-bsKbdIg|d>S{((xc9WT7mBCYJ?RM>=QDt%+n zNi%1caZNlzn$D4gYVEE2e|+z-vc))VqZ4^%Q^4v2`Mhy}z?sJudb&q$5if678qCh9 z9MD@qY(5x*yfQ%ZvmwWWz4On$8OjN^F(;Q!C#Fp6eRg>nxtKbWng;`G z&Q!C0)Jgd1EVVstPh>{M$EBbVY2cd6fzTra(=z$^ukX*LVda!Zf50v>i&4*n{2__? z$5dMR6|@aZ^y2Be7)(y>%9NBO+%EQpe~kVP=|d~TN*R~S*Y1t6`#D2{{4g>zm_6=( zU}rBJD76`!iu7ZG(><$B*wFh2vgXEQF0O@O7a>gKR>1X?r!hI6{&qm>$RoPNuiqZy zn$HV>U7<}qZa6q@f29YOw?!OhlG#D!5kQ!u95##$_o7tfJIAsGDJQoIeFZb^!d77~ ziD#@Q*#iGB*3HoMdQ!N0^U2?Te?Bor#j#|};VXrPZ0qx6957t&vG2KPhiQ^*Y)Qn@ z?fO{9AdVCzhj+$d;{{Be1&8|T06+)OzK%Cvo+#DJv3nLif7dd;vSe!Gmrq2YjfW(` zL#=7UZ4mOYJA=&Aa>WV|Sd&@c-Pt>{`ovjkDn^SPu%fky4 zNJ}Lp89hF<+b7N^*M0GWToONtfAjwR(hbeEC1Rx^z@bltFPQpZYwgO5=@8Jt2J#GW zQB`&{0!5~ke^1@iu@Mh-dZa){{?{3%2|9`rG zclRYQqbydQlx}0E4ut{;&>~?+=am-brp(;ogZY_FHj(2MJg!K=!L5s6ZN)ClU z7^{pU{^)%Tq~;8Akdlh6`5{R?M$hOwcx%|m9k!AwJW11H0A^mf9@yr9p7}9mmKoB} z&nzZoe`#bvoKG`9f}typoc%!Hy&Grue0m@91(qW=fptMr>GI457<}lcSB$Y9zdX&y zop@#bQm>WvKUmO}l=MFuP#9D0P;m`lP=i`n4?ey5UV;^E9NE}tc@+M5G+m$lLliuw zqlJv~NI(f5@0T_-%BExSX=U@8UYsO7RUd%Rf6xz1e5>f}F!ty_Ah!RfL&=KYbwEWz zatq>GJ#CCbWVpg!_h5g*H7cKw+DmQ zq8nOy7f6fAxV%9N9G1_sa{IdH?teCN(>4LuBD{f#osz`6ej(DIgu)v6mEVNIo8+sJ ze@!>@$07cFp)5Cj>V=f1lyU;G%~*wUgUSz&gfe-#stvsOqkClAn&bS;4#B?Cl^kx7ilJ_|Zn#3!6e9tZ5EzQ$x#VsF9eVXm0uK_2w=dwNlbxbv`H^2p>NmOe z5ZF)oDk5O(Gq@x!s=ZEojBW@pQRTB2f0o{+7Oy2K9}QaTqxHAi4w(}ChMo}V-6fo3 zU*j`?GbBg`VE6W=7{M-I#UcNI<=toCu*9OdPaLSMfn!J`?|hiGWO1Tx1h3OMaooMD z)okU~+NKEpPif{#EaMsGEM|;dQLFPnOa9*wO9R}Eusg(#qtxC2`u&JE|#e;0pi zIDnc(I$v1-=BX;71$PMCg(bD807wVxj#qC1tT0l%reYdF@G*Mru+mW> zb$qG5Cr@yp!AY>9Ftf*;cHKIParvTlE2xUlD>0Xi962`U^ld?2FkJWPfp2S;6CM>C z;DnT7sdr&QUuC*32YbJVleraOe|5PkS+%@VZ^Qn_*h$mS76~Re+l$}m3%$^|zAw~u zQz^~q1D>(;EwvfkEKCroX}ToL#?cd<(XQCt@kn}T@@+(rO^e#zKF0+0aKbJYr^dyH6-yW$%f0ndm`2t%W ze~Xky6Yj{@uA&-JF-VYGzaJ7#32lm83hZNgM|6y02rNDPpTsu#@wVX=Nash3ld|hk zRWCi;;iR9k0fw{J>FCa_1Xi+KRir=l(U!jDJ1zT@xifr_Uz@7zV?Q_ekbzF#n&YWrr z&PRvF66x9MkB8*w0N8OZDs(oZ2}~%FlJHS_Q(Sp$t z;cznTm%FLaX5oEcj-fc*s#|2hTFfuU?WY%?K$hFl9xM$qdZc*e4KITlkB94yP(hJ| z2euXMY`ycfegYmMf8iJdmI4FI&}GVxF9(@&uh|*n)Sx^Lr*a8rq!-#69IdA8$vk$Zq z0$EHaDY-ETIpZNb_WGQu`a2Zeg#mc{DI*wpB!Daj+V<&_f4z4V@#B%H_j(3zkVT=G zblKL>6(a_YJP1Sb=Pim?%Pm8WTzV=l{xdW(t>re~vu^_OxDr71Xeu>I&hceT#ZzHe zz!U~Ha8QSsHK^yndCK7B-+JiFp(N{xCq=>5AEiJ0BzDjsglh6?#|xL1|3(DWN3KD{ z!lM-~Oid2kf4`6zBy|See&g`MsN{VbRZ~fnv+{@gS(H)g$Qc@B|FLlb?nXlY5^EoG zecoN2#9q-ae5d6f$C9wEOCbNLWTJ86Hp&k1@y(!~V0O~63#wJ@9B>wL4%0x$S{SA# z;hW8lWuQcC3bq*_nddbxBK0b}OE2KIF2Hxz-oJxAe!Mt5nlF?z#}#SvGJp%Z@s&#Q}vB{3yy8G0Z)&Bd8m$R9{gPS0)%HBanqtv9_&>a zXGIG_=}jgTUQvu^pijzmD3fm0ucK8!zlpHq>UEFSdV5Ep>Op#Uamau)vQ_)q2q}8X z-cdyfe+o+Bv5Ef&wwD1zW}qX;)8$#)PSvt%EAF95HW<~JjsFJxs9|Z|VZOeSt=KNpSPcMq~7&TvKVnrM<>tW@4 z1h-x3{Svi>xyKjU#TQf%z_`f)ch;7#&HnO@e=L*UF$dJ)@mGC;V^DeurQRApB@Xq5 zXN|5JNu~ap&{Ej20x(suj{{nn8*6}SG?tJ)iCXPll2X&h9B*%3eG$+DFyQpl1Z+FO zA4gZoXp?cAu>BEAKpHa3WcvrSmlfc2f0pO`p0gmSi*uA9YEy?v#mw{T!Wcp|^|rW} zfAei{_{Sg#1yoAyE2vEifsVZp{M!I<_hZh@Iv9N2?05gkycg!#Ro^qs=$ogHA?*{_rY7b6h=Q4S5p8sBDq$8-4FckVqmbw-<#E zpu)2j#I5)KhZk~IZUw@JhZ=!hX%s-0e>Gb$l=bG`kmrASG~&Ygm}N6WcLgSehK?Rm z4mDqYHkiL$LWD{!sl-O7>}=8T*s2=|8+60e|oZsBCW+Icc;(B^in#385^BmYv!5|y`G|kB@NXQps!Q8@g@GkBdNuTWK5sXsR{?>*EvuA-nX;W1Sf3GqEoMF(B~ze}jP}aJm+V z66f<~*dWPCVF=&dPEUjva}*j@5O=R85si8RaI=F)X~nRx{kIOU&L1rM&2FG=aF+(_ zA)Yx42ZHcEH!YiG5nF2Z>EGX+-mC3ct{eMLCkfKnNesa)2sD?YAv!LrOUMwsm zM^88yM)D)~Q+4n2GW7J9e|rI6=6*0oU7W$qmqGMzAF9^Vt`+ncQXKGIHk__Xx6&KkN>1FZY;gvS6=1Mr<+!IT~D9o#IrYZcIn8ca`Y!aBV3vOZq#K9`y zy8CdRyJi29;p~kGx8|rY9=wO?TJ4KE~ShQqzf9%2G;&V3~`344+H4JxlR(MOhn5Hi8%Ux|J3)`sLt4hF97KxPl}XFkNvQg)|Jw zM`r?X@fXLezzB6w&Kdb)=I!ky(jXG+eJJnlC{>Lu&fI;Ue-9wf1Tr z%QDe-F7t`z&3d)P6mqq&VaWSe#uBt78zPBg>$U zeKA9C;Lf#hf3%7OyHg_ZZ`;*yWBBn7tQ4^<6*zIJ@jY7mKNwRl!tCBw9H|*O<~p|V zf!Z)l9enhfT$_HB0A>xDD`cuExb0j#>~C1VC=R^K)AlNw_9uTt$zdcPz2nWRLY zhS{(LOKpkYE4Crx^y~9E_Xib2jvWm}PAg_rFX*1knRbmMXM2lPy61{97;DWRYL$c{ z)U>5ff5Q-Jk)c2R%ExPK4gloiRj3MjwzlJRRgO)|uVCzNh1$S`U~7D{yKUSKx&NVo zGGo^#n&d}p;6l*vB*O}&)^dv$umMOS3?C0Ulg{hGo!Z!kJR{``n`s}b3zHnlI+zwW z1K2~=g}eYCPj1JS_CRdzfESrbexWsQFGB&xe_q3N@Wn2p#kn2Rm2Gou4$f0o8l|hd z*>zqk@&h6JXj#+xVtZdMDQ<7kKSLT-WD6v%sB(UhgxCa3qrwdn#;cgxhy;w+ZmP$) zDRFZsDhWm6%Xv-~7K^Pd{u`Eww%u{ESlTjKcc#>xZ^NQr3N2Mv%YQU4P@)PNv*V-7 zfAY#}DA2IXuEWS56KFpDVvW8U#aA@d-!DuWvQpYfLyeF&IK2f1AyX zKDJfe%4b-Khx4-~=$s&D)$@ROAi<_QEpQkfy#A>tulre+B!YbyhJ1tf5@|LyQPAR& z8Zn^P?jhFd8k_{Bz;ioQ)@hd~nA+x&3Lia44bhy)xtEbGdnDIv_;}>P7d`=~GAWyS zX=Bj2Lh57kkc95570e~+JiV>!oK*O3oL6CiFesi1okuC%M?Rt} zH0Tq~2$f&~c`#`;r9~eP(1G*RDmol-wZN7g!|7h3VhGTG4#n*t?kCz19K!MX`d|3P zEaoMde$dJLiVg^DNLY4B+k+>`Ri6jZS@V|PxiSpH`!H_81>acBe>*?wXFFkb+Qw6y zmm#7u_`oRRn3R-E?&~~^U@KE1%xV0))24;xlVr4rsDYRM`(MuehjC&>HRFsYwJevo z2&=3i65BVGp|{-~@E+j|so_stN15I1W0qC@MfpgocDgapz3StIhXXdy?1f=q&7}4b z52aLN)7EaOJK{=Oe^X6k+k|+XM|B%jXi!M|IJL|#iKj?97P(%Chq1$&-;EKwqE|Id zIoVU)!!d$iGJYTx+SFpM{FUnf2SSQHjk1^7f~#*>GemX<(m0MaKIQva2>4R-ABim7 z-z6R;5ge&dE6J?u7FXA?t$xsk<60nGWYBplkRcd9qD_*re{M|p0{JnO0OP#eca)z< zIM&jn{RnpLvghv5iaX$nsFAv4aIB&z*Lm{IO)c=U8tNJ}wy@yqr8=P=T z_KCnf9;oHlvrEStGyv-_z(Htjg;3{P zq=q#f0j<^Uk;Q>EF!hEA`9e!W9-ThNRX|7N!8%hiDduMy)kcI#wdUKW&2|2KokIi- zU(X@Abx5>;yuN*c+;nB9n_3y~2Ya@tF83TZT+~j4f5-=88u;hyo`a&&q|-Ji-^-<) zN^1X|jj6f_Rp!g>II8m~^KfK+{rwZ<=9W7xjQzYSH}TwVzf*KB^uQG=ErZSn^%~!J zPkoOC4F;J6(mSe;s$eH*38iQZWtAv>Htk387K#A8OwA@+bEjbuy)^!2D;N>emLIoI zbWXK0e*|iJY~eM-Uc}RVafwdtY#D}B=S=mW{N$0;oJeh*aZQ#f%>FWCt?CpSu%xvF zC8Or@0&C_}RwQzX`cl_@0VcER-ZP0WlX+hGQ6UOuws5LGQRfISpuwX$q5yg6ElIdLIBDB@fASl$e&i?J>~9eGJui^-@L3sn&{2<8 z>{WraXq6BOt^~b48EZ2EgJE2LH!SXCF z<{q8p%lpVulJKlhbbK_(vv}&8ZCkp^=zif^90RUh1K3jvfEEe=MT}MJB)yp)ZcQYb zf4@eWQD*~Igi#wG9t>DyH69~$=(pWB#Pq1I_$rMnI9SCYQKjX$FFCAyim)I#j9SP` zx$5$rUL3{zYQNBod%X*>L$j@))!AI#`lO5^HP?Ko!p`QMy~4aw z`xAb>fiNKMm>l-BOYPJm8n*Rr?Q>0*=RO0i&94IhR9A$C3Jrm>iJ$&+%-q{V;w@yU zw8_pF;IWc$=3PgysXyd)yfpPW=jX?-KgiSe!tU8uv8_`)KM@;O2&6y_f4Su8^@u@}5WVl&Z6VMlWi6_Y$Y+@v+s_A0};#qaKo;>nPOfZfeN zcI2@oDqgK9yI^2!6- zW&zOptqV-4SmlzezKOR@e>;^KcDF<`6I@T2TBs@NIKYm4$ygJB-UH((AUi{+HhW+d zrrNQq5Ln(%&iZXDrf8vZ*r;HH*3PrPbfI!QReSP!c>C|FWTa*PnjdELSVR;1(x^GG zp?aM2SFE1B)Sn^}7Gwa?+*&- z_!LC|Tu$n@Z-zqXnDNaRR^C3UQ+y2G=V=BbF;&_V6oz`9E{i(4{W0LA*p1Cwoenhk zK_t_C8SFP2WC)XsPBXYQD(UoU&E@r0vi77AKna}NbnG<_T$bvWswbF0oz&=-fY|Zy z9O^ilDAa4wg#B9!prsgSgrc6AEBImw2J6kAwWz+esPs@U2W!=vaw6O~i-kNq7RS{O9+fKo={sC_LemZVJ!7#@pB*-+KM}*^MR2p0tOfBTtzh0@nuy|SUr2x zq1PrF{sW8Z!?`JvLwr-DBde`g&CNf8SAb|-h=T?r6q=(4w2k?8FaHSCAXGQ@C6yklP4Lq5q>R6a z-|P*PVIkhfK^Etr zQgV;gU=3X*(NXp!8xMI%@HQ(C;S|9hV-!T>#Cw;s&3qqlm7CeL`g{lfl3VXMM(xX{ z-LK9{G_wJ%x@Kn=XPl0c<~-}Xr4_z;P8bzA*YtUAP8tCS2(B^{H-(F)B``mU3kKGg$}=kuiqJE(xI7f* zN5YJckM|Nc74DSGV-&-PTTu`eQqQ17g)iz+f6+GPm4^l+5Gn`JS6BGj%4sOb!DKSw z1J26#XgRhmv$?$?Su8X55SmTcnqrQBJhno5TT5$?kJbSuf6+F}wxQ9G~$ZMx~e`!zFTifa#@a)TLe7 zf7KLet;n-smYDFDVb;{2|4=KvMq)t14pHkdX9Axxjm&Z{3v=WDfz-h#R2rc98$2{U z-=g>@Y|o(=h|yeO#pW(j;XljN#v;ZAA07kY)-8iX?=nK^mw6{nt;P3gxh&1M(}X$h zSGbo?QBu_;br^1`%-l!szp-N|->Gf9_L@(aHcVj4uzgvRwoj-R66|SMUWoD_U9r9h`|6&|c|7Rv*wo3-$!`S3WJ5nptwjBhuy6 zS0VHR{PT3n3mB8^_#t0z$+!F3xy=3Rm?Q;=hSTbugJL6(nO>bI23w^bf9B1Wy`&Pt zOK1kb@>K8>J$D5wP3w&fv*Rbubi`yxaOo>hy-FwuL>EyKLPPn9JvNW$x&LuSnD!r@ z;YODFW1O9T2>xwVT4xp5BpJY=Py}s%xjz57syK3pbl5fIg~hD@ifwEMbXFQGl$+3~ z26HM@J*AsDjirjPX&JNK`8hwyKg$97Fy7ZbtDAc z?gb-wqLiXJ@0m9=V1nXgYnFeUQ`S48K5ohMN!aJN8jtF;eTHEAeunPGmh5OOl7Qzk+DYPm+ki%BY(qTaP&J%W&@AkUnw$_^O>TDhdu z8zs*4=qU_cv+0Lw#`p~vqpIh}xWv7-7qxVBoJX;md2cDr;;5AfE>AHU)c@|Tw#$I% zYyvVzXdC1@MkbA4fB9}++T@XnHv*S;t^z;FsIe;XTK)AQ)ZA*l`qAIcwR~tY;L+(n zphK1ZC+&f_V{2Zp+w>Dvk#ASI-#lBP;3*~6mx)39WA^6J+=B#d1{&$Q+0GhqY&qVX zQ1)zjP6Q?({f^!5zW^uXA#||N$Z{irDGEKq)nIeOh(@-1#_Plq z1n;H1vMr52$dFP!$Q^LB-Hpls6TRiZML23#d72KIiNN0YLFo z^ZTw8L0~2hRygsxX!6ntJ&dwR&b2kyAQi8-xo2p3{?Pn$ogGgcF6%MQQU;D#l7|+u z-wO1tVrePve?0Sk9fI0CLgg}C+2T7%(eH>71X)?@=v+4_Cn?7Ocf@gx#fpG>kZ}K9 z^$zc*UO|mD;YHC}Ndt519t8kd>51IvKDG^cKyKIInssiThUxtnT2(MX+4N%wmQR2z z{-j&^VvaycM-?Dc%lt;uUJF#K95;$D7#I_0YOa7Me{-@nSA4`mOa#FZ*{TnezD2hJ z@k%5(<6kGc{&%W2O$I651b0XH68voTVsbfgpF9~})TJl+Ild2g%S)b_@?mMm6XtrM z$k#*yd>aVae)&U@+>0woMDOks_SHS>on8NDAjeRCt3zd^3D{xJ3?KYT8F{rpVIK4d zRG^4ge>6nxrONjQ*GSTjBT>9B`iz{NS;US^>qHgADQ!B8d%ltLOHpJmGVxSfF->VD z{t-1M{=+#!Ldhri#sKV*6TsWCQ$apO?qfuWdQ!h|d~ye0$8vNpv|v-;(9Ax;;Bw)^ z0a7WbrU|rDy1xmqF_6Ww5FW)Z*Y9%&y_D6-e+S2-_SuYQ|8_r#VUv^hXUT1>S}J^0 zQ_45R+?-mFz1$dZ+9=sU!kdVBvR$3;f&B>~89tf;GIt=a@`hBb)h97(J+~iBe&0eK zKWYcNv_A0r``U0T@ERne=UaB_WIOa*XI^^<@b;-33@aqwa8#RY4BHC7SANyYH<5%j ze_5_K0ki7!HteB2gI^I+y{o7r4?Y(|+@$GbUiTCFatbIBBeAcmYG<>GCpS(jRl?#% z&THmIkJO!+{|g+yN($A7l58v`4L+!^ZmTYqMux#@8=FTj!EGh-qC_$`aDbs-tIRTU z;3?Q1N_EJYWkDnEMm(8LkwXr=1s1$rf0z>&f??u)Pz~h`^23$;I-W2b_QYF5#F?9o z)GJUW%Eep!In^`Hkn9S+T)$p?183YHlj~yjh(X%IpQ*KTI;^x`4nR6a5vW2 zhEVLn1+b59RlC_vqF8I;Pyr$n>PA1Clkh<>5}DiTvU@M>pSNm-II743w{Bsof2|+D z=hO8_fCJWY${f4DmE)X(0V1}GnWmS*>n3Q1_y)7%TtzW1+oK#qtq zj=f8#^MU;B(dczUQ*&S?p3PF){E0-`x)kQLq#KuWiok{ubYdy0ha-qBY6)6dz1mUG#khObe=T`VxkB;` z&q(Wk?27z&UPM`qX!j-xJ(D$+=Cc6^0z&@AB=!5U$TfFk3Vt={Vc%I5@Zu9LOSHm} zXw<=J-%^mNH&3LrIB&&QtcuFZ5(_MV#7%V`NKT#p<1mkW0_M&_7^2(k53EKOD{fC$ z;ZgNVONFs4JL_vAHXv#*f16lwgJ%6O?HNZsNV!d@&2&%&sZ+_D!&(zMKu{9V8@}k^ zQ&4Dm2rZDUY-s?1D(MlgrV7!&dmXu?FxW`jWmUT`^+210-R2RPrOW9EBvb7ygjUW~ zARKv7;^}kRWyM*Xbg7PbCx^5LLWFPfOW9(;3rjTPEN;Yq0acn3e~i?`J3dD;X}5h1 zGmFncNz1-^m*XaakxMECcqvRs6P?C~9<=s^ehh}v@1^56gWzxcF@L>_4Ww0<0uA3h z47@fJtyDbm26-5!G4zG(*FCh)YT`_hitI|2C|>$N${DdlJ|m`ij~ZX6=gj#bT^8$C zA_Q%si=Kxe7k)+yf9B^;)VTf-{}6iwCGrWi7?yQNdXy$8-Qa$SX@-CW|Xy=UJYvU z))3q|au>b`BB%y|84Piu2(EDR+^YO8S38O5+Ss53n~SLhAUVaXwH+g>f9~0fN)_Zd zXI}C`cI2qrMh@-vk+%@GKjH2iirIBHNh;nvNefF!*~1n=Gu~A}DWkwv5NwAS$-G{? zA0CKnijG`Je=ArGwy$=vBds9=G?`gzS%x@?JgUfBn=WR$(RU3z$iNCJc6JSf$JV?{ z62{Kh7DyL_{pIdTZ;XY<^B`Q$ETvTy(?78~c`5yNfqg+beEnXXH0OT^dcec&5Z^o% znGn#hfBjz8iZkehEckLvzPOzEvG3!8L2sr_#RbG|fAXzZa?c#Wxj)kgbshX8BNtSF zQ;@R{*`QVJlD*J1b!ifaNpX6NEflSv7|DWGUwAV*l(lm;Nv5KX?dN|AGJ#MtP+wET z>QH2hkKuC;tZj4-k7PV1gj-!;p9N=4Mb@p9fmf4?ErJ)PEi9NxJ~gmT5`EV}1L2_@ z4y6&;f8OA8Uim~;ZctN0i3*;-I@Y$Ep?GXEIQQoDE=fUSD&+_NieZI*9aqU+Zkr@ zu0feUqMRO%0_4ZfM$fmn<#<$%*9^`AXp3Wce?lU3q3Di0bfRanh|4}oy@hv+J3vmo z!38AT#W45j_bQ-(xT+7WsLk4m6BXOXC+b_xFGF4dcIlhh9nqMx{y%R>A;Wy3%Fcr+ z8=tGHlzt=04!ff;T^>orre1GgOn2wdF^l&hy?y8+4NEZeX-<{Vvf6}bi7laEt0&<^>X@HY-Z<6btb zToOKfxp7r2nh-X)%?rpH;GlVEHT*gLT~n+6!L-06ZMC(GLv?I$Sv2WNFJcOyGqEo% zZO07{Y9G&&hk;2|{*nkwe?&pXAvuKIe^v0m>Pk*_Qc)H~0M30G9C5cX!ojfp7B12* zGaq8Eg58NWod1!h z!CaZEhLNP@zIGmo);ugk^E_5u&L<|~4TY{EP5g)R;{ewVOf0=g1 z^yuQE5S$jTt!2vtg^-7@O~MMtErPq%vC$LT>^hxtMIp6>`MuYf!ozPiRILNC#dn4) z$O6edBn-q4*9N;jl}ra;yF$VlK7Ztbi_>as-wR8ju{rlCpdfxQy~hTHK0MisO(cZ{ zdPLmLcuO^g`nE%KOQxAjT@K>$e}@bH{VmMNI&kUWofJX;a>|0CN43)g+0ZxVYe4Po zVjH^Y%-s#9+?_nqQC@V>fbwKE9P?Q_Sx`{W$gB3(Sjx~{CPMIPwV?0`RPA3?8-b9} zYn|3hB`3cop$PhVvE$TFCDi+i2l{CWedyErUFEnrb9>%J)YXg;A-jB(e+R94kt`|y zH_&sKKw2+e_e}Z%^;VKCyD(T06FO~$b)d?k9-y_6B4*2gxJ#7?J$wa8UpgKJq}POT zeG4a>C-)tH44$rA!y!31p3HOuu>)!ng@MZc4AF``D&t{fMikB zyyqPBr}Ch|YLZJh-Y{{^j*iKRS>cC|-1hc@_H2=4ThZ`b3#Sg7^j$tg@#dhf?bNZB ze=j=qTQMU~B^`mrY|3aIiJ$Zh&oe@aWecZ_o1o_eNiSvekOFC;e<_(}R}VhXdD@*l7kzJhD*lQtAI3Qe!!asI5X+R5e#ve9=jW}6Arwvv@Q~!$gn4% znfh@DaXu)L-){Ow58_s1^WBNX{j(E41sFzMCIzPX{{18^EQ$UPp;UJ?5{f^@hil30EW(5i@+j zy_ALk77ws2J1q{;(5JEx)VweR$9!plVFBPK1;%Rk*&_GeBg^yece&R$^IdGYIh=@2^{aM> zK&jJa;s-)Pe}Y0^OI$xx1;V4?vk#eD+?~_Q;gLwYg?_`^tI?Deg(4<1RoUC8)2?HC zVYfOPAc>_}OwQab#FIDs4dgZOgv*`LL39cJCg6w*qy0Jm-{o@d)dbh^aRyJUy^R$F7SeqxEw>t7eceEZllPI*D!W?7`T zp4RGdf8N5R{tjdL&rODclVIL01{(zDg~Lz5h+`JtlEqC^F5jft-@_AHKHro`8ZN;y z!Y|p9?XAX|4Ryw`0L+HjlkK4lNt}b*Xf#r)q^hCEHNoq^DZCIEvC1IVoEB3n#^hD% zLhWoXlS(?(RotG4z47SZDg`A+z}QRIY$i;Tf8bC72|TM?@9!tnud2@;@d5!i&yk}8 ziY?otB-@)Y=*h?1BJ^dF$#Ps4UoZ91#S~&+Ul&gRKhkHd{9%TtG!N~xu*U1<0eJ(4 z{1iT?_RZq?I(zz#>ia{lCyT+FyHWbVA07V)e*Im5GbLp-f|?#QT%Vq--kI;5O>&Ac z4ZM|N&VSD*;eM?dT9O$HkY!2fO9U&yG8a+Zpd}9JAAk?(V=r&1ED9lKp`uXf&L+yz zsWa# z*#&#ZA`kBa{CF@&L87yHK!T1C2FxK}ZPyJp=V&|}BPWy~A|y%<&onAEN20L$85nB- zE?#Zu&e3*v=Jqob#j6VUH~*q53k^a?FIlq)R79(&hIF7ypel+hAeKrsGR~oyV$MX_ zF@H&Yx8O;!-lrUlrmBt8>O@XS-_Ce-{1?*0^7{rvWX|cTZ!ek+oe?US$Xr?;wx8m8a|en3}?$; znwy~(Rv_=|h1Hh^R#j( zlxuQQW_e{6=_x@$H-xK3c>c(}8>xJ1gT~}x&O_4Z_uL(#&;r?*@|QK)pthL29DmqD z57`B#IL+#om%MpB5T-l!PMl?*|0`9RUzVUHirvJ&n_R#hdt$dgjYM-{1L$lhJQR-~4nRTQ^2I|R zZ=J$8R#T4oNs$gg9q8P)G1tDG$A83qv!qs`p;M!US6jTHE&NY~(!xmZC+8E3RdB-0 z+Rn_)l_GuVJU`=Tv(ZyDy!*}TSFTSim+ra zIO!KZ=phNZ)t}qrE=c{Yorc)7IQKgB?UNWwZw|YGi820h8BSh#8(Wrc#6b4{BB#9E zlHvDggLvXy=8OZ`ih%LFdY@RQeH&p#007#FKie`L0^ zb!bU^wF>it=5W5B=31OKeMY73kUojirmZ0oI*}{G4#9sq3@t}@cn@CVoy5V*=wG=AdC`8YvP+T{-!ONaa zXua}C0?n8J3MXAntX@Ft!JrN z8hn2@c2$(040@S_9yVlw1{0=ha)NI+T!PR+Uui$a5MkjL4X$LL5DK!ovmt&S<=+MK~hh^JiT}uc%vnz7@o908JMq8Bho=e7dI*yXZiQju+vh-z*`{YGYHd z@>=b$F&|9`;ZPpL>F;0^f6qy6O8P|vu$vc!=;cv;&Mn-SqyDzE!zY|wgIZIC*QZ!Q zI$hh;8#;@FdJC+h_0aD*$IEW*q55LY*hMBRUs}SI%mEX1sCR7g&<0xXDd4zqguH(< zBWkLQ=TUmM9r%}ZGSqZ{B&;dv+&Mmwmd1ubOZbYZ!irna7Ef-LIn^11s@YxW9 zJ#}}z*EV3Pfi$yl0z`^F1K)cLrZaA$%C4umpRsYolfFTeWfHAjx{o}yy1kHBjPHOv z=)UeopiSyqUgWuWe*utnh%c}uhH=4K$?Jnor0L%3%`;E8B!=ZxRe(FMw}ZfiC+>XH<^AcF+`7Y12)y(*fuCP30=e zS+Ga;sr1#Wi_ThQt+Kk+ea|S%_F5l3LH)?_G@dlllu@>B$FB~#qF@%DMTnmNDLvme{cnT=ReiU1&Iq-kEidTnj38c z_%k|1nyv)7xqWJ^S`vx3_e_icU9+o~!%`tnG*==e5sUz-@NTT)%;-zq&td76^JY*74*Js2E8~&!iwGo zW7=qle{wM;|0J#HSbQ$>q5)05#5lT~Pd`ept5(UX^^|IYNvt$oW6w3OjPEd~Rec?7 zrvbmQmebhHO8Mysf+}f-%%S=+?>W-43?)uzuG!hvG>BRoW(`FkWijt|S|K((k+Xt> z9zWUZ`Ah6wrFhCgw_%Rh-B}HeBSJQS&1L9jf0B!9Ob@y`F{A!5CYFRIBsnwj-a6mg z%4mFTDR*cXRT~)(r^|NG ze>wT`Fx@s{F`*(Kf7$5$k>d}j;MSeUo+cB|(0nugC*k-X^YM6u(E#~`$SN(J3O5Ka zM2QLI7*tOWr$Jx3l%O3j=oeK!!S10k>_rTEu3%zwknSG_n-anO>F+(619a2FFtCbU zE@AW!VQO2Q>oEUO`e~VL1-WQ*S?TG;PD@cX& zTy*c11J|)3zM!nXHl1-p;Tr>5+O6Ppyq8m2vJcEZEO_m|WlF8)fuj2uIb&)ylvR|c zdIrE-n(39!4*74pciba-GXWP>e+VebR3`%WYF13l1=wiQqC+CJ>ZdzEF9QE+JsrPT z4bGuj-tbfCwmdLaZBVV^3Km`*&Xd&^L$2r(BZYP8EOiK%yek|C%Gn)L@f%Ti0Qrk9 z_aNN`v6gr1Qy|2X)b|q#{)zCM1cw_b18*kOK9Rvehmz$S`$r9bJw|=7e*qiH43cgy z*|IXnMqAFrD@nM{!B`SAmZBmVuut&}6BIQhp`|z2Y-pi_6vo1v7G(TS@k_yGQ-4re zOd-^4v8JQ1jb#=e%3nE!g@1z6BiA<3M#}PyAkrWI31AEKvWwVu+XhixbMx-I0@g!z zk1#g3p4HNW!)v)$+zF6Ee<^~-WBx35Hg34uvI|*%)!C`0E=f9`NaLaU_uI@&LZjMH zkW?~i){bVYBIbi`auy^v5)lN`D-iOz%*oSnQJh4OMh43~t7k0gDT{k3i=@FKE|N_C zTAflB^Pd(KDGpB`L(gw^Hv&NElLhE2LC^g@#OdY6cT^v`E6bI4e-$-g089SSXfsQ# zn0qEA8FQZhicvRRA-Z4P5Ficu6aQG8KqNFn6+OA^7WN6A&d?w-%kMJdVs0=7*BOa1 z-NY?La&=l135L>Jts5tJ@L8&jw4S!YEI6%y(5+qmDPEYsl66f1| z=;2cQyS|i(0N#-ne^6L?&M3URL_4Dm8d_@xH(#Wzn>A$@g|`lWWm;2Y3$cL7ZD0-( z)FLCZ6l05%33i}zRj^FN=?;Y04=U@q1F_D-b+ZOzL*}uN-c*RA z@}JVhxYt^s&`;Ri&9?E(BWqe;W{Qy2<_$^dc7DIp>JuH#b7f6{H`~ACm!*Atnf@0^=fycMViONB z8Ep@=yrAD|_R%KwgvM#kOht8B4gqiy$0xsmPzmsaU&Oo6^JVnS4p&%n{lf4M2!68yf*zI>i_Ph^1Rye{s_upFR*7RgQ|iu1BB&kA<8c#_(U-69Wg ztkPA_VFn*}tm3c_GLSW`Ky`$srBdzkPNFHoBhyHoh3i`8p=LLgamIPEJF6-KDgEo> zw?;#dnsgMUy!H%0g+K_v*x(p-JxrxOA=;S%;1a zrHZ4w8%G#@NDv2<8(2qk?8=`$L&S=_Q_@`81eUJwL49-FEEtGjWnC!$)ctKoX+n^ zfjBS+f8@y{N?$CZbl~}TC!JcP=kqR9-ku-+{8@QLfIZp=`edFDnl84jokDLE)%1po z2AaahZ^Ux25Osl8o6Iu>`^^+-DiJ(YRLEXI;i1V)BQ*4mY0K`ibD7?gZ%Y)aU_=vz z&)JQr@zvV}UX<@I*V8rTB?A{c;5tE0lS3Z>6(b1{NIhgy|OrU1z zdhq%t9;j&49fG#VeSNWFug_KP4=F^AvB3B$vMt2}Ns|$m-5+$&{D8E;0t5};Zscb9 zR)0&!742l>f_DSunBX()>e~??l1Wk`e$>gSKk}ydI+L}~=J;Qq`4BO*6 zV^}fWc6SIX%^r$f=C$)`Usv_WHK37nqQqk__0D8GVmra+{D<87WDEFqgHL|nfu%Oa zc*G~0TJr8FOw~oZm@)TPw#=*c-eanF*!{$BRM>(0_qTpX@XC^JM^}!8rGohMe{gF$ zyQj(o*5`K5mLD7_94#WPpVmLt=u$BbAcM?IU#Rt>l&&YUbIx1(BL2eFgw)5vdE^}| zMLfaPHi;gBfBN+H&NVb|_{U&sM)W6KS!GAs zcx)ZnT^Ks&|6eO{>yX+isM_M1e=4H+r*v%&6L5~w&v>mH->{T;D4<9-2VE=TF@=Hp zuLHoL*%t~+BUj7fX3yKT-Wx@P!t`K(zcUUt_|(B7$e~3I7Do9^WwMSpqDWa+z*5&W zn8C!AH)n5AXV{;bpmq7ud<1k?-#|`&c5{$wvL-u>EFZsm3qy{``#_0hf5IRrc{Q%D zf*lxFjje-|pW-pwaFEhkP?fNe)KC5l9{XtC^7zt78`m?`A70*LeKSm&)TPOob{?lw z0BBaaZN>E~Nvi)1MbSuggAkT>0xVOfCH~p;7BWmJ;(8IB&Ses=)u4P3NJvkLmbVdb zr~}+Me9V+j3I^^vQFNrNf8bpEXgn4+5H{k)YN=Hx%_>!!(w-9EStTunG;b?wT6AZ% zr*LL64Dn{p5%O}dkhq%r13=@^K(c9YVLpV;9~*giHq`5s2MLdxp3@pxae<}=C^Afh zw}Dixemk^;n)>CTTadocFt@-2iP*Bv=A3WOf*6yPm_EhlKatIve+y^pGO-+buy4#a z?_l783WpgNun5Wrm-ujf?E6;FS z2_0Z%Df(s-={4=fBj?Bk?~|9osAm(9lv*=){VZ?M{U|f3uwk1xj$AWol0GUT>zw&?X6SO$3<`!wkoFl!N6>Vcp5KHL zM386O`yVMpV`j)svQJ)N0wY^H?L&O${gB9L93X5Rr8x~We;r3}6AF$zz@v*sf~zjb z49XwdbPij+unOl60@1}m>F_be5!Gk6Mromf#9>;ek>6CRz|T>3UUHN)RzF5-FUN;n z&6jsBG?6hNevwPfCLrn@tK3R-No#dL_u_FyYRK2{v0X8jdsCbkre#Kuy?o;Q@QCPk zH>JS?U2q9Ge^8kqY_}Rjb$`>_#FP%T$|-OEPVV{rwn08wFHEie^TekB3_hDf@Y0>> zMvqv~@aDzG+-x@>@+K%+U85~7Q0WT%f9(I;=fcuP-QiDtU)Ge({?R}r&`qA< zSD5J`hHKi9{=IU!mU)D2QydDva*lUX3L_(JA+0Bz%W<|g`VHo9fCq&%szUtn?uWZuklHEBS`t`$~SMRt`%5o4^bILN0{Gfgl zAnLfB_=N-^YEf6Fs=?-H4Uq5@;ZwVRCsIlTWEd9%Yubmlm^A>>D4}cqn_PVwTl7Qe z4pD>^A`l>!qcA8y^O6rW*dVBp(ZMsJe{}DPDr)I;@N0!Gca_z#8Q{k^gS^K7Uwscf zN5zuGGc8-skl}b%9wUo6<0C_uKF3sCp{HvH$2rdDL1Y;B@gJ^>P+Dt+m^aM;Vvu&p znDhA|i;`5WUnKtC^o!4N6r&4Y#3hg1p&@FnmFrrnUe_cUVG2f@ajusJ{miLJSThTMO5;rqlw&DxpT3W2n zgd*v~Y7%(C=^efc&GJUrS6uj{a%ikveaRC;Y~MaS7rIO%#(jd2_kcl=5Y%$mrOhl0 z!<}4rS-w3)7}bRe8#W5?+v3K{Uzp2KRV8C9aJTH4$zB_&jH9BMQ$prwe|XCCozfo% z5JnWONPo)|DD3em|4XuTB@~p;!b0{cznI+CGqR3segI_ITKoBAYOHy4iQl({KFHDH zy&BA$#u3}DfOA_43$r?t89RM;;i|--4wF?KhtNF`_RN=W4r@M%N>YMjAgIMo&KLEQ zeDO26`du*WUazSJ_bHHze|!R`rEGb*JE)bKREXl)ndn`Ni0BdOO#5N-stkvDp*`+Rd~t)JID`Eg&bCYdN(#(Tj?-V@zm$`R@g z9~YJ)$7%c)$G93*PN3CWWW>6dKEZk=)zfT2bdK|ifFgo@CH2P2f82aQYsqpjF!|9i z*?}YobY|+@+rfm5He=F9HUW;H~ha5HDFPaxY z^q$R>vXRFFTu64X509g5ACx_`fJI2oPAIW6_?Iu@Fu)Qg>(D2kmgd%MLp6Ezspl{bhRH^^RcRd& z?`YNMh`Xh~f4yI_DULI;Jnsyk?2tT_B^U1bFRS078w&Wn|5h{q_9dVz0bAItwSm4O z3qDM4v{iYy068SPjk9nbL@JFEUBmc53(SDO@j_bKbo0~eNm~AiJ6~+@{dMcn0JE#5 zr)iJA08}c8zwHau;LomN9oZJw7qFO&Bqn>Hr$-arf0z>S?9OD#qbFkrkZTrS&zA$% zX0S}xri*<9kn0a)9>PGPo^xdQ3>)*!^Po^O!JFjd3^TLv1FvsnN!{Uh8mkw_|+;ba0_Ife{(2Tp*Z(~KzvDmBi<7ARvao+zzgjL z8&UAcJB$zXmUM-g%1!nb51enUX}9Ky@XC6RYWWe=j4G%#lQd~tdtzjwdJUEOIkl{W zS>^fVDr6b^{N`c_g$O8oZL{|8Pt^Bvv-Dq|v2pbr$Gb_WYB(U?sZov*c)9$Z#GsdR ze`cxLr&ADmioqJpQZGh1EWkwqAPMuwgt(A<>rPn@6|8;!2s2y)?U4scz#W;zD3A{T zivNgANp#?_{IN`(;~Wyrrv8 z>27mj0F)p>E~$e_-uZwzvB2y(p>>ahqD`w3put7RVGaXUBgci>|?=C4dn6m%*?Ef5Tie z*>);%L>I#jkJ}7}@G_n+ddW20YXlh6e?*vuX0%!ibHC5dc;jiL*$EaOjC_)@HFsXT*lBkuwCKuBk3#REL}_A-IfGMy4%@Q0TRRfhiWr zLpY8_NDI*^v-F(1**-X;Td)&Kf3S^M)N>NcVeM;O9YaZMp8N{R%avN6fLhI+dOWvh zrLe}16!y%~HRmgO0o{^>1DtpGf_VJG#LH_!rI9J>?UgJsmdJO4!AOTE>w@Yj6v71I zF5fr_8pf03*Y>@UNU$_Ei#LW#<}HKL=ho0K5p7d&=cvw_)~3*XbM;WUe*)1pw9LLc zl7%xLlG*>eXd&;ke}KO4S=~W&4EZ~u-Uo+J`0%M6G3#y0$8ewZL*xn4;_W3z`7k?e zh`nwQ+>>5*tfR(AG^5^2>MkM{=s613PHM08&mOaTSE01UBgwk5yK*+f3J7Mlx5aSaIIbf z)PJ2zOTmOkDmn!+o}AJt|KFGWC7HqVX75JGWrv-+Wff@wH|MKp$BwZuc#~S`PO#8^ zsgKPZk*gm37N%4v@`DMI$*Q$T^G#(HlHI4@0lokCJ2m(_TFru|KPc`$-3%&b^6Um_ z+|{WHT-z7e2Mhjge{a%&{`_u!h7nlF7HRb^(it#yh3nDCES$F*`hJ`CZcsW8IMs50 zT0T$0Xub8qqHOP)(eJ8pZ*+EZJL z3E;V%Wc%|5mnSXk=qv47rqb_!eA5vEY&FRMDkZq{6o&v{e@Q_hlv<7U1wUhIQNHG9 zfs;0h+B9}95I5@0euLI;i^_zH&0vpBj__HB+q1JLVTT+n8M4FgyzZh1Vnk9QP*D;Q ziH@$j?(Q{U{RSG9{Z3r4`+km{pj6!qvg^Mjzn#+ia+X7GtO?wa@O>PjF<>@bax5o4 zbZAjB{w?1Of20?IznnQ^X~b}%13d^wNJ$nDJg3Xy{j)zL7|HQEUQISpT0?f^AasN} zpELrAp^_L=F-9)(G?Bi=3Kj7syd%M7h#bcSV9A8>Xs?w3-32`I}Y#-V!2rSIZ$oh=)8NT(PB5Mc=a2)V(Hu^aAIuC$4xjZ3f zsMy)p?l(xUiast*XF%KQDY5Y+K2#&vJ>lo*e~qwwUVO7}PMD9sdK>jFX02Q8?qLM9 z!;Gy21FiBnzC(LsV90O&`9#agJuU_pVJI=EU@PfoVE@IR{t!!`s+_hi! ze+(pAPQp07t_6nnh>X2-!XwgT;c@ML7J$g1^^5F}C+#pxE1aHyS=4S=0`@GKCL{GP z9BCXTtl9CHbOmG!GTA@dM}OYvla(4pe-8S7G`$bd_ZXA&N)a-pXV->AVyepubh_~d zKMrOn7rvz4N6>|@Fl>+?^Xy{Z`dg$U?*hNU-RJs>Zf>?W6vtNnn+P#1I zg40*BwRcuCo6A_yN$2POAOrs-epHjG17&y5Zp$aBQCZQ zSLP9grH6q^GoOY0b!TuSu={wKuG||KpUmoDndrp>9ILer6Sce+YaV9;cWs zCEyZFb%t%A{LX=Z>WaPgV>G?$@J$$4trym6P)l#>{+YphPV>~xk#iisvT^fuLFq}_dS!ioX8DKg z+dQ%>K&?`O@}8{?^q*q7f1)vc+zy&!(HE|mZN5KtsE~0e$NylS{NwfC2=7e%leG~{ zxf{8_WLlli(K17mXmI>~6^MXiugcM#dMJNZ8RPYcG}m9b=|^B~&qLEZF6l~<<5j<3 ze!vZ5Cf19G-;*XvF9am=afT5&D7X^CqwfCeIwcOImt$?E)`dOfe_oUczo?v0UY!?l zY(nxefT~_r{HYcLww?gZYP8zi>^Oa*pUc|tY%|U#i{n)5Li<>j$;;T^n_sc!ISa_G z9XI)(AF)lw8ItT?tU7k1Fii}WD#n8#hdx4s`ir4-5a7b-XQ6IhJre2-d1qO)MIz{OKCJ)_q=0vHf26rVc9*1t*ekZJ@07s{ zX|*7XLof^2>wcyMmgST<%cR*Py%yj%N4>n*kDhYdv!lh711WI(RMA%)xwc>oLOJA; zGMxGn$1vLN^fo56E~l@Acw$K_q)SdV5|P2{s8{JH5^g!Zb|`z?tm6}*Rv1?XfZFub zB>>z#b2VjSe}o8y_|u!;W7D2|>OZ4Y01n%*v0ZS{MLR#VuGwAaZ zml#wR;qfeiMBHw(sV{)6ee;U7c&RTRW`!Hpp9sJTeG+X7H^C-Mz1%1Q%d98m60nJU z8tBZFQe1SpEyt~^)xePq0D(f86~uHdNM#=orw_o1e`SV~uqmK90b(ksnorRUnxAxg z&)H0@YCvK{wk`pLiuG}c0gxPu{leR7!`2>jxUCnrHIj}5o#z!(EX@!IW}T=k2sL}mA)olkwoG(W5y8KAIA1svY>GEM!rorw*&NiS0-9*NNy3ne>x#zan-R(yKnEUAS?Sbj7ez$#~ou$ z@?tuNnBcQLbe5<&Ua5gG2p^WJ`Mu%X>5iaOhV4j9xLpUX5&BFbfBOoq?0O49p~zkR zJylGX?~FMItZ#-aYf1W$*7k99pEJJJ@M}C%jl%4dn~1Hdu0(4V-NELWj6|ICb@exu ze@^Ip>gQ(*P>SnH8B*MFm6!Rp$~p6Ad`%$78wzQgT-Wja`}-rRN8%H4D8ifCo*G~9 zcf5{dN`L|XUS0Y<8sGfonE2xVN02oerKzs0q*2gp!5W-z3pzcG+`jqpGuEiivB zC&tziaT;rRtoH{}T30GtibO)5DpfSk|vz3Z- z85mqFjQjJ+WHUNM0z_~EZuJ zaJ-d8exb`KFg#hjCw!*8R0)8zkMzV~&Qww*rM)ASOwp*+S*qs!R0Vp5e+}O6UaoN1 zGJjD(Dr)rwOVbPKMs-U8Jy;aycPC6Nx>Ytr$H%{0YX(Cwb+w)E+G0vg3b3(QqLclT z9ly*`hoy;;c94E{jl|jqPh~t3q8VXYQ;1Y6Bc@-Sq1J6&aSMf$hibEHas?{yYd&(y zh0w|Q^<-4H`x-KVy3hr|dviqT9r zGiS+vK1p4EBvkmw`nICFCZeR(S()O6OqA1ElJ9?EBk(AfA0F#1TMf6elYsI z`S+@s98o)rIq&+M&ti<{fAC4kSV3^8qWw}2df2m}k%mm|r)%@E`OO|w= zG}edwKxSYXdYC|sxKjgzLQgZ%HRs*Y>TfZxH3wL@F)5WNC$2_+&~!?>wrNlU=4}sA zio61|8{9AvJ1!xRlN;4!Bh|x;h#(4?{JZyFl(e@W6c`9H&2-P^-*nX1(ZB$zHe9)J z-lcVCh)dx-e2 zCGXKxhW2a1;^u(ssr|W7IX$f=Zjh=lIhz}%tq^DK-n7{sUyOpjD_|`Wtuk#%NU*lw z>KKkq{ZmaTRi6lBg&l2vGainl8@o1ko`;4=f1M6oe?4E+xuajrojQ-EX8HdU4ODxl zkB|fJf-Y>x9c@2Q5S`FY#Mtrf)#|}lQE9uUm(4I&`SlqnK970K41jO8 zeLO9bf0-=SsbPpSZ~5}lkbvJTypo(iKsRp2Y3|ib z@2s*oF22y}UQ>MIetRHsBja&~pv%$XZ=A)Vm)YK_xc|uOgRflgY1X+&d}mfqHy@CE zl7{XVPM;j_xg5b?n^YdV!-Y4Q9}G(^!bOqce`LOF|MB$9+x1JczRO^CyFDnIQsRlR z(Dr%iK`m^;f4i`hCEl1Zr=f`@10DhLF`8XQ!ytaDygggGy-vY%J0=y?@O0CT<`Iuk z@88!F4aewP!R?+M3&|f3Vgko$L8h_TIrv+{6O&J;m~+=a$Ge-Q@kzy>t0LJ*70p$$f^56U7Gw3!O8^ebBxj1YUefRh(M#K8y9`zfG zCAAR&)LM!?b0Q9?NGTkyM6yC6q-|Z((>rHAKBP0Le48qGtUM2Df8V z{tgffqj**tdE)9g+h4^*(m=-Ad)!5)rkk7m3N;>PbpRigX>-+y336?w?ls>sZ4Jyg znc(UDk~g4<6($XcvChFA-K)bne^crVmg${RjwOht~MoP3g$qS8Z9uj)x?!itKCz*ZJ@3HA1q zt$mQA(+-@pGQznM2UumBBkdzD)CvUWH3r0A!M=CIG5dUf9I0;%%%`KDe_>sR?h4w} zHz-Czl!hhNsVRzO*v013Vs$`K&QL=HqauX6w*_c`0qD+bJtmpg9nN6ctJsm@Ub+eG ze_Z{DZ$3~^Qrqhb`Hp6oBkoJ5t1m~8m8fuNupmZi(v&JYs#o$4d@$J*DKWh|-~``= zu({TZZwB;NwckK=dd47Sf5$E9>Uh)mc*8s(8i&w-D)^M!xW00QK+xEaHcuQ zbm2g2k5kPe_AS1t$Q6KD|9uR+8x2T?3If$4SAKuvu#GI6jFZ^df1Q8bz*rjdv#a^G z$=B@5@|x)p@j+5;f29Dk)fD$4T*4YX?fYe5Xu~<^v;1)l^m}m#0He2oZri#==%$X* zcVM>9lb*ws;z~BQQqQ_ql{FPf(o9>YxzHx`50)nk3dqfVA=)bVealCsmPXHvOJUEJ z%hVh|z8sg7#Th$4j16v7Qx4{`57PN|GbQ&{l7h>`Ey!aL$9aUV^O;XV}Sm?wyZ(RllCjAe2 z(7zdC!cfThZ#Bz@$AsrAz)zXw1mn~;F`|sLf#kbve@48jfJFO_6u7BmnIgGGk#Mt7 zPV6)xyP@i`q^Tn`=aA5?AtWO{+R2k9TEHih41tq?y9{hw*lVzaR&6clVn*jd{h|ZB^1IPYi1#!(&YHUl~WUHkuATe?YuU z4k2YDUS92auAJ7SkSgdc>iEQ~Z{SlodSk`ii$V*2vjQ^l;J}b;X_HIn_b+p^uLvHR zf0}-blt+paAcB;a42GT~^(6ptdjy7B#|eskDpiLHceM=^dJC^XS2{@45_<2zL1q&M zuR}NmfqgN+I8ZD45{8amE-qmW)*5(>k%1hRP%n4Ms-}Zo>uC3sV{b~!s_!RO%`tY^ z77jtc-R3_9d4|$#TDBfHQzs=<&ECwYe`YY;-JXQ?`eY;4QYl!w$(mOZlJW3TVaHm) zQ^Km&ro|6^yuayXWp~p|MJx$)%)~tJocb-KoB&6+ejVHEFbv$0{NDXd#-*@->v7B; zu;COWui8pm^=XJ)->6+vUBB;97nYrgwlqevY(|oRP09H2yaSt;Vr&JpkpqlBf0ix! zI}D^7r3j^=XhSxh$j5c@#>Ks!^J2F^xJkW6v&%6K zn@Sf~FQp@m0~Ta>@^}h@0zWi1PL-F}?mBf3paCpWOVk z$+=IxKHI$ZH6%_?;&iT_DRB1>i}X`>38wAHuhlvAg5tf8r6Ve*0oBXM2cwT!8UmU# zAu{UXWX`D)q;(~bLb1bh!>;GXHGCZ#jufrNCOL^MIY`_;nx8v$rt{xB9&bQQZ@O7n zPTyh(n4=hBzE_c5E9qc4f2YI^kfOvuaO-0#weYG|+z_y!hCaLc%+*>30yY2P^Z1NG zGT;0@Iah2n(Po0vIY3L9%d(OB2mW?CKzlAZz^K1ab`&1%;MNCdf9YB z9BDym)0R+S-o8v|U=o3%{g1zpcSfeko27|INuSGVS;FIO0&ZjJuDLTb=GEI_M(3hO zK?y(ThXhQcky_4ef0T=Epnr7qdN$YwhC5Si9M%M{K|wBuf#MOuv8@-IC9@H^u{hLD zT&z+A4M90IKNFzmusm2|SC8C8ymJEuRU72QPAR_5*^u6{MpD$+##5D}trbt>ZDspj z6lh;$Siu*;Qr|nT#yvRr0UX_R<0$Uh3S^KyEy~5@2dKh5e=y9iL1wlbXe#3Fh<8F8RtP%G zSGYn6Ku{f%2NFqN0nPD#)f zJRv_K2^cvAz{Ucskobl~@OAOhl2!}CzwQntDg*} zVw)+Bjoc$+XkZfs5HLnD%cEK9Z0vWR!miQajNNjxO7{qddTQmU}B0KNi7j-kag zo8ZMiIp2I}Uv!Hb23exM7LcA7f{^2d3A|FZ_TW_3kzVSZ?T*+lCGYmq(&G^p<1mf7 zmyPeke=~^d0D)N9(V!b1_b$dN7v>6SfL+PYNY#dEwd`c!VI@+*{1z9aBcardUh&E+ zd{1CJ2;)$4@)Jj6sN}PEFDcvv)=B*N=k^@-D%)&KL(ZKVOmV0e0_@q83Yt?M{78#i zOI391P*us$_}1(+|lqJpZ6 z#z}CY7FT@D0)@ggt!lYmWAYgf1zDwhf!f$fHTB);@<=f~0?1mqn``6H`~q)dwiMK0~1)-zj0e0M265B3BHwov?GUJ(xk6cPdJg+|sD z^!y{ouD|{&zi8m3^QzedxxGT4qF0)k`ysrk!-8TI`Y=Z*YQfvCGUg(Cn?ADtML&8T z<&r*wEQ(~G9PeD>+H48GF~_7}9*WzJf8&k7yi{*09d!W^CJRW*F%H#vv_@X1Ubp@( zlnNb$@el~gYq|E_-v{`9%Nac7bJYa0FB6;K7|~DPR2cYe1B_lJdMi=Ju zxeV3V{T1d>f*%+6ss&m9#{iW{R_v%0Bn9I6DG@MxsuH(sxy>L1(JrC&8R{zhf2yJq z*=Du{OfRyd;DDMei7M%cSjM3hd3h`hUk2&l!e_8g{TQx}CtC0kD_JB|MhXip<=?y?u84@kQEca6g zcG;CBdzx;7-SM$-yLYKY-z{GYE#pz9>z^=Wf@Q2LqRtW2tf@9Cn>cDuYK>e8*z0$V z%R-XX6L*jCw`^@>%2B>8T|%#a09OJ3#>Chwy$mxmL)H=%)9Z6!k0$Wlf5IBRR<#&f zz7@@$cBjkY6A#c-?%9cwG4`NKbVP3n(gkRL&3pH{Y8N(e@%yBM7tI<;Me1 ziE->C_qd#hUM?_iJY2_-3~e{M)HlKA3h-y`sKR@~i6mLsnU(NTClTptQT$s{r^MMq z5%Wxy_9IMky9nEF?W;@ee+sPRL!|RgL#6r+1X`8ZpsIz;2BYXi~dwnMPVE%ItV)f;RM6an`f7O+Mp@-w1i z_1V!9%NiOV9D+VdGHkC%SRG3s zp8W&`k!3u+%7CPHLXNN-y>qFWhqk}LH1x3ZjT|wSnL;tTg#GvoqY#nNf4Ki!Dvk@J&+{w?{uUsGeE}?IjIh&oxjwKcDgNT?X61e?)D+%) zvci1yIFac6avQd%U%T9oFoKIxRnbI!r64S(2lCP1z+g(gzE~KrYtw84Y4IlWH3*R0 z_$rZ!yH&?qQ&!XX$z$z4`Jkc=S!XuW5dQpU^t957%~^AGe~*+VMzKC9#gEjJTPs2-h2z&ZXr_*z+Q`au#)J}NwX_m;!Z%pIS7hLW z^Q02I#!|c1e_sBNTREX$1~vqJ!;}Os{t)mXK!BjcYn~D^@9)iwN4-i zkLh~>)Y!&8uk@BwP~N-X8u7A?mj1xtk*zU~Ob_<1uEe*a3^2GvdN-0C_P%;EVVVWe zlK(Y-7v^|fe6)e-HL5&3)OjiFoZ$TxH@&MqbPMY?e*}CRe>$zNW~P6%K0+Gc?>b_# z=F2^zN^l9=#C<;`m?26h@4CU~HSWr|Pg2bflK`4@4sHa>QE=-?hNfhS?C#aPG0zI= zE5S1o?zq`fr2rNFt1FJ`{{E z<@Ikkf2RfJA)z#M&B|HtW>6w|C2F5d^GmYQ7MIA+zICiG+vDF|>Bgbj$lfV(|4qPv z>r|Q5dKEB9tLiDcGDJAF9s;pjb9nzcC_sJTpjl44hk##P+z)&~q-y6F!Gq!g3CVtq zn3a&{?8a12yf~J-V71q3=W)gf(MF>8i5n|;e+$>@HZZ*Yv}cdx`{MI-N-x`rlfP`@ za9f(m1vepw!^pB|f-ocF&xcig|{7HGQH+l?8}z5O@+rbFgWi=kNG{zWe4uB5Zr zCdUB?1o!)xSA#!M(L&P2Yhls+meod8J$2@yY7+g=+Qz1yi1m|X2G4$Rl-J3(@Oz`T zvuv%085=LVNFPBv< z6c5b>Oq~E|(%B)it;xS2@<6V;+72dCULZ$KviUy5wyjoZTg5qraVcC__gFIjmT7|> zOIbiSl;7j^K3NvMm#W)HxgWV;Avktd3|?dww_q3kRw@2^7%i@1$byb(7w}z1AtT`m zsDH%Zg9BY|E-~bypeZeetj+D!Yz4ahfw9hHMcAV!kHhgr7Aynq-)ICqd3N+;o@^$( z2ruw%e3s!7AZN~w#)QuIThjc@@c(e4{Qs<5$Jo%{>grQ6*dok3%TqMB`Sy-UF^pS| z*W$aTuMO*#j!)6y2FYz^&hL(OEb8cc7JpXqvpF@ZW?)e#ppgKBWI-oZ_qya9;zadm zpcIYF;K6w$G83AwxKZshNPyEdh&gKau@!XAeTurmw1^z~aZIml@Ygv>hC+4K&QHdO zfhA&OWwe5miUT_*Cqx$PyTk>4I)D`}#9TR~HQTryRf>fm0>SZ9?NZJ;h0$&g zBkv`d&Lp>hvGYxvnFl@S%Li^V-0P>2Mr-a``FRXRa!j46`I0ggvn8j1ZsD#Gyo!uX z!et%M#l)^{Pui{qH-^O=f(W6{PJg_8h|>7npH(oSyG6~902}n)RJlSg#i!-_F8_6O&Hj7z#}V`)2M!D1Qh|Dd;i2!^Ocqq5dCiZQ5_c z{jr9R!5Y>@inode/directory - - False - bottom - - - gtk-paste - True - True - True - True - True - - - main - 1 - - - - - False - - - True - False - vertical - - - 300 - 26 - True - True - gtk-edit - - - False - True - 0 - - - - - True - False - - - gtk-copy - True - True - True - True - True - - - False - True - 0 - - - - - gtk-cut - True - True - True - True - True - - - False - True - 1 - - - - - - - - gtk-delete - True - True - True - 65 - True - True - - - False - True - 3 - - - - - False - True - 1 - - - - - True False @@ -125,7 +23,6 @@ desktop False center - @@ -190,17 +87,6 @@ 0 - - - True - False - - - False - True - 1 - - True @@ -223,12 +109,114 @@ True True - 2 + 1 + + False + Desktop + right + + + True + False + vertical + + + 300 + 26 + True + True + gtk-edit + + + False + True + 0 + + + + + True + False + + + gtk-copy + True + True + True + True + True + + + False + True + 0 + + + + + gtk-cut + True + True + True + True + True + + + False + True + 1 + + + + + gtk-paste + True + True + True + True + True + + + False + True + 2 + + + + + gtk-delete + True + True + True + 65 + True + True + + + False + True + end + 3 + + + + + False + True + 1 + + + + + main + + + False True diff --git a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Events.py b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Events.py index aac0413..fbd3962 100644 --- a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Events.py +++ b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Events.py @@ -1,8 +1,5 @@ # Gtk Imports -import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk as gtk # Python imports from .Grid import Grid @@ -32,10 +29,6 @@ class Events: newPath = widget.get_filename() Grid(self.desktop, self.settings, newPath) - def showGridControlMenu(self, widget, data=None): - popover = self.builder.get_object("gridControlMenu") - popover.show_all() - popover.popup() # File control events @@ -61,9 +54,6 @@ class Events: def pasteFile(self): pass - def test(self, widget, data=None): - print(widget) - # Webview events def showWebview(self, widget): self.builder.get_object("webViewer").popup() diff --git a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Grid.py b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Grid.py index 793a37b..82664d4 100644 --- a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Grid.py +++ b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Grid.py @@ -7,8 +7,8 @@ gi.require_version('Gdk', '3.0') from gi.repository import Gtk as gtk from gi.repository import Gdk as gdk +from gi.repository import GLib as glib from gi.repository import GdkPixbuf -from gi.repository import GObject as gobject # Python imports import os, threading @@ -18,8 +18,6 @@ from .Icon import Icon from .FileHandler import FileHandler -gdk.threads_init() - def threaded(fn): def wrapper(*args, **kwargs): threading.Thread(target=fn, args=args, kwargs=kwargs).start() @@ -46,7 +44,6 @@ class Grid: self.setIconViewDir(newPath) - @threaded def setIconViewDir(self, path): self.store.clear() @@ -69,25 +66,13 @@ class Grid: files = dirPaths + files self.generateDirectoryGrid(path, files) + @threaded def generateDirectoryGrid(self, dirPath, files): - fractionTick = 1.0 / 1.0 if len(files) == 0 else len(files) - tickCount = 0.0 - row = 0 - col = 0 - x = 0 - y = 0 - - loadProgress = self.builder.get_object('loadProgress') - loadProgress.set_text("Loading...") - loadProgress.set_fraction(0.0) - for file in files: - imgBuffer = Icon(self.settings).createIcon(dirPath, file) - gobject.idle_add(self.addToGrid, (imgBuffer, file,)) - # tickCount += fractionTick - # loadProgress.set_fraction(tickCount) - - loadProgress.set_text("Finished...") + image = Icon(self.settings).createIcon(dirPath, file) + # NOTE: Passing pixbuf after retreval to keep Icon.py file more universaly usable. + # We can just remove get_pixbuf to get a gtk image + glib.idle_add(self.addToGrid, (image.get_pixbuf(), file,)) def addToGrid(self, args): self.store.append([args[0], args[1]]) @@ -116,6 +101,11 @@ class Grid: def iconRightClickEventManager(self, widget, eve, params): try: if eve.type == gdk.EventType.BUTTON_PRESS and eve.button == 3: + popover = self.builder.get_object("iconControlsWindow") + popover.show_all() + popover.popup() + print(popover) + # # NOTE: Need to change name of listview box... # children = widget.get_children()[0].get_children() # fileName = children[1].get_text() @@ -123,14 +113,14 @@ class Grid: # file = dir + "/" + fileName # # input = self.builder.get_object("iconRenameInput") - popover = self.builder.get_object("iconControlsWindow") + # popover = self.builder.get_object("iconControlsWindow") # self.selectedFile = file # Used for return to caller # # input.set_text(fileName) - popover.set_relative_to(widget) - popover.set_position(gtk.PositionType.RIGHT) - popover.show_all() - popover.popup() + # popover.set_relative_to(widget) + # popover.set_position(gtk.PositionType.RIGHT) + # popover.show_all() + # popover.popup() except Exception as e: print(e) diff --git a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Icon.py b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Icon.py index 882ec4f..4130e4a 100644 --- a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Icon.py +++ b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Icon.py @@ -29,61 +29,55 @@ class Icon: self.viIconWxH = settings.returnVIIconWH() def createIcon(self, dir, file): - fullPathFile = dir + "/" + file - thumbnl = self.getIconImage(file, fullPathFile) + fullPath = dir + "/" + file + thumbnl = self.getIconImage(file, fullPath) return thumbnl - def getIconImage(self, file, fullPathFile): + def getIconImage(self, file, fullPath): thumbnl = gtk.Image() vidsList = ('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm') imagesList = ('.png', '.jpg', '.jpeg', '.gif') - if file.lower().endswith(vidsList): - fileHash = hashlib.sha256(str.encode(fullPathFile)).hexdigest() - hashImgpth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png" + try: + if file.lower().endswith(vidsList): + fileHash = hashlib.sha256(str.encode(fullPath)).hexdigest() + hashImgpth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png" - # Generate any thumbnails beforehand... - try: if isfile(hashImgpth) == False: - self.generateVideoThumbnail(fullPathFile, hashImgpth) - thumbnl = self.createIconImageBuffer(hashImgpth, self.viIconWxH) - else: - thumbnl = self.createIconImageBuffer(hashImgpth, self.viIconWxH) - except Exception as e: - print(e) - thumbPth = self.getSystemThumbnail(fullPathFile, self.systemIconImageWxH[0]) - thumbnl = self.createIconImageBuffer(thumbPth, self.systemIconImageWxH) + self.generateVideoThumbnail(fullPath, hashImgpth) - elif file.lower().endswith(imagesList): - thumbnl = self.createIconImageBuffer(fullPathFile, self.viIconWxH) - else: - try: - thumbPth = self.getSystemThumbnail(fullPathFile, self.systemIconImageWxH[0]) - thumbnl = self.createIconImageBuffer(thumbPth, self.systemIconImageWxH) - except Exception as e: - print(e) - thumbnl = gtk.Image(stock = gtk.STOCK_DIALOG_ERROR) + thumbnl = self.createIconImageBuffer(hashImgpth, self.viIconWxH) + elif file.lower().endswith(imagesList): + thumbnl = self.createIconImageBuffer(fullPath, self.viIconWxH) + else: + thumbnl = self.nonImageOrVideoIcon(fullPath) + except Exception as e: + return gtk.Image.new_from_file("resources/icons/bin.png") - # NOTE: Returning pixbuf through retreval to keep this file more universaly usable. - # We can just remove get_pixbuf to get a gtk image - return thumbnl.get_pixbuf() + if thumbnl == None: # If no system icon, try stock file icon... + thumbnl = gtk.Image.new_from_icon_name("gtk-file", gtk.IconSize.LARGE_TOOLBAR) + if thumbnl == None: + thumbnl = gtk.Image.new_from_file("resources/icons/bin.png") + + return thumbnl + + def nonImageOrVideoIcon(self, fullPath): + thumbPth = self.getSystemThumbnail(fullPath, self.systemIconImageWxH[0]) + return self.createIconImageBuffer(thumbPth, self.systemIconImageWxH) def createIconImageBuffer(self, path, wxh): pixbuf = None try: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( - filename = path, - width = wxh[0], - height = wxh[1], - # preserve_aspect_ratio = False) - preserve_aspect_ratio = True) + filename = path, + width = wxh[0], + height = wxh[1], + preserve_aspect_ratio = False) return gtk.Image.new_from_pixbuf(pixbuf) except Exception as e: - print(e) + return gtk.Image.new_from_file("resources/icons/bin.png") - return gtk.Image(stock = gtk.STOCK_DIALOG_ERROR) - - def getSystemThumbnail(self, filename,size): + def getSystemThumbnail(self, filename, size): final_filename = "" if os.path.exists(filename): file = gio.File.new_for_path(filename) @@ -97,6 +91,6 @@ class Icon: return final_filename - def generateVideoThumbnail(self, fullPathFile, hashImgpth): - proc = subprocess.Popen([self.thubnailGen, "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPathFile, "-o", hashImgpth]) + def generateVideoThumbnail(self, fullPath, hashImgpth): + proc = subprocess.Popen([self.thubnailGen, "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPath, "-o", hashImgpth]) proc.wait() diff --git a/src/versions/pytop-0.0.1/Pytop/PyTop.py b/src/versions/pytop-0.0.1/Pytop/PyTop.py index 87c533e..ba52412 100755 --- a/src/versions/pytop-0.0.1/Pytop/PyTop.py +++ b/src/versions/pytop-0.0.1/Pytop/PyTop.py @@ -28,10 +28,6 @@ class Main: window.show_all() - - - - if __name__ == "__main__": main = Main() gtk.main() diff --git a/src/versions/pytop-0.0.1/Pytop/resources/PyTop.glade b/src/versions/pytop-0.0.1/Pytop/resources/PyTop.glade index ec53c29..ec4d51b 100644 --- a/src/versions/pytop-0.0.1/Pytop/resources/PyTop.glade +++ b/src/versions/pytop-0.0.1/Pytop/resources/PyTop.glade @@ -8,108 +8,6 @@ inode/directory - - False - bottom - - - gtk-paste - True - True - True - True - True - - - main - 1 - - - - - False - - - True - False - vertical - - - 300 - 26 - True - True - gtk-edit - - - False - True - 0 - - - - - True - False - - - gtk-copy - True - True - True - True - True - - - False - True - 0 - - - - - gtk-cut - True - True - True - True - True - - - False - True - 1 - - - - - - - - gtk-delete - True - True - True - 65 - True - True - - - False - True - 3 - - - - - False - True - 1 - - - - - True False @@ -125,7 +23,6 @@ desktop False center - @@ -190,17 +87,6 @@ 0 - - - True - False - - - False - True - 1 - - True @@ -223,12 +109,114 @@ True True - 2 + 1 + + False + Desktop + right + + + True + False + vertical + + + 300 + 26 + True + True + gtk-edit + + + False + True + 0 + + + + + True + False + + + gtk-copy + True + True + True + True + True + + + False + True + 0 + + + + + gtk-cut + True + True + True + True + True + + + False + True + 1 + + + + + gtk-paste + True + True + True + True + True + + + False + True + 2 + + + + + gtk-delete + True + True + True + 65 + True + True + + + False + True + end + 3 + + + + + False + True + 1 + + + + + main + + + False True diff --git a/src/versions/pytop-0.0.1/Pytop/utils/Events.py b/src/versions/pytop-0.0.1/Pytop/utils/Events.py index aac0413..fbd3962 100644 --- a/src/versions/pytop-0.0.1/Pytop/utils/Events.py +++ b/src/versions/pytop-0.0.1/Pytop/utils/Events.py @@ -1,8 +1,5 @@ # Gtk Imports -import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk as gtk # Python imports from .Grid import Grid @@ -32,10 +29,6 @@ class Events: newPath = widget.get_filename() Grid(self.desktop, self.settings, newPath) - def showGridControlMenu(self, widget, data=None): - popover = self.builder.get_object("gridControlMenu") - popover.show_all() - popover.popup() # File control events @@ -61,9 +54,6 @@ class Events: def pasteFile(self): pass - def test(self, widget, data=None): - print(widget) - # Webview events def showWebview(self, widget): self.builder.get_object("webViewer").popup() diff --git a/src/versions/pytop-0.0.1/Pytop/utils/Grid.py b/src/versions/pytop-0.0.1/Pytop/utils/Grid.py index 793a37b..82664d4 100644 --- a/src/versions/pytop-0.0.1/Pytop/utils/Grid.py +++ b/src/versions/pytop-0.0.1/Pytop/utils/Grid.py @@ -7,8 +7,8 @@ gi.require_version('Gdk', '3.0') from gi.repository import Gtk as gtk from gi.repository import Gdk as gdk +from gi.repository import GLib as glib from gi.repository import GdkPixbuf -from gi.repository import GObject as gobject # Python imports import os, threading @@ -18,8 +18,6 @@ from .Icon import Icon from .FileHandler import FileHandler -gdk.threads_init() - def threaded(fn): def wrapper(*args, **kwargs): threading.Thread(target=fn, args=args, kwargs=kwargs).start() @@ -46,7 +44,6 @@ class Grid: self.setIconViewDir(newPath) - @threaded def setIconViewDir(self, path): self.store.clear() @@ -69,25 +66,13 @@ class Grid: files = dirPaths + files self.generateDirectoryGrid(path, files) + @threaded def generateDirectoryGrid(self, dirPath, files): - fractionTick = 1.0 / 1.0 if len(files) == 0 else len(files) - tickCount = 0.0 - row = 0 - col = 0 - x = 0 - y = 0 - - loadProgress = self.builder.get_object('loadProgress') - loadProgress.set_text("Loading...") - loadProgress.set_fraction(0.0) - for file in files: - imgBuffer = Icon(self.settings).createIcon(dirPath, file) - gobject.idle_add(self.addToGrid, (imgBuffer, file,)) - # tickCount += fractionTick - # loadProgress.set_fraction(tickCount) - - loadProgress.set_text("Finished...") + image = Icon(self.settings).createIcon(dirPath, file) + # NOTE: Passing pixbuf after retreval to keep Icon.py file more universaly usable. + # We can just remove get_pixbuf to get a gtk image + glib.idle_add(self.addToGrid, (image.get_pixbuf(), file,)) def addToGrid(self, args): self.store.append([args[0], args[1]]) @@ -116,6 +101,11 @@ class Grid: def iconRightClickEventManager(self, widget, eve, params): try: if eve.type == gdk.EventType.BUTTON_PRESS and eve.button == 3: + popover = self.builder.get_object("iconControlsWindow") + popover.show_all() + popover.popup() + print(popover) + # # NOTE: Need to change name of listview box... # children = widget.get_children()[0].get_children() # fileName = children[1].get_text() @@ -123,14 +113,14 @@ class Grid: # file = dir + "/" + fileName # # input = self.builder.get_object("iconRenameInput") - popover = self.builder.get_object("iconControlsWindow") + # popover = self.builder.get_object("iconControlsWindow") # self.selectedFile = file # Used for return to caller # # input.set_text(fileName) - popover.set_relative_to(widget) - popover.set_position(gtk.PositionType.RIGHT) - popover.show_all() - popover.popup() + # popover.set_relative_to(widget) + # popover.set_position(gtk.PositionType.RIGHT) + # popover.show_all() + # popover.popup() except Exception as e: print(e) diff --git a/src/versions/pytop-0.0.1/Pytop/utils/Icon.py b/src/versions/pytop-0.0.1/Pytop/utils/Icon.py index 882ec4f..4130e4a 100644 --- a/src/versions/pytop-0.0.1/Pytop/utils/Icon.py +++ b/src/versions/pytop-0.0.1/Pytop/utils/Icon.py @@ -29,61 +29,55 @@ class Icon: self.viIconWxH = settings.returnVIIconWH() def createIcon(self, dir, file): - fullPathFile = dir + "/" + file - thumbnl = self.getIconImage(file, fullPathFile) + fullPath = dir + "/" + file + thumbnl = self.getIconImage(file, fullPath) return thumbnl - def getIconImage(self, file, fullPathFile): + def getIconImage(self, file, fullPath): thumbnl = gtk.Image() vidsList = ('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm') imagesList = ('.png', '.jpg', '.jpeg', '.gif') - if file.lower().endswith(vidsList): - fileHash = hashlib.sha256(str.encode(fullPathFile)).hexdigest() - hashImgpth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png" + try: + if file.lower().endswith(vidsList): + fileHash = hashlib.sha256(str.encode(fullPath)).hexdigest() + hashImgpth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png" - # Generate any thumbnails beforehand... - try: if isfile(hashImgpth) == False: - self.generateVideoThumbnail(fullPathFile, hashImgpth) - thumbnl = self.createIconImageBuffer(hashImgpth, self.viIconWxH) - else: - thumbnl = self.createIconImageBuffer(hashImgpth, self.viIconWxH) - except Exception as e: - print(e) - thumbPth = self.getSystemThumbnail(fullPathFile, self.systemIconImageWxH[0]) - thumbnl = self.createIconImageBuffer(thumbPth, self.systemIconImageWxH) + self.generateVideoThumbnail(fullPath, hashImgpth) - elif file.lower().endswith(imagesList): - thumbnl = self.createIconImageBuffer(fullPathFile, self.viIconWxH) - else: - try: - thumbPth = self.getSystemThumbnail(fullPathFile, self.systemIconImageWxH[0]) - thumbnl = self.createIconImageBuffer(thumbPth, self.systemIconImageWxH) - except Exception as e: - print(e) - thumbnl = gtk.Image(stock = gtk.STOCK_DIALOG_ERROR) + thumbnl = self.createIconImageBuffer(hashImgpth, self.viIconWxH) + elif file.lower().endswith(imagesList): + thumbnl = self.createIconImageBuffer(fullPath, self.viIconWxH) + else: + thumbnl = self.nonImageOrVideoIcon(fullPath) + except Exception as e: + return gtk.Image.new_from_file("resources/icons/bin.png") - # NOTE: Returning pixbuf through retreval to keep this file more universaly usable. - # We can just remove get_pixbuf to get a gtk image - return thumbnl.get_pixbuf() + if thumbnl == None: # If no system icon, try stock file icon... + thumbnl = gtk.Image.new_from_icon_name("gtk-file", gtk.IconSize.LARGE_TOOLBAR) + if thumbnl == None: + thumbnl = gtk.Image.new_from_file("resources/icons/bin.png") + + return thumbnl + + def nonImageOrVideoIcon(self, fullPath): + thumbPth = self.getSystemThumbnail(fullPath, self.systemIconImageWxH[0]) + return self.createIconImageBuffer(thumbPth, self.systemIconImageWxH) def createIconImageBuffer(self, path, wxh): pixbuf = None try: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( - filename = path, - width = wxh[0], - height = wxh[1], - # preserve_aspect_ratio = False) - preserve_aspect_ratio = True) + filename = path, + width = wxh[0], + height = wxh[1], + preserve_aspect_ratio = False) return gtk.Image.new_from_pixbuf(pixbuf) except Exception as e: - print(e) + return gtk.Image.new_from_file("resources/icons/bin.png") - return gtk.Image(stock = gtk.STOCK_DIALOG_ERROR) - - def getSystemThumbnail(self, filename,size): + def getSystemThumbnail(self, filename, size): final_filename = "" if os.path.exists(filename): file = gio.File.new_for_path(filename) @@ -97,6 +91,6 @@ class Icon: return final_filename - def generateVideoThumbnail(self, fullPathFile, hashImgpth): - proc = subprocess.Popen([self.thubnailGen, "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPathFile, "-o", hashImgpth]) + def generateVideoThumbnail(self, fullPath, hashImgpth): + proc = subprocess.Popen([self.thubnailGen, "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPath, "-o", hashImgpth]) proc.wait()