From 7a03a3dc6a8a14fad508a59888aef4579751ddae Mon Sep 17 00:00:00 2001 From: Maxim Stewart Date: Sun, 16 Jun 2019 15:12:06 -0500 Subject: [PATCH] Reverted to Iconview and added guards against segfault --- bin/pytop-0-0-1-x64.deb | Bin 19836 -> 19484 bytes src/debs/pytop-0-0-1-x64/opt/Pytop/PyTop.py | 4 + .../opt/Pytop/resources/PyTop.glade | 120 +++++------------- .../opt/Pytop/resources/stylesheet.css | 15 ++- .../pytop-0-0-1-x64/opt/Pytop/utils/Events.py | 14 +- .../pytop-0-0-1-x64/opt/Pytop/utils/Grid.py | 85 +++++-------- .../pytop-0-0-1-x64/opt/Pytop/utils/Icon.py | 5 +- .../opt/Pytop/utils/Settings.py | 7 + src/versions/pytop-0.0.1/Pytop/PyTop.py | 4 + .../pytop-0.0.1/Pytop/resources/PyTop.glade | 120 +++++------------- .../Pytop/resources/stylesheet.css | 15 ++- .../pytop-0.0.1/Pytop/utils/Events.py | 14 +- src/versions/pytop-0.0.1/Pytop/utils/Grid.py | 85 +++++-------- src/versions/pytop-0.0.1/Pytop/utils/Icon.py | 5 +- .../pytop-0.0.1/Pytop/utils/Settings.py | 7 + 15 files changed, 186 insertions(+), 314 deletions(-) diff --git a/bin/pytop-0-0-1-x64.deb b/bin/pytop-0-0-1-x64.deb index 75e21a34ece815e0637afa98c867668b9bc16ea7..b408fd7e63cec977ff66b38effb360d30c5ccf8d 100644 GIT binary patch delta 17441 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 delta 17796 zcmV()K;OTdm;wBn0gxO8Ha9mhH<2Mb1vWP~F*mVcKLQ0dH#adiks%iaF*z|ZG?T#s z6&LfA0f5j2ApsTu00000KPS1u;b;F!YqRYF;RSz0uZh*%Q-;af^2!tV+CJjouJQOIF80<&PLR@j_ zV}C%BxdR1(22>xYUyX^TGRXsW*+Cx*S< zhF%AN6Wb^Isrzw+{E|||G-1UdrBoBqIJySCt})&0oJO(GfVFheGUzM%(Dg~m$bx^z z8@YXl!EReuJ;Yf)kC*GKbiTvoY*UTEu!b=~og`OQRlKv4`^e)UCQs{!i+N-!X7?Rj zCE{78jiZs#asjBATU}?CMLd3HV_UxBQIF8Bl~T%+44dJ)0wY^y)$U{Ei!+FK_WeK zBucgpo5#YX!Wv;VMDw(>vS@FtInVT(pnr`W!$wSJEo4Dv4$aC?BLbtD%a%TbktkRNFP;9e2oQk5x`19C4B5aeeXNaj zoUt0tP)URQ!Zx>7uXHlmT{V9h2=8JSK1Gb-r`OnerM$JHsT$Mni|RWYn>KupOR;k| z0^1hY(&fcEFX6;7boznIDC}qe!qH_i_+0jPsLzKDEgTeuc>|h|7Vx}WNs9$YPPRf> zxdZ&cJ(V5_2b}oX>>w}aJ!5L_cFbVuR6QfuKPWDEpaZ);j31oe2nK(BaeRu^cdi$* zQ>r;-jwBp;HUlwzhYSk(rc@rJPmXWy$pD3W!-e!kO)-8eWChA9Bge3wV1$)!8GxG# zy>1roU&hr9S7&GA=VUP&W-J2E{sAUHzu5})p@I!BROCfrU*iTF@@2!6)-14fV-5<#g0B{=r;g>m87ay>6XeQ z`ZT)OVl=fDye&$^+!kZIwW3p9c%I<0U{?%zTcKV!(W*sn7WV1%xLk<|TGVM}y--9~ zd9dT8Z= z@sDe%RcuVBQnGQa1GXv$P-c)3VnJ)y;)8yhiEW05{jb2#0Vgy-nbWEJi?tv(D9Upw zR|a8Ujo60v11x_j?4d6A2g)Eh^O7VAyj6~eqOSPui@CjsuE5_cnR>p`L-Z$7pG-d& zXVUhcnXds1eeJbX?&BZod1P^xN#5`(wTl`QfSNhwuDN?y@V4?ayAbRMMy>|rpoa(@ zEcYBOo?d1sJUW;SwSlH%nc_t>lovC--2SPpI>H z1Zq|`H#K!2w=nv;lmhAIccKBL?5p@`#OFs2#0`J8CxO-VrEm67nG;2hlfB{f-A9_f zSV&a)^-U_=hX_7}?{&)Es0#2hq8zM4i(c|^dN=)TT_mlA#OK?Q>JV!*zPgd>rtE;2 z@Crv?Jv)ETs!Vi3r<*MywO`Ba)D=UiNG6dLVkOdcCgZ>n{ID>+%cUHcTH1CNHd83R zvad!1nA$T$Yy5-{R#Us`KKOT2;OCtVK~#Rtjhqh!lZzD(x^g5?Jd2CE)U$?=Z^UVp z-lHM3(B__Z=`~1|V?GGwsFQKGAOSRl;sF@Rg0p`&k{ig-HXcYC;225N98w*swD)nx zB|YF_k2#%=X3yw|kgqi5#tdIt9UeSVY?Z&L!ir888t3!LyuI|*dolcpg(7b_<4Ih5 zw=Yym;0|}$t_{dWvXW}aA{G2EIn&jqncPC=brjHHdNn6q+S&+cF)mUNIr>}>mp^WP z`A2^dcyK3loM?WM?p9+{Y~waeIjoN88KQF`Ix-h~#-%z5FgFoGuUt7rO@Gtlk<0)z zU87acd;$5|`}STfUfcRoDF27<*=4tD`q`6)xUhtikMVUp6BYm~{;;Pc3z?9T6o8_X zj(N+k+({glr*c(5?z?WW?wU9ppht?ps|kPhV)?i7#fBL;i487uqSghedYbAu7gj6a z?-J+30^OgG^cm^TAQ-bgtB%S#u4~jPiKv5}3KU&!%3uen=P$mEgw1Q!gdKS7afHH; zf~Fzb9wry8X~N6G#&mOX-edSYExn`6!po}SZYZq_HZkrTUV#oVp!VpcAOZwIw6K2y znfSoB#gR@gn^W~`-%FPN0|cPr zf!W>OTkx0{fLJ_8$QSWt7f@xdxDtZI*UhjU@A~Oi!dVja*-)Ho57SNd_R-FM`QNSd zUA@nZrxSgpR5f}n9?{8Dq*+Jz#iM`6l+WZUFMt@buI?3UtNlJ|bJ|_h-AJDx;;D{v z{ewv~BA_28D!xS9_Sw0{L>0Je3;$kwJz4ZxNO_6x?Ilt33}!X@4hp>o`eX|i7Y7A_ zVIc+q@8C7_pLVmbh#QB=zgrM`c4Q#=whtNQ$KC*&G*={oe&~cV6lH5&6kix zbvV7?ep98@-(Kf>;DdVv!i zBwFn?W2?8@r{H<`a&S92m92Ym0E`1GoR!~7+sd3UHd~$hSFEpca2wE1 z3I%H=JtCLwXH&MhF6SE7_?N1%3|x1geu&Ao|pNt;kaXo5Tz5pJi1_^WpDwgs&yz z0A(l^IjDqfNnz!9dC;-LW4J0dpTAbNEQZ)*5-U&y-wIY2Q8%Vr7&3RlgY%Gk zhqrI?iwV_6MV+4;#zBW;g4i9+oZ4k<*TR2}v@ut!DCtG5cCpY3 z=7gTTf0D-I#en{cwak=6cDb2<+xJCj)f3+ZRP4%9`i6e)O)g#edA@HXx4cMH|7Lee zM#Bw1j*b95%D|digFcpjDovj!o6?{21tyla-eLMd6(A|wLRa1UXU_tsMLN2BPb(}o zTeAQAT5f5BD~W%i<9A*7aQ1Q1aqYi!(k*<=@+!1!t}4ts;QvIiB` zDC7jv2;<5cB>mNoL!0`8>(`GnRybyV-VC88r>omz8hARtsI=gZh*noD;FRy1_nx#m z%f%MNfxzTX+M!BcsDpD`q91EBC+|6OqZVvC?(|?OKc%e;XHhvu6PI{VMbpZZNe z2`=`|GuM9-Tt%>fw-uV+L%^g**~D3m8%^?%uZ(h#=T(pkY~rNPI@ zYj~qgeH4b#=;K7@BRQ#XdG(CY|4Ga!b9#<=rPY7A>U=j;sQuKxyv#ei_-U=$6+Ay> zS8$7A595VrZu_QExH*8X)g>m#TeW!f0po|Xwhi%pcxG=5?kj?Q0Q={m{~`a+lq=J= z5Vmb`7R&)(J?H0GYwS&p8^v(bUaf+- z*}{LIDohHSzz0zhDV}DN;uKs6Tyl4rUWyw~wqn_3qAj`UVr5+V-V1)UJ)J@lqDV}z z2oR<}cY${26NPvtTg>B%eZ&42w^?LOv<+<^sFX_lh5C#L`+;!A0df;Q#1sVV#rK+? zwtiqfX@B49cf-+c8Cz~+Wk22N%W9l%&q$1zdpV42w?yHL!+HV%_D zUcYMF0cA=G*O%8N-V+t8HD|m`6u}YQjY)Da{U5W5`K7P#^K^!-p8rNnvYK$r^VfgW zL;wFUfv4+@f^t+>1xyJz+0469zh^P*MM%HC?rwSU94XUe3QsLQMXMPbbX^~gUm?3I zM&-?!ol%f|WwzlLWwtQHJPzCfJ5T||CafW2x&);AmW+&JUVeHSx4;T?OVO#X;Vuhg zgy)}!`Z1Y;C^K37ktK-U+0e_Vk~4pj{|-KVk) zk}|d#=oQ+giPR?J{xx&}0=GOk+pu)pC4-fxDG5<#%c>`kOu)0V8{iJ$?z|SJE(8%0 z7FrOUP%DmYjAc~OVi7J~eb*=P|G&v7l*3tCL?f6^j~m4iIe5%kW}&2ih?aj4nAZ6fHfmo_RPfWw$$Qn8wR|U>Z-kR(vP^JMe z=IHjx$0y~|WO&ZLfM%{}xW85fkL1mdb1LYMp8@BWeK=b%CMGo_tP%JCh(lZQ%?lAi zW=^f?w`#S9Y*tY32e;YDk-fSG+VH=7RBjU<$YF}K+x?-tMkf`qNMe72Ai{ze1fNzG|T+Pox^(Oj{zXbV34XG+0hJtvwb}B-{SJk!ozxYrojP4}{au3_ZvKWvX zH(Gx;S8S%JQ2`H53FCVs4iU~Ha>w7wiKK+6{I3Dt0P>yv;2gG`awH}`=SC_V<#Rs_ zh|-&=l+bTRf-1*7UN?U>!vyAsZDGrjeMfm)Q^QzSitvuF(7dBPlG-@P@^t#Co7Lwf z07&O0Mp(e6WvM_r$Gj(*L&ZZAt(L>^k4~C|0m(sm!G+zP8psl9h=yqKK!5)b)-q3L z`M|{rImoLLF;|d#r6Vh>a{!E*>D{n!i3=#0`th1zUDQ;Mvu1y5SAkw_mHOdetS;(6 zU^)oNObmPvr!A{MP1GEGNE}^7-E;G@1F{MdLpeQbnDmxTXW($uyifntR(wVP0<68a zHOCOzU3#Sw6Jxpt)Ziy(906!A76MNO+4A~mySmR6~ zM04@^>DD)_4C8+Ua9m#Fe7_v-{YxUHq-aw{?G$RsGU5RLH-ZW+nql57QS64c%^#y2 z)f-02RqvE9qHQj?{z1O%zh$GwiWs@u69pwd4VGCnGVfoS{`>5ksxVI*54a#?rj($Y zNqA!$h?z~4=S=4XD@dym4vrZf@eqs)11mFERtU!^(&>KzRYaPHWp5S`r4&DdH#u%3 znv=3R#@`xaMqX>BFTcLcS$(s5#2&Ih#!gic3XZ zje%RJn($~e9M{OCHrn!vk2}#&JDYp46=(RlJ>KvNB zzT1Duyn+({>`kp-El}sD%&~Ff(=(<9!JyL8VdpM~;|X5-TQAoe0je0kaja{L{ zd{4Nq5;mZC`Pz0|CM&7oFp=sCtLxs`h>UX)=Z#@*^;nw2QAR$UUF)73#Fb!cO&U+- zHjNs7Z6ls+uwghis+c@fxDG((a1t}3I9kG*EL4-{tRnqQ*b+bfY&)_Q%MxQP`k{Z} zlaifUF*rZ9>iO>aHa(XuGvvGm?|DDW2_mahR}fMW+&?KZTiNbZG^lsA2R!u8QVX+n zxY-_bKx8?!q`kx;_hdMy|0b?6eP3Wo2H{VMr1r(O1qTO1!?2XGYWi6^on%Nm4R`e- zG?!sm4wFdIA}bduq&Z@^oWr)mhBtqQO*UiEWKDCmKWzYX)tjK%kZkE}>2zLZCP7%EcBiMC5s;X5#dvV{#)_}kUIpM4kp zEOY*Ns@-OeRwFaHvM|%wkSVq?CwVi|%HjH>1P65ilLI5`Vj>gXM+JwaHx7Rm4+d8d zL!gkv1O;CKX9{9JM-4p$LX}EhJa*mDH8j(Y`n=VnD>6JHQ}3ja!K$bZbu0bx;3iac zcnMG!*w_X-8j#i4-aza?O)QO9XHHv_3_Npb!&U$ZFiZAi(kZR-8!ghvf=!DPag3v6 z3X1JOrS1#@0;Ki&0BdXJSi1w!a7G3WaV-W*Gt^7`MOAVGq{u>be7C zKP?Cj`0OH+&(Jp794bT#Cx(P>ho}}3vndtWffC7frfj?45+=3`IbD7#BACU*+Ol`5N-GyTVm31LN0mMj z3?3A&kRBhEn7*SvJJq42xqGY-AON`>E(b6xYvJ@irl_kU@f0`JbW|-4HFuA+aS*@a zUpj3P`s?s-d9hR#09JqCWAg{b?dq7I17VkBhjQwW>>Qo_K0fD!Da4Pdy(`CTW) zq8MwqsFt4#Gx4Foqn(FRg)Yo4Czd9gzr87X3F581q~vrc;ILwziT(Ye+3S|L0pco+ z=lD+5Vq}`3mxF;p(8)%wi|`-H0uB&uG#m~curEJ464(c20YQImQD7b7wR?Kyq|Dn| z0jtiY66YS-5ja8pr^O@0ml;Tb<1c|b=36Urr=;pTa!chsN^-7Yft`ZXo0OCO%L%M< z`HD>NGmE9}qU3H4#SA&Pr_Jlt87;yE<$0c+Z*qm^YkAS!T6`)LeHZ(%@KqOR%7C$) z9Bs(7%Ab^_riOpa|00&3X<{7?HjKQie4%_|4nRhVvVEtG9xN`{aG50TT3;yO0iUod ziY055(_VJ{oXZ~Aq;pv^ppt;$jM6Wz>Jm672n!LW1rcM<`GAwVo=Uc5+wh(0scasf zX>WKH!Wxb!?=Mr$xe?1K6Ky-m@C?%Ud@XGtH5vuTx{ZJ0SYXWR&I;Z}F<)@2DXf0< z&6q@iv$N*3Uer)%nH(PRBJcw}3pmKAD-fC^FC@cEn7@JZ8+1Sgm_Y)J@{4*IT0F)f zZG*mj5K9%VB9W*If^&u7>Po!YPjnfb2F8OuyMN+d|qIufUH;$&W2>f(eB2Un^8t^z95LCVZ@?hVcw28 zG`cZypj_gqv+6JF_28Ut&ujoF6c~?&L6I)&LZW|CJwhy$%|IbB3i=-odiSL`r)?n4 zRd|#7{nlZkhQP7vEM{v-eb&DEb)ey0ekccCeF#H{HH7$e?+l7wi9e%R?@>E@gRWM+ zd$-?Sb8ncBj^K)WAB@uej+&A8cjs`L@|3zAkc;c-#SUGwJ(aG}04?>|P~Jr zd>JZZkmJO6=l%YQ?mw~urfTsX6`$*flA>@^h8t|6;a&}}KTNof0pvLnxru}k@5vXS z*jdtV$S17X!@Ri_^I_(KfHah*=^Bn#FZO@jzc%LW-Cidy_e5^JQ&M|Zw`xq}+f6p@ zyrHi2%;ItDC?z=KomabL1!O!j-np#w7d$*6J_qWuc=R;%Z$7Dx$TF+ot^=F)VgjFd zegy_mCCFu+e#pRtitfUZ;%B#+nLiVFrqWY-=I*YS|EKRU0Dyf+iOcW7f3byD%Ef;& zP{2BrtiZ%*!d07>NLVtCUWn`o`W*eRDh_l3%-U10Kw+y%? z88d>YHPcB5irl-djA^v-QydBsxeg+m>`tzVA}nqDjHf^SgZ1|3+QtP&5$Sr=a(Ao#A7!#wz@pJOMoqUZa@n`A6VRElU!Z%wm_pS+!REaH6njQ@U2j3 zEYOoqd}BFh(l&RE@Ae$F!k8de#u$rAA^8d93}WREvhEw$q1b8q*pfEg+(nru5WWa$ z(_RUUfa8K+XomG7_wecEDaB zxLZUeVlbA3E)5)sH-W-!gs*?v_XQqzY91DY&>cI?5nYb6W%;cK7Jl}3ss$IsKW`ua z!_{*Kw#RY1rVzm}<2{1fC*!0GUV#2#$EtQA0sWDgTMP7aS&ng>IBUT{fJ9t<^Fvog zUMu@x6CETM$xLpZ{)B||-|d`rD#GA6dW^1)_@VFETr-^d=zB;8V55I#$+avqjfwN{ z$o(S#z3NEkrZDofQW>fZ5uEAW(XXiqIZd!m{ztqia`i($MIYh=J>NPBK9&z zgUzwsGf%~Ka-xMn(1sVZuv=}Aui~w1aQq>0R@P^5z0&AW1Z}JeNt>g_DEPsLH=tcm zNrDI-d>FgQ5e=%U>R=NTZ)?u$W)UU3XEGVxsJ_%Mf9!uY$FV2_paTP}D|ECfX%Fyn zo*Tx_dKasGB{5V!Otn4 zgc2Lg1A~9_%HWvw%jvsSfn?&<8iwC+7hc9;kN`X1k5SGWVjAxPE+rD##qG?ep&pVC8QK@*y5{Kg8JMTFlFK*l6V zZ)xGzCKvs=Qk~qI#sT61o2e!NIfQlDbemriKpA!&V9Vu0x`xD!#sk9iWzl0#k$G3}n^n7{TZEwNoU=e6%r<28UY!c+=vtX8~7{7Lr5KP#Bvf#BbKYRQBZ#a@=C*adw13bSJVOxhsHG7FFhz~ zRzhv}3PZ^I2GPpDM$mmA>3TUD3562~Wo?Lxm}112g|&1r#8WR!tK}FA;6Hz9unohe z?i#~L9fyqh%5|Xx;~b=1weyq6bxARV$pUj;Uzp8_1bB;jV#l&cAnD#v+{s2Y!AdvK zo}x+=G46c2AX zQ@4&%o`zn1y`2^F-+=*h*Q+eTf4PLqyXS_)^G-q z^9<+Oy|c7R`LJ(edC7v&xNERemLo&a8IlvX)NOlZIm!|v?}QK%q56Lg%RKV7FV+>_ z@)N*f39hlk*@^~rnv=1z7{ZrFrZK|Nk%8Gd3AvFmQg~}P_}3k901G(ujD!|!^cJMD zrgr9R{sGLM1>B~hMzg_R6?)Cd z%f<^!!Zkgoh7Wo}ji!I{bw7HiV2FBNdckiS#o1jyPnqo!69Gui-xx6v%6W)N*&&lh z(MZg6!yh_|WIK?5Is>C}nLo%eCv0PbL>sH{Lr~|9&|5r3^zLJ9@Ju8se{ONJE>*|~ z^2%lhd70{Ouf>gw+$D0t_KqWB99!oG=y_&)z&G~x9aaB$f`5NM0yp9r{Cn%>?&}{< zEkW29njwK&zC#G*JXiL>a3oPrE3DBLQUOsi$52ryk?AmRL5xhr2B(fzY>fXnZ|gVW zeQWIAmsB9|aap!3bGJo!tcdsWjwHHu&A*}|0geZ^x+-O^NGaZ|mL{L(;5J}8o%$JJ zV*%Rt(*8^^L7#v31u)O81-Y(6BDMI&Ot^w_j8ZK7&hwhtW3HyL)Sz7c!ImE;A7h6z zTc3-6v%DhS>I<6LM(DxcCYtYg;A}5<+1$D0%sOe{cAIpodD+?~^+%gH^!#4+kUSlzoY3WY7r1syKh#ZmyA4MIM7R#ua<()hL9U zm987YUPB11hCpq8X81Fj)u>he=>VROJ9vn+?>E?3l0&@bijomkTt_R8805!Cf^)x? zEdsqA9s&@V3*O)3O<-MyHvmAaeDWgyHrS@V&dm|@1?R|?aR`$ivvY{-W9M_h7{bMu zz|F&(t{Z<$-~;YTZoQ)38#i1@0rh2xs=jahK(50um{60O47KfQh-ZH3*UMjfhmL=P zmxZkU4M`)1lrL-Pl4X#0&;lOObnq`~QaYFmGO$2_+sy9yQTLx{;27+#%{U(Buir-*Hz(L z^TU54MEs`k9|H+U#USr8Pw&8IRa8CE`8}*^+0ZDPIn;6?ko{nI6c(Ga5oHfOy_s^^ zGTKt8UN~R>oDVQiq-<;f=fRfd>&*scMUBXq|1h0MRuZE9L?%P3MfkA}`uZK|bca3_ z@%)mWx-SJBgK@Z;P@v4KG^XsLsaWv5MaO@S)JW74l%BjYn=YE9f)UOMa@#zfqo^J0ry1n=Yp87tFZlBYfy(7*KKnewJdG5 z?OaJ6X*cn5MIi*Ob(O!gzupN9PBye$l%nChKkhE?)r5Gjj@tMp2k6~-KMx&jnl8<1 z&aM4$Pl`sz1wQfcki$C!u1(Oe!nQk1ACl7;asKr36s^MBl98z4iiN6k2D_IF3gLDBleweMl0VB0WO)-C&RHX zTP`X42w>|@;km*DV?WePH6;??*JsXUr*;x6#!5#RL0R2tF2wCeY%$4fUv}P z&9+WMGj4z&F73fcNe!Tku?ezU(kyi9T*SbS|oh9Zc2*-M_0d>%hRLbr>@ zNgAn1>|VlI!frQI;JS?vYMKGm>=X0ETUT;Ht}0P`1o7ZQWuqD*Wp!f5=4iSXuP zu`51!_ggJ8^_-HTcEsi~kA>ZG<$d}iL25x~LGm2Ml3HXPnIEWAB$5r{!3x_)>@9Dq zG;%?xFE$h_pErLzbep8>Fu+2c_l!itqP;8e6ocL_?l#F44Ma-XbG?H*#f0?i_H%9R z#*YU{jQhIU_aq3p@D@_HgZ_)j(dPJ_1b&1Y9|Bw?w5{Y!LgWI;kusV&Vt1LI@0$-Y zmT0>-N^#X!Jlje_+gwz>u2hW@p6T!4f|t@?W_CQ($%cPM8neG&OVSv2=_{kaY%DqG zWQ^O1+(EDNNlkRENapma8fcy0pns(h#^C+D!UK5%v~`AiNZKlZ-1zOa!nHVcg-b~P z62AEBD!&Jwy?!EGYTXE}?PP|G)hlGsyPe#T)$|&kY0^iEEW=b$QCo!~U-h6hnt;0B z4kzm!o0G1Gy`zt5k+|cBfl1 z1I)K%%k&6mDX$6&B56y+lb7I@z0^jp$Nf{c6@%n5&@Ep7#kA2RbVRZKLkO)hVBe8B*?MVWTsw)K507J+wL@D9P|b{3kPpRcU9u2(7ZyM6 z3{OJTB!(>eM(2jQguINh-4C8qsvKgJ`6q@fzfO zoNm1+y*=15x~52&%q_kvj7fjj5@B4zAZj)|X~;^(E_$A{dZx5e8L$)vFNqMB&Yik9 zj61S3s_8xv!~|a*mRv12w-beB7Da3kG@I;hDhRGROV5wOY*qO_;w=60^&KG%@wkUr zf`>7^F!pi<^+#=ne`gd_>2S-Ph5B?vNax^p?(LqDAa#^QAtbMniFZ8w}*5Ksdaa9oQ;?XVI3RXFTI)OKdd8%o(D=VQRoUz|PMS5s)arTX$qPl;MTp*dB%Rqg4pb3_* z^4pmo;A^K#2Bs{lY-)ZU!Rxo0(6>1%rGS4h;;98EDRseva0m*lgQnJ9(l^_I0UDg~Kcj0nEWAk; zcObHQc5xHu6X-fJ*Zux!)u*eYx|PU@R`C|4DCd{fA8&tMh8%&SBJX3nCzB-SBZn&( zdxXOFpTa6a#d5<$A9rx2M2~GB@60`%TbH(lQ#ZjW{xqm)B@JXIYLVTLj>e3r0!BbT zmE6dh6RKuWnH4$he}YS^Zmb4UJM-#;R&1fd=6p9JR*gC;T;v;g=^V0e2hqcQPDf{1 zd_(x5zGQzrEepTaQfcvG_P$%ZZuBWaA%5$k_N8?hHDh+oF*I>R7ReVNuiRt?{<~Kf zFl_*+FDJGzhGu_pzn~#bB4dn~_t`^XCR-cwRTX-_OFVmx0CPeaV~mI!%k3=De)HiZ zJ1;dcdBh~H;WR;D4aM(ZEmKz-u4{9-*@TR^#8H3Ncs23@IckjMmzW(E?*2&1S46v3 z-iQZ0rW{PSkJ+L9=-g&OiWoGqd%|mgFI7IbDM^Z|TIqZ4S66rKE1PfU zI?%HW<#bt@@+Gm4Xs#6dTRZ32ikmC_uRy@9PlFtRZ@EGH@z>UQ2SeS9vh=4VpnhSj zCJBFF_AXIX<9vvJ==#t`S8a}q5H;Ch0C0$uPjjB-J9(!Tf$X=N%%e`b9^~l-{QTAx zV<8Nomq46sjr8_An~&S)vG(CFU_zmwGckyMEn{Pp)AI#_Z?BNA?Z4d(z=jfo#-66_ zR|`2SK2CI&nF04~13*a`0kV(0Vx9D(@ASoj?qA2i_5G>3w8pq9ldz6S`7W%~Wp!+=9l9F-@rtP+PI-m``(@h?Bj~y^wik?u za(fa|TN6pO-gw<_#7y5JRG{&Kv&eHxhT+!7nXdjgJN{k?7<^nB;ZUvb6V?vRflx^W zxh2>et`O9EQ;e|XJ-}7GyRI2B;4FXhYYjGKtQI1}i{Fj?-&=hkOmpq-Att8eBeReS zcUB+S*4zW91B7D8?1QO4u7}#U&~Y@M4`N|sPQiPwa1*(j)hPRhYd9Hm5N3y0qM~?2 zKbi9Yx1$;tK5DIX_Zv4hc;L7i_3M*MX>3u98;*YF9j1k@{?^iWs(bKCrw@Oq`esXM zLdf3C2p*>qC<-k6(yQxX>=cyf-CW#-S61sU*5>v3Q&?ok*Wg(NZ@74UbpsF{%9!|(c0g0-9}ss z=2o$VMr_s67FDovrh>(7e0P88Q>RbT&eO=3WiI-GzYhnIG2+}{f8qg0(e?3as$Lm~ zTwKYBco4}H@4p7Vi^$aaYEv||IcPq=z3%79@mxiw+;+SCIB;QN^=%&vv0ydNxI_0K zVF8A%+cEk+(P%`Umjg6t7d*80ykn*u!&wbMADe^f9L)Ep;=*iGrzd|=!-*fqfgO|{ ztH9&RP1(qFqiLX%t6@PltHlKflj;~ySu}>^TBNV9v zdI3!&k57y=vQ$VWQ#(&D4?YL}BOpJ?7KZ1;b!1A0r@O0ZR=u&@2ZrcaHDI5IPD%NA%uSTt+14r3EStK}1ggTK$%Y-!^M2~T%tya62 ztg#r+!}ESxYnz}m$Jf@*+=Ksr=rj$p%!EVKnkarKF*Hm)uIFeX@4Y5 zkP{Z|4MP1GL`oBEf{stwcH{k>X)i%q_z$M9k#VLdVhewwAXU<-3o&DcNug$3M4bY7 z#Wmzy%DD_0+_I&m7MOjO1$UYITK(x|Gx$&fkZ{(EA3yl9Q=tG$C&^6%p~-5MbnQTy0IjV@M_O*!!7_> z-Mhyv?l9pejEVuaIt2R((n8#217gWH8K?(XIUN~A7cut!LeM7ddN%f?iJ{@i_efuv ze(OfEVJ4unRAdzYAig&ajC;~Eow_+{*TUUB8!mqs5m-^Y4n>o|WtqdedwCS9comJg zT@ajS#S}26j8>8Cjdf^m=zozC;Pa09P;OA)?~{5>8{7kUPj7m$B{IaW*T`m`&550v zlObtZ%#F^F5B)X6G!mLiu(O12XN^%Pau$q8F_{kIW@u>gPVofyqJPsyfKn{H`t)dW zmO6iTn1A0hQQm`x6MjFjcB4btclh-wQ$kpN`86sB0TXK=0^!bf7p=hheDG>uIykZ4 z4$hlUBL^-wH5kCwX`$NTQ+Q*ec=DfIpEtA_5xbIa;c;n?d@)sj2XH8b3D_o>{2%2} z^=r6fP+aCpJ+&qYlp~IR=o*65BI|2Q{waS&2jmhDV*OVt$kjf}$Xq)b*E7BX9MMjQZ@DVrDPzXYzn zz_44$;R@@mrHZwMP?D;ea(Ix>T}*#OcFe-_&rGfV&g-ru_Xgcz?F39Ax90zGd&}Yl zCxY*4#E&IPXy!1GMW)0lln4+0kMcX0$Q)fOHt{fYoT($vY6~TvNro+Ob9^~kt-)sI z0$Ga1IVByMm2S@T26D%6x4ECc?7o1>kb_WGhB;9*ATJUQ>@>DyhS`8e4#t0c{YP(X zS_%)I^@@6SrWPY}{vPx4T z-+Fr&HD_qsuvK${Ky*#K^&$Zaa$t;yjM%*4`pMcHrNlK%ORnstMXQwT2;A~7E@*8X zW)7Q-CxFRUKr#tnnf#K|cTj&++A;dskL@@JBX1O6PFL3O3PaB;;C-*hnmYH-6SX`& zWD~J^)yPPtn;dwdQ){bwfn%bH#xDC(3*c+16RgZ%U`k9J!0!!ox6+p>#1D{X%{eiw zKv}v!9WiSc0F}aPqQ6egv~Z~n#`c?n*5={jBq_A5$Ql5}qEU4m#8!VA1!c|u%O6%L zeZQHg2Hbh~RTP3#>;@ARb%DnUPyH3EsN_< zR)|#Vq5Kk6Cg--J-?)FPx8QsY?mg2QcP2`eQ8L)oUwWshRK~gA!rjql`+He)vtts9 zXRXeCu1jkh#T8E=rl(rbPQRZ168!`2XP=$`SRATJ{sAgb=7XHWVDqyJv4+B^S9>hK znd3L#H*;pzI>Q~#RXlM;?-Hwtt4<~lWd{2pUoyr39ST)p_ws*x?2fb}OAOhe938Ms zPXH=5Fi=qa=h#Zyk-JF`*0zX?j}6(^zO#5S2ME)ngwiOx#&5Cm4kW<{{PhkoZlOHG z@?OiJ$zgM=WSiss1za1TM$gPcM3@4^Y-lAM92`TRDN~&8gl)f)Q_)8IWk&M0VeyuQ zPgwDn)}>jr#g%_rKF~2t&Kz}=C0!a7q3MzNe34akds)l7KsRF{$NL@{rVhy;TA0c_ zK#)Z}h5)QnKyR;~eVlqWf|c|}oPFajZA#l6Ia}k5-G)bxcYdFvk%E^2WCff0gI)s| zv#E37zH&xVrr_FDUO6&RkU8sUg>1~?gT)`l$fV_d9DzMwtt%FP#_J|fnyA8^WIliu z{b)fm5AnUBXsjnw9+5$oRpT}XOttpCG0yfaTnz>ofdPTSZ7S$IZq`o2prnINRPrn0 z8(R}{t1@Pwc=jre-;>Dya1=O%*DD!_K=yjd&ayXToTXVZsB#k66}OC1k?t(KD494b zP<0ObAUr)xvG|66rAikvY4?wDaj9a!0NOO;vWyHMh&0l+0j`IbgI(@MDKrh6a3swm zPNAhDX{3bINzBO56%Jz7`r!5?gK0?!q{4~O;IDFGL2((ZTm!7tW7|E4!K|P4!;4^H z@dj$Y3oZsg+sGtOap{eRRlaS!Pt)XW(QBK5K7E_*Zp7e!h}4kl(Rv}ES}F%fCCwn# zhE&0rr#8>7a|ChV3Z?*(LF}R~VU$DU5$t|VUiK3FJa`YLa$wC({nxP1GH~cFQ`+;Q z&<7$t6UmoQnuvcHfW^RMp@ONz7sjXe?!ZXXLTwsC4;^qI+*d6h6_Wqcu()hi^)GgA z)WGAZcO5H#p$z00Nl%I!z^IQe%FkQ2FGMHMxSY{N_VViZ?XjK2%|=>Zx~K;D9ODJ+ zf@|8_PEhs3)T#UUHbrY0S%t4n+)=3YSO{%Jttu2`-?HQ2-@DP9PU2poE-E*_aK!^9 zo*ol8gvI{tpr4lRg&w@jv44H0?D0YZ++x&{_Yl#4Ui1tMTPsD#*U;0+kqiJY8rc;7 z_->QJmf5(x%a!ci!@l zQw>L`-aftCaro|lg|KDHr9ei()zJ6rp<~V{*aC%FV$Q->9RxRMnh=72BIzNcXH3XQ` zIj(3?Ojf!plqctUTIo5HduE$XZ3N&j{pDwfgP$_n%Mfq b00EDc0f5j2#g~qqvBYQl0ssI200dcD2tjsm diff --git a/src/debs/pytop-0-0-1-x64/opt/Pytop/PyTop.py b/src/debs/pytop-0-0-1-x64/opt/Pytop/PyTop.py index ba52412..87c533e 100755 --- a/src/debs/pytop-0-0-1-x64/opt/Pytop/PyTop.py +++ b/src/debs/pytop-0-0-1-x64/opt/Pytop/PyTop.py @@ -28,6 +28,10 @@ class Main: window.show_all() + + + + if __name__ == "__main__": main = Main() gtk.main() diff --git a/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/PyTop.glade b/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/PyTop.glade index f7d25bb..ec53c29 100644 --- a/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/PyTop.glade +++ b/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/PyTop.glade @@ -28,47 +28,18 @@ False - right True False vertical - + + 300 + 26 True - False - - - 300 - 26 - True - True - gtk-edit - - - - False - True - 0 - - - - - gtk-save - True - True - True - True - True - - - - False - True - 1 - - + True + gtk-edit False @@ -82,14 +53,12 @@ False - gtk-delete + gtk-copy True True True - 65 True True - False @@ -97,9 +66,6 @@ 0 - - - gtk-cut @@ -112,15 +78,19 @@ False True - 2 + 1 + + + - gtk-copy + gtk-delete True True True + 65 True True @@ -140,12 +110,6 @@ - - True - False - gtk-go-up - 3 - True False @@ -191,7 +155,22 @@ - + + True + False + select-folder + Folders + Directory Chooser + + + + False + True + 1 + + + + True True edit-find-symbolic @@ -201,40 +180,9 @@ True True - 1 - - - - - True - True - True - Up - upImage - True - - - - False - True 2 - - - True - False - select-folder - Folders - Directory Chooser - - - - False - True - 3 - - False @@ -246,7 +194,6 @@ True False - True False @@ -264,17 +211,10 @@ True False - + True True - False - False - True - both - - - - + 6 diff --git a/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/stylesheet.css b/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/stylesheet.css index e0240db..8095bf3 100644 --- a/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/stylesheet.css +++ b/src/debs/pytop-0-0-1-x64/opt/Pytop/resources/stylesheet.css @@ -20,6 +20,17 @@ iconview { treeview, treeview.view { - background: rgba(0, 0, 0, 0.64); - background-color: rgba(0, 0, 0, 0.64); + background: rgba(0, 0, 0, 0.2); + background-color: rgba(0, 0, 0, 0.2); +} + +cell { + margin: 0em; + padding: 0em; + /* float: left; */ +} + +cell:focus { + outline-style: solid; + outline-color: rgba(0, 232, 255, 0.64); } 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 988dda0..aac0413 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,5 +1,8 @@ # Gtk Imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk as gtk # Python imports from .Grid import Grid @@ -25,18 +28,9 @@ class Events: self.grid = None self.setIconViewDir(selectedDirDialog) - def setIconViewDir(self, widget, data=None): newPath = widget.get_filename() - self.grid = Grid(self.desktop, self.settings, newPath) - - def dirUp(self, widget, data=None): - newPath = self.grid.returnParentDir() - self.grid = Grid(self.desktop, self.settings, newPath) - - def iconLeftClickEventManager(self, widget, eve, item): - self.grid.iconLeftClickEventManager(widget, eve, item) - + Grid(self.desktop, self.settings, newPath) def showGridControlMenu(self, widget, data=None): popover = self.builder.get_object("gridControlMenu") 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 c213e6e..793a37b 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 @@ -8,7 +8,7 @@ gi.require_version('Gdk', '3.0') from gi.repository import Gtk as gtk from gi.repository import Gdk as gdk from gi.repository import GdkPixbuf -from gi.repository import GLib +from gi.repository import GObject as gobject # Python imports import os, threading @@ -18,6 +18,8 @@ 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() @@ -29,42 +31,27 @@ class Grid: self.settings = settings self.filehandler = FileHandler() - self.store = gtk.TreeStore(str, GdkPixbuf.Pixbuf) + self.store = gtk.ListStore(GdkPixbuf.Pixbuf, str) self.usrHome = settings.returnUserHome() self.builder = self.settings.returnBuilder() self.ColumnSize = self.settings.returnColumnSize() self.currentPath = "" self.selectedFile = "" - self.treeViewCol = None - self.desktop.set_model(self.store) - if len(self.desktop.get_columns()) == 0: - self.treeViewCol = gtk.TreeViewColumn("Files") - # Create a column cell to display text - colCellText = gtk.CellRendererText() - # Create a column cell to display an image - colCellImg = gtk.CellRendererPixbuf() - # Add the cells to the column - self.treeViewCol.pack_start(colCellImg, False) - self.treeViewCol.pack_start(colCellText, True) - # Bind the text cell to column 0 of the tree's model - self.treeViewCol.add_attribute(colCellText, "text", 0) - # Bind the image cell to column 1 of the tree's model - self.treeViewCol.add_attribute(colCellImg, "pixbuf", 1) - # Append the columns to the TreeView - self.desktop.append_column(self.treeViewCol) - else: - self.treeViewCol = self.desktop.get_column(0) + self.desktop.set_model(self.store) + self.desktop.set_pixbuf_column(0) + self.desktop.set_text_column(1) + self.desktop.connect("item-activated", self.iconLeftClickEventManager) + self.desktop.connect("button_press_event", self.iconRightClickEventManager, (self.desktop,)) self.setIconViewDir(newPath) - + @threaded def setIconViewDir(self, path): - # self.treeViewCol.clear() self.store.clear() self.currentPath = path - paths = ['.', '..'] + dirPaths = ['.', '..'] files = [] for f in listdir(path): @@ -75,49 +62,42 @@ class Grid: if isfile(file): files.append(f) else: - paths.append(f) + dirPaths.append(f) - paths.sort() + dirPaths.sort() files.sort() - files = paths + files + files = dirPaths + files self.generateDirectoryGrid(path, files) - @threaded - def generateDirectoryGrid(self, path, files): + 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 = self.getImgBuffer(path, file) - GLib.idle_add(self.addToGrid, (imgBuffer, file,)) + imgBuffer = Icon(self.settings).createIcon(dirPath, file) + gobject.idle_add(self.addToGrid, (imgBuffer, file,)) # tickCount += fractionTick - loadProgress.set_fraction(tickCount) + # loadProgress.set_fraction(tickCount) + loadProgress.set_text("Finished...") - def getImgBuffer(self, path, file): - return Icon(self.settings).createIcon(path, file) - - def addToGrid(self, args, parent=None): - # NOTE: Converting to pixbuf after retreval to keep Icon.py more universal. - # We can just remove get_pixbuf to get a gtk image. - # We probably need a settings check to chose a set type... - self.store.append(parent, [args[1], args[0].get_pixbuf()]) - - - def iconLeftClickEventManager(self, widget, eve, item): - tree_selection = self.desktop.get_selection() - (model, pathlist) = tree_selection.get_selected_rows() - fileName = None - dir = self.currentPath - for path in pathlist : - tree_iter = model.get_iter(path) - fileName = model.get_value(tree_iter,0) + def addToGrid(self, args): + self.store.append([args[0], args[1]]) + def iconLeftClickEventManager(self, widget, item): try: - file = dir + "/" + fileName + model = widget.get_model() + fileName = model[item][1] + dir = self.currentPath + file = dir + "/" + fileName if fileName == ".": self.setIconViewDir(dir) @@ -155,9 +135,6 @@ class Grid: print(e) - def returnParentDir(self): - return os.path.abspath(os.path.join(self.currentPath, os.pardir)) - # Passthrough file control events def createFile(arg): pass 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 d6a377a..882ec4f 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 @@ -64,7 +64,9 @@ class Icon: print(e) thumbnl = gtk.Image(stock = gtk.STOCK_DIALOG_ERROR) - return thumbnl + # 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() def createIconImageBuffer(self, path, wxh): pixbuf = None @@ -73,6 +75,7 @@ class Icon: filename = path, width = wxh[0], height = wxh[1], + # preserve_aspect_ratio = False) preserve_aspect_ratio = True) return gtk.Image.new_from_pixbuf(pixbuf) except Exception as e: diff --git a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Settings.py b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Settings.py index 4f3638f..e5ac13c 100644 --- a/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Settings.py +++ b/src/debs/pytop-0-0-1-x64/opt/Pytop/utils/Settings.py @@ -44,6 +44,13 @@ class Settings: if visual != None and screen.is_composited(): window.set_visual(visual) + # bind css file + cssProvider = gtk.CssProvider() + cssProvider.load_from_path('resources/stylesheet.css') + screen = gdk.Screen.get_default() + styleContext = gtk.StyleContext() + styleContext.add_provider_for_screen(screen, cssProvider, gtk.STYLE_PROVIDER_PRIORITY_USER) + window.set_app_paintable(True) window.connect("draw", self.area_draw) monitors = self.getMonitorData(screen) diff --git a/src/versions/pytop-0.0.1/Pytop/PyTop.py b/src/versions/pytop-0.0.1/Pytop/PyTop.py index ba52412..87c533e 100755 --- a/src/versions/pytop-0.0.1/Pytop/PyTop.py +++ b/src/versions/pytop-0.0.1/Pytop/PyTop.py @@ -28,6 +28,10 @@ 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 f7d25bb..ec53c29 100644 --- a/src/versions/pytop-0.0.1/Pytop/resources/PyTop.glade +++ b/src/versions/pytop-0.0.1/Pytop/resources/PyTop.glade @@ -28,47 +28,18 @@ False - right True False vertical - + + 300 + 26 True - False - - - 300 - 26 - True - True - gtk-edit - - - - False - True - 0 - - - - - gtk-save - True - True - True - True - True - - - - False - True - 1 - - + True + gtk-edit False @@ -82,14 +53,12 @@ False - gtk-delete + gtk-copy True True True - 65 True True - False @@ -97,9 +66,6 @@ 0 - - - gtk-cut @@ -112,15 +78,19 @@ False True - 2 + 1 + + + - gtk-copy + gtk-delete True True True + 65 True True @@ -140,12 +110,6 @@ - - True - False - gtk-go-up - 3 - True False @@ -191,7 +155,22 @@ - + + True + False + select-folder + Folders + Directory Chooser + + + + False + True + 1 + + + + True True edit-find-symbolic @@ -201,40 +180,9 @@ True True - 1 - - - - - True - True - True - Up - upImage - True - - - - False - True 2 - - - True - False - select-folder - Folders - Directory Chooser - - - - False - True - 3 - - False @@ -246,7 +194,6 @@ True False - True False @@ -264,17 +211,10 @@ True False - + True True - False - False - True - both - - - - + 6 diff --git a/src/versions/pytop-0.0.1/Pytop/resources/stylesheet.css b/src/versions/pytop-0.0.1/Pytop/resources/stylesheet.css index e0240db..8095bf3 100644 --- a/src/versions/pytop-0.0.1/Pytop/resources/stylesheet.css +++ b/src/versions/pytop-0.0.1/Pytop/resources/stylesheet.css @@ -20,6 +20,17 @@ iconview { treeview, treeview.view { - background: rgba(0, 0, 0, 0.64); - background-color: rgba(0, 0, 0, 0.64); + background: rgba(0, 0, 0, 0.2); + background-color: rgba(0, 0, 0, 0.2); +} + +cell { + margin: 0em; + padding: 0em; + /* float: left; */ +} + +cell:focus { + outline-style: solid; + outline-color: rgba(0, 232, 255, 0.64); } 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 988dda0..aac0413 100644 --- a/src/versions/pytop-0.0.1/Pytop/utils/Events.py +++ b/src/versions/pytop-0.0.1/Pytop/utils/Events.py @@ -1,5 +1,8 @@ # Gtk Imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk as gtk # Python imports from .Grid import Grid @@ -25,18 +28,9 @@ class Events: self.grid = None self.setIconViewDir(selectedDirDialog) - def setIconViewDir(self, widget, data=None): newPath = widget.get_filename() - self.grid = Grid(self.desktop, self.settings, newPath) - - def dirUp(self, widget, data=None): - newPath = self.grid.returnParentDir() - self.grid = Grid(self.desktop, self.settings, newPath) - - def iconLeftClickEventManager(self, widget, eve, item): - self.grid.iconLeftClickEventManager(widget, eve, item) - + Grid(self.desktop, self.settings, newPath) def showGridControlMenu(self, widget, data=None): popover = self.builder.get_object("gridControlMenu") 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 c213e6e..793a37b 100644 --- a/src/versions/pytop-0.0.1/Pytop/utils/Grid.py +++ b/src/versions/pytop-0.0.1/Pytop/utils/Grid.py @@ -8,7 +8,7 @@ gi.require_version('Gdk', '3.0') from gi.repository import Gtk as gtk from gi.repository import Gdk as gdk from gi.repository import GdkPixbuf -from gi.repository import GLib +from gi.repository import GObject as gobject # Python imports import os, threading @@ -18,6 +18,8 @@ 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() @@ -29,42 +31,27 @@ class Grid: self.settings = settings self.filehandler = FileHandler() - self.store = gtk.TreeStore(str, GdkPixbuf.Pixbuf) + self.store = gtk.ListStore(GdkPixbuf.Pixbuf, str) self.usrHome = settings.returnUserHome() self.builder = self.settings.returnBuilder() self.ColumnSize = self.settings.returnColumnSize() self.currentPath = "" self.selectedFile = "" - self.treeViewCol = None - self.desktop.set_model(self.store) - if len(self.desktop.get_columns()) == 0: - self.treeViewCol = gtk.TreeViewColumn("Files") - # Create a column cell to display text - colCellText = gtk.CellRendererText() - # Create a column cell to display an image - colCellImg = gtk.CellRendererPixbuf() - # Add the cells to the column - self.treeViewCol.pack_start(colCellImg, False) - self.treeViewCol.pack_start(colCellText, True) - # Bind the text cell to column 0 of the tree's model - self.treeViewCol.add_attribute(colCellText, "text", 0) - # Bind the image cell to column 1 of the tree's model - self.treeViewCol.add_attribute(colCellImg, "pixbuf", 1) - # Append the columns to the TreeView - self.desktop.append_column(self.treeViewCol) - else: - self.treeViewCol = self.desktop.get_column(0) + self.desktop.set_model(self.store) + self.desktop.set_pixbuf_column(0) + self.desktop.set_text_column(1) + self.desktop.connect("item-activated", self.iconLeftClickEventManager) + self.desktop.connect("button_press_event", self.iconRightClickEventManager, (self.desktop,)) self.setIconViewDir(newPath) - + @threaded def setIconViewDir(self, path): - # self.treeViewCol.clear() self.store.clear() self.currentPath = path - paths = ['.', '..'] + dirPaths = ['.', '..'] files = [] for f in listdir(path): @@ -75,49 +62,42 @@ class Grid: if isfile(file): files.append(f) else: - paths.append(f) + dirPaths.append(f) - paths.sort() + dirPaths.sort() files.sort() - files = paths + files + files = dirPaths + files self.generateDirectoryGrid(path, files) - @threaded - def generateDirectoryGrid(self, path, files): + 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 = self.getImgBuffer(path, file) - GLib.idle_add(self.addToGrid, (imgBuffer, file,)) + imgBuffer = Icon(self.settings).createIcon(dirPath, file) + gobject.idle_add(self.addToGrid, (imgBuffer, file,)) # tickCount += fractionTick - loadProgress.set_fraction(tickCount) + # loadProgress.set_fraction(tickCount) + loadProgress.set_text("Finished...") - def getImgBuffer(self, path, file): - return Icon(self.settings).createIcon(path, file) - - def addToGrid(self, args, parent=None): - # NOTE: Converting to pixbuf after retreval to keep Icon.py more universal. - # We can just remove get_pixbuf to get a gtk image. - # We probably need a settings check to chose a set type... - self.store.append(parent, [args[1], args[0].get_pixbuf()]) - - - def iconLeftClickEventManager(self, widget, eve, item): - tree_selection = self.desktop.get_selection() - (model, pathlist) = tree_selection.get_selected_rows() - fileName = None - dir = self.currentPath - for path in pathlist : - tree_iter = model.get_iter(path) - fileName = model.get_value(tree_iter,0) + def addToGrid(self, args): + self.store.append([args[0], args[1]]) + def iconLeftClickEventManager(self, widget, item): try: - file = dir + "/" + fileName + model = widget.get_model() + fileName = model[item][1] + dir = self.currentPath + file = dir + "/" + fileName if fileName == ".": self.setIconViewDir(dir) @@ -155,9 +135,6 @@ class Grid: print(e) - def returnParentDir(self): - return os.path.abspath(os.path.join(self.currentPath, os.pardir)) - # Passthrough file control events def createFile(arg): pass 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 d6a377a..882ec4f 100644 --- a/src/versions/pytop-0.0.1/Pytop/utils/Icon.py +++ b/src/versions/pytop-0.0.1/Pytop/utils/Icon.py @@ -64,7 +64,9 @@ class Icon: print(e) thumbnl = gtk.Image(stock = gtk.STOCK_DIALOG_ERROR) - return thumbnl + # 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() def createIconImageBuffer(self, path, wxh): pixbuf = None @@ -73,6 +75,7 @@ class Icon: filename = path, width = wxh[0], height = wxh[1], + # preserve_aspect_ratio = False) preserve_aspect_ratio = True) return gtk.Image.new_from_pixbuf(pixbuf) except Exception as e: diff --git a/src/versions/pytop-0.0.1/Pytop/utils/Settings.py b/src/versions/pytop-0.0.1/Pytop/utils/Settings.py index 4f3638f..e5ac13c 100644 --- a/src/versions/pytop-0.0.1/Pytop/utils/Settings.py +++ b/src/versions/pytop-0.0.1/Pytop/utils/Settings.py @@ -44,6 +44,13 @@ class Settings: if visual != None and screen.is_composited(): window.set_visual(visual) + # bind css file + cssProvider = gtk.CssProvider() + cssProvider.load_from_path('resources/stylesheet.css') + screen = gdk.Screen.get_default() + styleContext = gtk.StyleContext() + styleContext.add_provider_for_screen(screen, cssProvider, gtk.STYLE_PROVIDER_PRIORITY_USER) + window.set_app_paintable(True) window.connect("draw", self.area_draw) monitors = self.getMonitorData(screen)