From 7e4e14eb0afe05fc6e78da6521d8e89d94397426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Santilio?= Date: Sun, 1 Nov 2020 01:44:16 +0100 Subject: [PATCH] Add files via upload --- .../howto/api_token/LR7EGXjHCm.png | Bin 0 -> 42022 bytes .../howto/api_token/LR7EGXjHCm.png.import | 34 ++ .../howto/api_token/msedge_zmozPZZj3p.png | Bin 0 -> 52015 bytes .../api_token/msedge_zmozPZZj3p.png.import | 34 ++ .../icons.pngs/delimiter.png.buttonicon | Bin 0 -> 283 bytes .../icons.pngs/drop_column.png.buttonicon | Bin 0 -> 146 bytes .../icons.pngs/drop_row.png.buttonicon | Bin 0 -> 150 bytes .../icons.pngs/tools.png.buttonicon | Bin 0 -> 439 bytes .../icons.pngs/translate.png.buttonicon | Bin 0 -> 462 bytes addons/file-editor/lastopenedfiles.lastcfg | 2 - addons/file-editor/plugin.cfg | 2 +- addons/file-editor/scenes/CSVEditor.tscn | 425 ++++++++++++------ addons/file-editor/scripts/CSVEditor.gd | 349 +++++++++----- addons/file-editor/scripts/FileEditor.gd | 35 +- .../scripts/GoogleTranslatorAPI.gd | 2 +- 15 files changed, 616 insertions(+), 267 deletions(-) create mode 100644 addons/file-editor/howto/api_token/LR7EGXjHCm.png create mode 100644 addons/file-editor/howto/api_token/LR7EGXjHCm.png.import create mode 100644 addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png create mode 100644 addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png.import create mode 100644 addons/file-editor/icons.pngs/delimiter.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/drop_column.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/drop_row.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/tools.png.buttonicon create mode 100644 addons/file-editor/icons.pngs/translate.png.buttonicon diff --git a/addons/file-editor/howto/api_token/LR7EGXjHCm.png b/addons/file-editor/howto/api_token/LR7EGXjHCm.png new file mode 100644 index 0000000000000000000000000000000000000000..fb99a52f1f03d49d83680bb1734778194f9d538d GIT binary patch literal 42022 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 O`5;$pE>~W<^Y}kFWq>XK literal 0 HcmV?d00001 diff --git a/addons/file-editor/howto/api_token/LR7EGXjHCm.png.import b/addons/file-editor/howto/api_token/LR7EGXjHCm.png.import new file mode 100644 index 0000000..51b8875 --- /dev/null +++ b/addons/file-editor/howto/api_token/LR7EGXjHCm.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/LR7EGXjHCm.png-1cc143c744f882fbc86edc7d2318e169.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/file-editor/howto/api_token/LR7EGXjHCm.png" +dest_files=[ "res://.import/LR7EGXjHCm.png-1cc143c744f882fbc86edc7d2318e169.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png b/addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png new file mode 100644 index 0000000000000000000000000000000000000000..2d09fb74f86727efccb1c069d8b3eebc2cca12d4 GIT binary patch literal 52015 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⪙Z_8CMNz= zj|M63Yt%E|+`F;SZYb*jS+?<-K-z2re5mnFkrL$Ylq0Khd$=4(C3w=x`yrVq!C0LY zcJ|W37~qPMaD}L>Z9CWt{F4t?h*2M^uBE@)fr#n&vA1?c-GRRuim6qJQ01^MxtbYL z7+LnF?cJhW%{4RMz%xwm9+>9Q&xs*PqHYUAn(cQ*>>3yqjAMnZ>b7qk04-Af2md#< z^61!DnX7{;1tu?{KgLWL4_$n!qjTEL-Cg?X4((L)%0gdOh{1@&6@ljj(w2C=hC|xBjo*Ne5wPi1Mw>EZi5E6|7{h` zWM($4&%sGj5~Bl(PCC}Zql=ce)S<_DWn%!=jJCp;h7xiQ=NGoew{h&NCaC<-S`|{= zt0n@Ej`6*srx=a=rm?h@ik(#M; zni$j-H^j9C?wdgW6y*$wJEFIEMvX2Y*}pUz^Uy|NSTh{AGNBI{ckTe5Xb#fDu@jlQ z`Q{0Nifch3(fdLEry}ygEL)4m#txu_o9x>rW&VS8-5-}^-j$sG%&T-${a}6Zv52)Z zT4Gmc-w94z-3EN`8D$AYX_GMv(MppAy>>;H`-R%e?qVk^s6<4$Z z5bBe8@gJxne^g%?{PuO$1v$gL(2VeI`hr9pItMOLl}9vK9#Z)2 z9sPU4$Uo(K;;`p>b^jD@xi0Z%Lpf|OlVNxFe zDR24A2h<4q8WB{BkIgz8#>$ZP*Lb0LX5bBH@^U4&prFG#z4jZM1z)ZdvD|AnB%!43 zt~@AjCCaeaTQiY1m;%< zTqKw(owzW?6G47z@P9`4KOy5{n9N3ww!C|P{wP%hnQP{JChA@JY3OADK)3j8^ex}c z7d)&M0R7=!!0o1A@-~rulneS=NYz^j%fFftc0OuZ_z}g!jZ>Kgm7Ky(6$|3TV1CvZ za3i06vhVnJk$uh$->X*-KV!0uz+A%J%1<~{mlP`%xnM5r($uml1CvJc_DjT{nbB&C zwo$(``*727(1x!83~*~S9i5!(?-c_@LB9H*X!B1s8EJei3NtO@ z6f5KA8H!0?VXA8)fW>$pBxXJetWZ!*L6~69>4k)gUb}SyY9pnO^kTC-WI&}dE8l&1 zKk5Wt!@|I(kaNrCVbjYIQQ+68BtOFV5O^@&&0k~NKU8Wx^BGde34JZUCrhz%MrZ!JFV;W1U8UF$jLpx@z^8n`=@)t(HfWI6~Q|TEyq*g*tnwd3t(&y66wM ztpik!F6{#hs%7&lC;w271~Aoq8qbG8v>0GB>qixF?yfyUa`xmN@AlHl+yF)go6HJ@ zDixeUwaR+^sCi$_w1e%A+*g~L>|9)M%GSM$Qvmz6d1CSXqDn~@)2p}Bym0p%=g)NE z3;QN#33*5btX5$B(gysp%k@|5P^#XpUmZx?h((;8xl=kPqwKws5HSkY{ zW<$?anuNR!i62Xmc56My4p!94Ym#tr1jY3_507*ChDg!-B&;k^-0~fPvAnl9d}yYR zpTC@iU_el18X9+ZmCO50ls@~U1`6@QXHvj%h|S&7MxPrX`| z7#mV)Q>#5%^%>1f^lyXaB1Xz|v1V4e9D(;Jy6vxQ%nl*CV|TBz2NL3EH$n+#n`y(M zc%RB?Av^8y!frli8bm8>M(bEu8wi%W8G6@+!-Zsfp62u1Pca8@xU zr4%*Ap*)1shzXG54YRaB!aF@e!LqbJ=>JXbIGG&QdjVCOEM;3!A6>N;g<2DV*?n;+ zYb*p-5=Ju~2no3jFAmdY(!6s8(7X@su0^klz%~V*nV~Q?chqUCt-n7Y+^BV$Q@W%6 zY@)evcD!TSnY_EYaIk(|gu#nV!DVvtoLVPnS`==oeL~Z**~$hc%?MUpk$62sZ572r zohWuei;fxzyh!{zB5(7cvZTr5E;8MrZ|p{YKN@%Veo!>T0PtCH$$> zX^z&-7uY6OJ<3^dB}*bFT5-HFMlW@U(@-W?Ko(}gIoh!`-~%(lI8vm(RRfB71IR{xdtj@C}mMzC9))c;r59@E9*2;TVI-d4`Li~9YVb-rv zkIZ-u{1#b7zJ3{(PAJcQzLqlY?)5{-bY3Hy;Q3b6bmm)=ajOP(D!+yvTTc_j1CeAQ zXgb4I=Zo;x{>uQ96VJbF^2H6%xcQQ;?2wtt;ZxBS$M!?yNCn^SMnUo4C-DX>_LeOy zGG=K$GpN&hoBo$hv-Gjr(Ob}z+$>{|XF!%jOoSLhlZ=%M9qlt?!iMXeNfifh;)a*% z+Md}kt1nmby^`t;O&JYa>6&wjKmQWax4XK2u)ZIf<54E^N$Sf6jhhcrNv+*9l-Q4T zEMTcG%JH0eb$MJq&WH4D-&Moc+B#=xTTOtn0n)k`{-B8O#Yf*%A>mv1V$V?na5hdP zxU+nQR=ar5Kb&XhEBVslGoM)+i|%QCtN^hpXM z<&^u-LYpBP=Cf6~PChL>)H@2m+=;A3TL#6o(_q`fQ5np1d)$-8;pDD%!8qTQwy%0j zGt#)!<=cDJJPaCf23m>qrH0tHV{E4kUwL+)_2dt!&AxY`kNHL>%?Nm$tnR8Gfq)h^ znN5lC$c0)DIGbGgL{=iRb#rUkG)@vPUTqP=rY0dv*-RsmN zsV?wN4_K(15m;IxAQ_mDUit#oMzm0|@Amj-0MXs7WC5|pUOkz##@X&$k*L(EHqs%= zBD#A)1mh=utHuUvfG;Q^lZUd;aX)V2eZNN@wvaw7V<#IpM8z2CP6ob^QZq8U?f`y8 ztILtsv6G_JWh!iFSo3KH%8!z za|+&TQ}!df6%vLCibO*Exjz20bs@mA74Jlli z%TlrR6DYkpPoe(jfnPs?Xm0;+kN53Ez)9}>-@V9{*w2)%U|W!cY5P`z@ZUiSV{$)^`UbJ zq1ki1Bk1Kkhjc%)?~zj7gssV361C|GofSY0_VI&joC1kbzxNkyn>`V00isv%b93zA z@BXe={?sk=&_0@X;O47JPPjYhwJ?N1$WU9c2AI`at};n&#WC_h z_3-|v>5e_>NHy`>ztY2};zX{+?tlF37tkM}_3C~}^U;Clpq1^hecd_p&41zR=Oan; zKY|sy*dMUDkDib{(YInfI5`JEqK}rpou%Y?=40OWy#{vbxgWi9scJVwl`L{c-cg=y zbK53=5_*R+jW6GBEt0O*BakU|`o2y2s~T!H0&zo1>*ZP)&e&lS{7P;S>rsY2_Q;~6c1C>*)J8;A{!%O7b=z6SthO7r^IhX0 z{KPjsK0`y_?tgeK4rpIRL)Y|sobkfawR{Y?U1MuU(N{06 zRcn6TwM)%kiC&0#1o{od_M%&&uV8*!3g72SyK3JdUe!+5K){P3DGqT5<3#wwBG5Y-A&Jsl@rCM!Hkihv zH1R8Z#dImXSjUU#;q)>5+WgMj^P(*y5*6>=y^`jKi&u^upt~y&D+TrcsPsG(w+xT3 z*Jo((%?o^mYb1kS!O}K%eQ`N)A?F%)(8WH_6HqCjG}EgQEzlA~$n(Xmfd!zj>RWY> z{HsSDe7Z`CBEmzr66&UnpIBuTwi&Knak#;3$b~iKKF0x2cY8*c^(@xYqv9zfW6K$z zd5j2xCLVqP%F2|3mYwkqNP(wV7#QYA-Iq~OiE8m~vQg7cC` z9LM5I&^v=gdc=w01&X`jb@_gMD7h6qm>v>g?`6lc3J-0z^%iV5EkYOB2m`br%N6S-!TvLvh8R*x*8xAp7J(LK8MiWpZ-;ITcmwWt68*joFiglLu~8R`P#;NcPuzvwbWw#h znz`yihd^Nt8cZsDNSgI8f_JaEq@isx^Iq@D{ zUurf_^Ca9 zsN=)UIa0IGuXQ3YO|xOMPL1*F2pG%pEKRIzM#yc)HpA3iX4tk3W=1G`#iE-Po|$+J z+i^Q6Dk;`mA)_3&6wVhl(>nN}ux=;=E@WZ~A38L+4q^e^%|wwA*KET5lB-HeV$8Mt zE<&pn*52B1tZsXBG73Lsz|%_voK&&ERP32}Y~DS}xAHn6m`P>_J+XgO4Givid%QmP zPU542CYjqqAp^zgesz~>PAGdV_iy2an4i(HluWXywMFuGDAp7+;L(GJraRvhM)^Ca zc!3^{>)XY}E1kJ%3*3mBWaBObKT)HVJLgkKV7;jq7xA=N&G z%zXoMeT%g-;PcR%WP>FDtqs`GB&T+gfWs|$D0g~d1hm20&;#{!>&mgC@* zfOq8h|8Y~vzh>#NQpCL?b}%ULr`pFQz67W_fBTo8K+2s*& ze3{1s;;)N;j&4%yt}d~6W%HC+8)_u|uimaZoXz*$cWY~OD7AH|5~Bo7%q|^ft*G7B zh`mD82vtSxuM#za){2-V_G~F>jl?Eq(I63~_hFTzjetF#dLG&kU{P+pZPQfJR+^(_MW+qFo2#U19&FfKkcHiv_IiQ%?Y z)Kvhr3CCQ!W?r42UIe(@e|)}<%I4!idJ1cNa}fq$G8XEV&P8Z6#vfpIsc@vVI zhSk?NNXE11S#@=FJ6FD4`b@!%^~C1Ptt6JLh|gr`=1PUZJD6p;%GIhT7E0U?uGjdZ zc0by#x?Scn?0DF1e2BJ}ysqV+brA+Pi@VTcCMv1Q;@|l#H+{8$MYIy>XkVdNOK=tX zS|1J$`*di`dZEf{T^Oqtb=TMTqc^*UIM3E_MPo|;(|MY*xv!{=2~4o!b}BZLl)JiS-0||bt9KtlMFwy%*mwL z;1Nsu=vYx9&I!63pjdoi} zPozULEePwqZj?2DdnyMe-KD1%Wv|U!AGBDPAF3B**Gm-oS^7TO#!|~9JJWYG2|R73 zEeh#*s+O_+kl#&}x7Yjz>G@W&^RXPXlb=1fSD)@djshFgSa4AnPx?yq=Qz`B?BL#r zK?f`iS{S{69Hb=Z8yRDgl!72q!G})vyJ>)|Fl5zUF>7l!P>tf8{4&~zkciWdqRUdU zkmJI|c%fWPeUrXGh^jtpq}x`3hv0PGkgnf;W_%-Lqym7u5K>TrfGw4%#5WU4;W)06 z0tS5QS~}K;EfYe?BT<1SWe4<~qvob^8i7*di(_{99C0N>qHA%Jox}=rH$K85}He6WzOb1=nY85MoMB)0Y#c^uvRspv}shy-ZU1=!S69q7aNUU zZ{Ib2{zymeW;|F>&ij(pM)o{8bkhWaGTCmjqVFjb`7Da@DQpe51c|XbSeqKhm*yI( zlY1;4<9^$1kvfO&GbSGu>1MwXDEZTYNg9M{lbaLZgYmlBm}Grd&GLcB&HZSYp^Qug zg|`=-p8@Y%O_fnycjkZ%7Rzo|JF?^oL6{H?(vGb2<1a%DP50ymIc68ocG@ zXWCEM1jDDyV$_YZa$^QUncB$Z`f-0VQW*m15Oa$o)+9P5}%h}zLB+j zV=}{wHN%8j22hFAt4E*%#;Cw?d1 zVtZ1nSl>ki()2j8WMetzH_;X%g#Vd;&Z*vw1~o{FEhnEZh3`sYU#@)PRT2rL?&I1K4IcreOyJU9idx((dz8RP z_Emj8pJhvOAT;|1r+Nr#(lv~8_fm{1kRMTxEf-PI!d-{&K82cQX8=cH`GEl;Cs!u* z(xDm;Wlh_H@8;f|)W+J_Xa*+OX+(C)PmicJ$BX>YFFvs9UP|r$Wp-*^|9Z)8QsLZt zqlHu~6*_gT%87R|XQ>ExJ@g{A2ld6hm8uY@u9}a``xP!=)%ct|_%wCYPSf z4eJg?(w-K*CcD$m{FL+SU@it-*FNkh$vkh7&Xt$tFJb*O5>+|gOB#uqR^}IZMj`qp z^gCPUL1od$4R4x4wwuiHhQl!shLlSpGDI`m(|Z7hNG|*AX19dPiNJ$tV^``dxADMRUc)B@YOHu4kQ?Cx%J*!306an z4hYbBzAhyWV=8VjmlC(MX)W6y$TbU5L&Lizgo*cDWC%E^rkMzQhh(N^Ym8tD6cPv)kQNR zMF<=s|Eh0J)`R8v`sE6)eH)6i<~VD{>FBX*l?xp$AFwitHP$~^(8rf}Z$gC>WdWS9 zsv{j?pOKku{7?NCjxg&xJfl@i;rwz($B6#NjCfO4a~*S2gLh$_5AuV+YG4EQgjRcE zkIJpEo1pKYbx`DJpI*TCH37QO?&TgH`oaHQ_OUYMScSK2@wmsjO5_=uXG?L?l%~YuX zW|F}f`o)~JDp!}hiwV8NWC^3CG-#IG2pM_J*N2*v~CMU^|NM_#QTsRn6FlU$wU1xr8j@6KRhvJx zb+GmBBVK(hv8v0a(4=eUQ(A15&=^(uY~+yYiG8Ut?_J{_z44{hk>!Fsf-eOj$FsH3 zQBjH4P5BLiyJu6z>ry=c(4Oa#1>X5;(&9EG=g*TPReKAIbALwGzL`f0(B=MG_asW% zyy`s*o#kEv``Pg9@vvB~YgmEx&n_isf$Ukn8#8Bpd(1W%!g1eV3lv`l?O|jg0 zDtR&+kj7TNk@kBV(^D>D^ih2jLr;;KXHo!|;%WPg>Yz-o--fGRsT#7J;_yC-W|}P5 zSh`xI^^{K!!s61~Q_m63c`+m%_FD4cu?!%SRnrB?W@c}#^r8sDjKcEH#D?K~ znM#q)YwJSv)h;vj1)VI@o`7Inq9q1pQj_kihsr-int08Kzk@WDEk}{%%vhV>-RLqC z70P`y-(L)X9>pJZvS&eft-u)%y6I+}8n1*2G#+yj_-P6(P8Uf zJj@A2WT7;9MA?`%vL|+`cY9DgmoE>_9MbO0*L;e0O>@(*ReBXl*s?;K_BXo*9~x)M z0MoExYfNoOaxWh_zgt1OY1+Upx1UhVc1=9#(E_LzZ`3%48XQ_WZGts<4IK0_+o7 z!eI|FKMm-=(BqmHlm&(@V04EXB-?%z_%-ikrA?&`Q&*|Z_CLv>#ri*Y zbA?OcrWU>PjA~vn-%*^O{;~ZFr+D$F=GG;qzKBjKXhqpu0Y*ehEoZ0FuVgR&2L?z(c~|R3 zGAi?D@Dclyk{107!>xrRotv}=%T8A}2+w1Lh3q`*HJ4kC{*H@wbTh!!ZlA{oWRyxs zdITS;Ot-!zdDQ_8ssmKdnI-;M7OTeU0jQ4jBUb=_ zE=e;QRxL_Cz&k-jSCw~zrsku8fPqZ#L_wqXU8)(sDJXbonb}loLDe!Z7 ze(mWC`r5n&btl*Ycy!km0-A4;9rz6v>5FjuGc1>mnj?&$t}Zv95vaBiE!arN3UDwH zN#=$#`T;S&%@$+Bm8LIVwp@%wW?_`_g^83huO^b#s-{PL_N&R zFi;jr3Sv39qrS6$870;{?>83#BsPDaZe9P%?;~tn3usqTfi!xf^i-C^Hhx|-3w9$y zXE=gA3>J$;OoswqVH%y!3*QCVDrbwg*xHwZ6vw`6l>Jg~rWfuC%Oj?9cRf2FmckY? z`1wVg+kT|nrcGhDVyf|Gl560PzYcnSthp)cD>5D@sGgfrhPGVc3l>Rt$rCEZ*5ot< zn}_}pcr%SS(ga!v2d;W1C~flUw#b;$p!m3f?}0$$$stt{%0CCsbmC$vKNc456IK!T z@BS!auBHNa&K$j}&)s)1=~M&XckW{i+#2vo6(jof>kXn!QyH&Vc#(m?A?{7Ym-qFG!s+NCGT<#Uh+=Dqj{A5LhcckB>mU%-SE#kH9=3)qTTRc4(r7Z#T_ z%1+t*9?HCsal=Js?#xj{1h9@eWvK z;+N%qbW@WRW5@Pys$^Plz* zui6L?LgG;3+CPXLIzI+Ej#w)I+les?5m?YY4joeL4mmcLRj~lYoyUXTVU5BFr{_bW zKJJH=Ce&cQHmW;lRpqv@;E%)3)XmfX<|R+v1N|*r-ag&-7uERY-uZtEmK<+A|0YUboPWn6YG!4-ul$=@zGhzFiwQ{&%y0+w?3`O`oKu z>wnvN&mXyY&Sl&!xH(xZCG%qM=3bz)(k9bwF^fI1>Xt7M%?Ppm*ad6iST#9vJHdZ8 z_TUPW(RA9*!}6vJJi@_2x?#T)pwM%iz&K$dFioeDWGgm5I&PffgtAr1sX2?%#~S%1 z)rE37e@y6EBEl;J7mk=0<1H$16CcHX^3xDOkjD)z!I%v13SkO<_LiPqt6&P{+OcW@8$WG#kqd{m{CM z?Eax4@*z1m@31wLWm60CQYhhPq^{fSpj^9yFLiTg>qM^F1MPd3B89&Bl7!O z-o|PJZjpnyPo8k&+_xRHY-yvk87L&w`6@k)16r?pK${7+EbtF5$wIKK`At3R_G~%a zb=hSsW|Nneo;0duaaO)w9_!E?A9SBV&xNc*6g|!ZucC(8lN4wakbUjJL_?;LD$7F~ zeEUzap*D7^#uP63Iql-gQq8&Kl1c9>%oGsofIsR}2ErL4jMncgVBtkyWj&Vlhm&Hj!>5;{!7= zfme3(OF^aM1BupFvm48q2FflTum&w4a}riN0p}%OoCua^)wE!oh->Y#Sc_PqGM-kh zdiYzk1q|OBxWS}ikm|JSfRC4u6xNKvq!IO}h7^ZTXWgA0-W64uXUe3irVSYp?K@nL z-!)D;WC++)Y!2oG4diS$ODc}%2(d@wgN^l`4Enj$I4#ClLPJFHhH(3gbQ7pXrk06u zD$IV|cLwm@Hp8#cO_Qi%GJc?{EunrWlbE;N-Y`)#whu>o-;vgew$;H)^%++86QL*e zSoO^z7ww$xRIAZRWktKR1*OvIr+%FW6)^KULRn&&?;=`KT4KrtqZ5VD*!-h1+gT59 z_#(*r?hn1{Av>^TZO7~jNx@UPV6hoj%+OOA9Y&!(@Sd}8FR!@USt~93!8i2Wh^WK8l4)YXY3TLE z$4-BG_^hmNRUTX-M_9q%KY}8xkaEJR#eF@3)SxkS;02z?eu`aN(Q1k4ba-GgZ*eNB z;w2_r6)9?pF@MPu5N)c%JGE=9U{;Z^XOKAuD+EZY8dATpj0;=Oiw@MG#y@RIPeGqNfg{qmK2X5(kB zNx*|#Eq1)pykR*Opw2qgJ=H(2(RR`9YA;4Zt+4s!4^s~+bevQ;3Z8$RonINj1VN`6 zO$sV-#ZMcRG(U0L^#ogGU8mrKcwzh)JzzA@YIx0LW!#;qKkXjw-Hn-Xf=@X`Rks?^ zf)B^rF7A0iIbJSqT{5t@pgu|G&-`=<6Cru&?6`cze#1RrIrwO=SIQ%s?7Z(Q*VGWa zLXn+Ljf#R|4Lxl0HkNq};=d}6y!L&E6h%{k8|kN^-zwbMs^mKoG$jOa@RZKUdC}Z7 z*&Up42DNM`JVj>Q#(pKb`xQ?kTBXVgEoS{v?0L8tG^va5G!H|?Jj|#H0G4=fMMT{N zaRXP6O;yNOy_OudeFvO2G1)>++2o#VS*y4Acs4gr^Hx3oh;TS>7fxs#ZkkZO_mX&7 z!Q2GB>`(g^|5~@^NCm;jLNy^hM=Tla4w~?8I5;-Cc(J$Cc}(MtkWNG_Q!6Bl^!;~K+Gii_+y zO02v2_UPAke)=~y(e2T<@H%~q?le4yZpXSyNI?g4Cqmc?1hW=&cv-xauKf;O(drIn zrp)S$?%e8%4;pHJa|jirx%PG;;9T%NRqdpc`T1q0I4-FC6FVm>;~~k~i~Bl0J3k38 zk*OhV-&WDsmS`z!(8Qt2xd*$eW8=+7t57HJv#E?A{bz!Cb}r_R)eLFmw4Pg3bvS;s zr}@$N5hL_P56(tNjxv+}P1)Yx%<4*F_d_8dicyZ$3N9ydq7}Q(K)0%fd|Ag-dm1%( zXi`J94jh_%lDT;3Cdr7rn+_QkbNpRBq{H#gtdy3wdz7>E4ua)-yeQ*716^y{;<9QE zFtI3uvh5j%RNjxlew?a!@c=4gP|^MFO`Ma+f}JUv5XPVWtUXm_q2~^7@6FC{%~q<@ zZw}j~yY^KyQba6fj0xSz3rHQptd38lwarK?K~&*;YiX+oTbFX^<2#>}B~glnu7oSY zC*x-(L#GkpK>l}^@N#*#=n*ZzW)mO-DK%?Tyr#4*Y#%gD&mGjt3D!-~8fo zf+w$k%SIa!e|-9Wu~064rAXZMrzbD}?y=v9zh2`4|7%dUo&0wDISt2dA0t`I9PESZ zKG!LaX)nSrwtUHR0T)}6j#A~3b0v7uVQ=_zueLM~x9Y6@ZVC|f6B5RX6&Y=rSi4^7 zXP8dhzEC;I)pJ&=fusX(?Klg~QK<|BB~87i{HdD`KP4vD?lZgPZuL&b?sC!TNv*mw z2Rg+3#gwUh(lT`h5?XU$-w1X#%C&}_BFCf^WQs}dazGKasFnAjdriKwV`o!ZGx8N$ z9a?1cS<-z?m8InB7!XFTtWiRnD@u7c*lFZzerNQdFs7y_O(&4$}1lAY>7pP zwRcaNdf~e`u%IPKWg!))Ynrb*0-EiyHk-!UoII!VG{%7m81pSY%c*tElYE>*6qa(s z#o^}}-B7d0vqZ$@)6n#?p|8-c4U63uFKvp?86_XQ4JlVNZ*VX$yt69ZH!utZCE4Pu z!VYa?!AXn!{UoV1e&1I|SiXIeE6d@L>dx_KVLWP-u4za6v<)C|V3SBxh>{btx)6FaB?~fQb33 z7WOS+3`&&t+-OUixCW}#QSo+DS}nX+Oj8`{S>Hax3DwGPX_~ik&N1-n?877oc(-9f zXs@9D+=`Q+&jTT@yOorj@4CL!=Zy>OOPPx8$FSO>GnMoSr<0dLV^)l$(P)66ZH>bZ zb9)qr^~;#v@!t>6+JCnHZw*VKID6=t>8iNn%P58j_J#!>|K$qY{cXv<)}M68mt4zLf0WL7PeWbw z)@{{+kAUeogPjr+^oP?D6s)4DsNEFQ#XP&@WJMP&8woLc~VDn#2eLBuJW?NJ8Px?gznG3 zqy<@(Q3)u){3yCZVI9W**irUJ`4}$)+C?6usKpxhvHOq%KO739fBLk4`rS*xleOFm zUejmZJb+q%-k{4HlLsgxNx3&yR2`7(mPNoim2cT+ze+CkK6>K!EQW%#Ts(6$CuofO z*eO9gXoJxre!`V?bn#O+UDr?Ql}A->l21I=)7G8z>^y1Op>I@{!}aFeWqv$}$$jj* zb0O36$N7bbGwcCEVk+@~ literal 0 HcmV?d00001 diff --git a/addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png.import b/addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png.import new file mode 100644 index 0000000..9b7ace8 --- /dev/null +++ b/addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/msedge_zmozPZZj3p.png-45b22e8e658d9e618635e91966d71bb1.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/file-editor/howto/api_token/msedge_zmozPZZj3p.png" +dest_files=[ "res://.import/msedge_zmozPZZj3p.png-45b22e8e658d9e618635e91966d71bb1.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/file-editor/icons.pngs/delimiter.png.buttonicon b/addons/file-editor/icons.pngs/delimiter.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..104558e6563c85e9693cf1c774deb8d62b81ea2f GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt(G&T^vI!de2@|%wq}^X?7hDZ6LeVji0=ZMPLaI9El z-A4U&9|T2h{#hvVES|KT$!<{>SC-D^1kt9=4;0@oJZ!;bUU9y9#{Z|^1?>#E4!Orx+>Fs}hf_%&1>FVdQ&MBb@03pnAwg3PC literal 0 HcmV?d00001 diff --git a/addons/file-editor/icons.pngs/drop_column.png.buttonicon b/addons/file-editor/icons.pngs/drop_column.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..30cd03ac364e4a60564cd79021596edb47419972 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;V{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$s6l4qV32_C|{}~vh|M!CQFqH)P1vC7Qo~X1H$P@Q;aSW-Llbn!{pka4h ipr*@!Nh>*lfuZsh|NY!q*Ybc$7(8A5T-G@yGywq1*ddkx literal 0 HcmV?d00001 diff --git a/addons/file-editor/icons.pngs/drop_row.png.buttonicon b/addons/file-editor/icons.pngs/drop_row.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..db9e23acbd2f82c2d77eedda9bfd8fa5cd6e2c62 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;V{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$s6l4qV32_C|{}~vh|M!CQFqH)P1vC7Qo~X1H$dmSTaSW-Llbn!{u;Tym m2M1V`6d6u5DDU9#VPw!)$dhYoklF!M#^CAd=d#Wzp$Pzdz#{zs literal 0 HcmV?d00001 diff --git a/addons/file-editor/icons.pngs/tools.png.buttonicon b/addons/file-editor/icons.pngs/tools.png.buttonicon new file mode 100644 index 0000000000000000000000000000000000000000..4fc9258f742da0c98aec781b705aeeb88b34f788 GIT binary patch literal 439 zcmV;o0Z9IdP)QrjQ{`u8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Yphe zK~yM_rID*nLqQORzuC})i$YOBdM>;Kf)Ydp4?u&$ATUT&LmdiD2oha*03;Uy2_XT6 zDR6cVvOy6-KQrjQ{`u8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10b5B# zK~y-6oszLiqd^pfzmqWw!Cu^0Onzh|mfE;tEi8*{vyeg`!D_Lwun@#25X5c^!Cg_` zz($B{lgeU+4RI!gXkl%U5bqWa62zY*o@SVP=6?5F7y-l>zXMyq4Dc7INILZ1|6qWW znonOFX4cHItU3r#NRt6BB-McHK~1j#(*Tn8z4s@;(I|j1;0jnWv+WpT6<8lBfuv2K z3(NvLz+_7FG!(#lUk5%*I!H*b-Ueb=iE2oYfAI+KU;2ZS7OXNF#rGn07*qoM6N<$ Ef_V void: var hotkey - hotkey = InputEventKey.new() - hotkey.scancode = KEY_C - hotkey.alt = true - edit_menu_options.set_item_accelerator(1,hotkey.get_scancode_with_modifiers()) - hotkey = InputEventKey.new() hotkey.scancode = KEY_R hotkey.alt = true edit_menu_options.set_item_accelerator(0,hotkey.get_scancode_with_modifiers()) + hotkey = InputEventKey.new() + hotkey.scancode = KEY_C + hotkey.alt = true + edit_menu_options.set_item_accelerator(1,hotkey.get_scancode_with_modifiers()) + hotkey = InputEventKey.new() hotkey.scancode = KEY_D hotkey.alt = true edit_menu_options.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_R + hotkey.alt = true + hotkey.shift = true + edit_menu_options.set_item_accelerator(3,hotkey.get_scancode_with_modifiers()) + + hotkey = InputEventKey.new() + hotkey.scancode = KEY_C + hotkey.alt = true + hotkey.shift = true + edit_menu_options.set_item_accelerator(4,hotkey.get_scancode_with_modifiers()) func _connect_signals() -> void: align_menu_opitons.connect("id_pressed", self, "_on_align_pressed") @@ -89,6 +109,7 @@ func _connect_signals() -> void: $TranslationDialog/TranslationContainer/AuthToken/SecretCheck.connect("toggled", self, "_on_secret_check") $TranslationDialog/TranslationContainer/Buttons/AcceptBtn.connect("pressed", self, "_on_translation_accept") + $TranslationDialog/TranslationContainer/Buttons/GetTokenBtn.connect("pressed", how_to, "popup") source_lang_menu.connect("item_selected", self , "_on_source_lang_selected") # GoogleTranslate.connect("translation_received", self, "_on_translation_received") @@ -105,20 +126,114 @@ func _load_icons() -> void: edit_menu_options.set_item_icon(0,IconLoader.load_icon_from_name("row")) edit_menu_options.set_item_icon(1,IconLoader.load_icon_from_name("column")) - edit_menu_options.set_item_icon(2,IconLoader.load_icon_from_name("save")) + edit_menu_options.set_item_icon(2,IconLoader.load_icon_from_name("delimiter")) + edit_menu_options.set_item_icon(3,IconLoader.load_icon_from_name("drop_row")) + edit_menu_options.set_item_icon(4,IconLoader.load_icon_from_name("drop_column")) readonly_btn.set("custom_icons/checked",IconLoader.load_icon_from_name("read")) readonly_btn.set("custom_icons/unchecked",IconLoader.load_icon_from_name("edit")) + + settings_menu_options.set_item_icon(0, IconLoader.load_icon_from_name("tools")) + settings_menu_options.set_item_icon(1, IconLoader.load_icon_from_name("translate")) + +func clear_editor() -> void: + for column in Columns.get_children(): + if not column in [_zero_column, _column_head]: + column.free() + for row in _zero_column.get_children(): + if not row.get_name() in ["0","1"]: + row.free() + for label in _column_head.get_children(): + if not label.get_text() in ["@", "1"]: + label.free() + +func open_csv_file(filepath : String, csv_delimiter : String = ";") -> void: + if rows_count != 0 and columns_count != 0: clear_editor() + self.file_path = filepath + self.csv_delimiter = csv_delimiter + var csv = File.new() + csv.open(filepath,File.READ) + var rows : Array = [] + var columns : int = 0 + if not csv.get_as_text().empty(): + while not csv.eof_reached(): + var csv_line = csv.get_csv_line(csv_delimiter) + if Array(csv_line) != [""]: + columns = csv_line.size() if columns < csv_line.size() else columns + if csv_line.size() < columns: + csv_line.resize(columns) + rows.append(csv_line) + csv.close() + + if columns != 0: + columns_count = columns + if rows.size() != 0: + rows_count = rows.size() + + load_file_properties() + load_file_in_table(rows,columns) + +func load_file_properties() -> void: + rows_count_lbl.set_text(str(rows_count)) + columns_count_lbl.set_text(str(columns_count)) + csv_delimiter_lbl.set_text(csv_delimiter) + +func load_csv_grid(rows : Array, columns : int) -> void: + for row in range(1,rows.size()): + var csv_field : LineEdit = _row_line.duplicate(8) + _zero_column.add_child(csv_field) + var csv_field_label : Label = _row_label.duplicate(8) + _column_head.add_child(csv_field_label) + csv_field_label.set_text(str(row+1)) + + for column in range(1,columns): + var csv_column : VBoxContainer = _zero_column.duplicate(8) + Columns.add_child(csv_column) + csv_column.get_node("0").set_text(str(column+1)) + + for column in range(1, columns_count+1): + for row in range(1, rows_count+1): + if Columns.get_child(column).get_child(row).is_connected("text_changed", self, "_on_editing_cell"): + Columns.get_child(column).get_child(row).connect("text_changed", self, "_on_editing_cell", [Vector2(column, row)]) + +func load_file_in_table(rows : Array, columns : int) -> void: + load_csv_grid(rows, columns) + + for row in range(0,rows.size()): + for column in range(0,columns): + Columns.get_child(column+1).get_child(row+1).set_text(rows[row][column]) + +func save_table() -> void: + var file = File.new() + file.open(file_path, File.WRITE) + for row in range(0, rows_count): + var current_row : PoolStringArray = [] + for column in range(0, columns_count): + current_row.append(Columns.get_child(column+1).get_child(row+1).get_text()) + file.store_csv_line(current_row, csv_delimiter) + file.close() + + emit_signal("update_file") + +func _on_editing_cell(new_text : String, cell_position : Vector2) -> void: + emit_signal("editing_file") func _on_secret_check(toggled : bool) -> void: token_line.set_secret(toggled) func _on_translation_accept() -> void: + error_lbl.hide() var token : String = token_line.get_text() + var tw : Tween = Tween.new() if token in ["", " "]: - print("An Auth Token is required in order to make translate requests to Google Translate API.") - translation_dialog.hide() + error_lbl.show() + error_lbl.set_text("An Auth Token is required in order to make translation requests to Google Translate API.") + add_child(tw) + tw.interpolate_property($TranslationDialog/TranslationContainer/AuthToken,"modulate",Color("#ffffff"),Color("#ff0000"),0.5,Tween.TRANS_BACK,Tween.EASE_OUT_IN) + tw.start() return + tw.queue_free() + $TranslationDialog/TranslationContainer/AuthToken.set_modulate(Color("#ffffff")) GoogleTranslate.set_token(token) var source_lang_idx : int = langs.find(source_lang_menu.get_text()) if source_lang_menu.get_selected() == -1 else source_lang_menu.get_selected() @@ -130,12 +245,22 @@ func _on_translation_accept() -> void: for lang in range(0, langs.size()-1): first_lang = get_checked(first_lang.get_next(), target_langs_idx, langs) + if target_langs_idx.empty() : + error_lbl.show() + error_lbl.set_text("You must select at least one target language to translate.") + return + var selected_keys_idx : Array = [] var first_key : TreeItem = keys_tree.get_root().get_children() get_checked(first_key, selected_keys_idx, keys) for key in range(0, keys.size()-1): first_key = get_checked(first_key.get_next(), selected_keys_idx, keys) + if selected_keys_idx.empty() : + error_lbl.show() + error_lbl.set_text("You must select at least one key to translate.") + return + var target_keys : Array = [] for key_idx in selected_keys_idx: target_keys.append(Columns.get_child(source_lang_idx).get_child(key_idx).get_text().replace("\"","")) @@ -146,8 +271,12 @@ func _on_translation_accept() -> void: Columns.get_child(lang_idx).get_child(1).get_text(), target_keys ) - var response : Dictionary = yield(GoogleTranslate, "translation_received") - var translation_table : Array = response.data.translations + var response : Array = yield(GoogleTranslate, "translation_received") + if response[0] != 200: + error_lbl.show() + error_lbl.set_text(response[1].error.errors[0].message) + return + var translation_table : Array = response[1].data.translations var i : int = 0 for key in selected_keys_idx: Columns.get_child(lang_idx).get_child(key).set_text("\"%s\""%translation_table[i].translatedText) @@ -165,13 +294,23 @@ func _on_align_pressed(id : int) -> void: for row in range(1, rows_count+1): Columns.get_child(column).get_child(row).set_align(id) +# If an Edit button is pressed func _on_edit_pressed(id : int) -> void: + for child in range(0, edit_dialog.get_node("Options").get_child_count()): + edit_dialog.get_node("Options").get_child(child).set_visible((child == id)) + + edit_dialog.rect_min_size = Vector2.ZERO + edit_dialog.rect_size = Vector2(250,100) new_rows_line.set_text(str(0)) new_columns_line.set_text(str(0)) new_delimiter_line.set_text(csv_delimiter) - for child in range(0, edit_dialog.get_node("Options").get_child_count()): - edit_dialog.get_node("Options").get_child(child).set_visible((child == id)) + for column in drop_columns.get_children(): + column.queue_free() + + for row in drop_rows.get_children(): + row.queue_free() + match id: 0: @@ -180,9 +319,86 @@ func _on_edit_pressed(id : int) -> void: edit_dialog.window_title = ("Add Columns") 2: edit_dialog.window_title = ("Change Delimiter") + 3: + edit_dialog.window_title = ("Drop Rows") + for row in range(0, rows_count): + var check : CheckBox = CheckBox.new() + drop_rows.add_child(check) + check.set_text(str(row+1)) + 4: + edit_dialog.window_title = ("Drop Columns") + for column in range(0, columns_count): + var check : CheckBox = CheckBox.new() + drop_columns.add_child(check) + check.set_text(str(column+1)) edit_dialog.popup() +# If Edit Option is confirmed +func _on_edit_confirmed() -> void: + # Add new Columns + if edit_columns.is_visible(): + var ref_column : VBoxContainer = _zero_column.duplicate(8) + for row in ref_column.get_children(): + row.set_text("") + var new_columns : int = new_columns_line.get_text() as int + for new_column in range(0,new_columns): + var column : VBoxContainer = ref_column.duplicate(8) + column.get_child(0).set_text((columns_count+new_column+1) as String) + Columns.add_child(column) + columns_count+=new_columns + + # Add new Rows + if edit_rows.is_visible(): + var new_rows : int = new_rows_line.get_text() as int + for column in range(1, columns_count+1): + for row in range(0, new_rows): + Columns.get_child(column).add_child(LineEdit.new()) + for row in range(0, new_rows): + var lbl : Label = Label.new() + lbl.set_text(str(rows_count+row+1)) + _column_head.add_child(lbl) + rows_count+=new_rows + + # Change delimiter + if edit_delimiter.is_visible(): + assert(not new_delimiter_line.get_text() in ["", " "], "Delimiter not valid.") + open_csv_file(file_path, new_delimiter_line.get_text()) + load_file_properties() + + # Drop rows + if drop_rows.is_visible(): + var rows_to_drop : PoolIntArray = [] + for row in drop_rows.get_children(): + if row.is_pressed(): rows_to_drop.append(int(row.get_text())) + drop_rows(rows_to_drop) + + # Drop Columns + if drop_columns.is_visible(): + var columns_to_drop : PoolIntArray = [] + for column in drop_columns.get_children(): + if column.is_pressed(): columns_to_drop.append(int(column.get_text())) + drop_columns(columns_to_drop) + +func drop_columns(columns_to_drop : PoolIntArray) -> void: + for column in columns_to_drop: + Columns.get_child(column).queue_free() + columns_count-=1 + for column in range(1, columns_count+1): + Columns.get_child(column).get_child(0).set_text(str(column)) + + save_table() + +func drop_rows(rows_to_drop : PoolIntArray) -> void: + for column in range(0, columns_count+1): + for row in rows_to_drop: + Columns.get_child(column).get_child(row).queue_free() + rows_count-=rows_to_drop.size() + for row in range(1, rows_count+1): + _column_head.get_child(row).set_text(str(row)) + + save_table() + var keys : Array = [] var langs : Array = [] #var source_lang : String = "" @@ -248,7 +464,6 @@ func check_source_target_lang(target : TreeItem) -> TreeItem : target.set_custom_bg_color(0, Color.transparent) return target - func _on_source_lang_selected(idx : int) -> void: disable_source_lang(langs) @@ -282,35 +497,7 @@ func _on_more_pressed() -> void: if edit_rows.is_visible(): new_rows_line.set_text(str(int(new_rows_line.get_text())+1)) -func _on_edit_confirmed() -> void: - # Add new Columns - if edit_columns.is_visible(): - var ref_column : VBoxContainer = _zero_column.duplicate(8) - for row in ref_column.get_children(): - row.set_text("") - var new_columns : int = new_columns_line.get_text() as int - for new_column in range(0,new_columns): - var column : VBoxContainer = ref_column.duplicate(8) - column.get_child(0).set_text((columns_count+new_column+1) as String) - Columns.add_child(column) - columns_count+=new_columns - # Add new Rows - if edit_rows.is_visible(): - var new_rows : int = new_rows_line.get_text() as int - for column in range(1, columns_count+1): - for row in range(0, new_rows): - Columns.get_child(column).add_child(LineEdit.new()) - for row in range(0, new_rows): - var lbl : Label = Label.new() - lbl.set_text(str(rows_count+row+1)) - _column_head.add_child(lbl) - rows_count+=new_rows - # Change delimiter - if edit_delimiter.is_visible(): - assert(not new_delimiter_line.get_text() in ["", " "], "Delimiter not valid.") - open_csv_file(file_path, new_delimiter_line.get_text()) - load_file_properties() - +# Set a LineEdit readonly property to TRUE or FALSE func _is_readonly(readonly : bool) -> void: for column in range(1, columns_count+1): for row in range(1, rows_count+1): @@ -318,83 +505,6 @@ func _is_readonly(readonly : bool) -> void: edit_menu_options.set_item_disabled(0, readonly) edit_menu_options.set_item_disabled(1, readonly) -func clear_editor() -> void: - for column in Columns.get_children(): - if not column in [_zero_column, _column_head]: - column.free() - for row in _zero_column.get_children(): - if not row.get_name() in ["0","1"]: - row.free() - for label in _column_head.get_children(): - if not label.get_text() in ["@", "1"]: - label.free() - -func open_csv_file(filepath : String, csv_delimiter : String = ";") -> void: - if rows_count != 0 and columns_count != 0: clear_editor() - self.file_path = filepath - self.csv_delimiter = csv_delimiter - var csv = File.new() - csv.open(filepath,File.READ) - var rows : Array = [] - var columns : int = 0 - if not csv.get_as_text().empty(): - while not csv.eof_reached(): - var csv_line = csv.get_csv_line(csv_delimiter) - if Array(csv_line) != [""]: - columns = csv_line.size() if columns < csv_line.size() else columns - if csv_line.size() < columns: - csv_line.resize(columns) - rows.append(csv_line) - csv.close() - - if columns != 0: - columns_count = columns - if rows.size() != 0: - rows_count = rows.size() - - load_file_properties() - load_file_in_table(rows,columns) -# ReadOnly.pressed = (true) -# $Editor/FileInfo/delimiter.set_text(csv_delimiter) -# ChangeDelimiterDialog.get_node("VBoxContainer/delim_read").set_text(csv_delimiter) - -func load_file_properties() -> void: - rows_count_lbl.set_text(str(rows_count)) - columns_count_lbl.set_text(str(columns_count)) - csv_delimiter_lbl.set_text(csv_delimiter) - -func load_csv_grid(rows : Array, columns : int) -> void: - for row in range(1,rows.size()): - var csv_field : LineEdit = _row_line.duplicate(8) - _zero_column.add_child(csv_field) - var csv_field_label : Label = _row_label.duplicate(8) - _column_head.add_child(csv_field_label) - csv_field_label.set_text(str(row+1)) - - for column in range(1,columns): - var csv_column : VBoxContainer = _zero_column.duplicate(8) - Columns.add_child(csv_column) - csv_column.get_node("0").set_text(str(column+1)) - -func load_file_in_table(rows : Array, columns : int) -> void: - load_csv_grid(rows, columns) - - for row in range(0,rows.size()): - for column in range(0,columns): - Columns.get_child(column+1).get_child(row+1).set_text(rows[row][column]) - -func save_table() -> void: - var file = File.new() - file.open(file_path, File.WRITE) - for row in range(0, rows_count): - var current_row : PoolStringArray = [] - for column in range(0, columns_count): - current_row.append(Columns.get_child(column+1).get_child(row+1).get_text()) - file.store_csv_line(current_row, csv_delimiter) - file.close() - pass - emit_signal("update_file") - # This is the loading function used to initially build this node. No need to use this anymore func _load(): # Load Rows @@ -418,3 +528,4 @@ func _load(): label.set_name(_char) Columns.add_child(column) label.set_owner(Columns) + diff --git a/addons/file-editor/scripts/FileEditor.gd b/addons/file-editor/scripts/FileEditor.gd index 67fd0bb..7f57074 100644 --- a/addons/file-editor/scripts/FileEditor.gd +++ b/addons/file-editor/scripts/FileEditor.gd @@ -434,19 +434,20 @@ func open_in_inieditor(path : String) -> Control: return null func open_in_csveditor(path : String) -> Control: - var extension = path.get_file().get_extension() - if extension == "csv": - var csveditor = CsvEditor.instance() - SplitEditorContainer.add_child(csveditor) - csveditor.hide() - csveditor.connect("update_file",self,"_on_update_file") - current_csv_editor = csveditor - csveditor.current_file_path = path - csveditor.open_csv_file(path) - return csveditor - else: - current_csv_editor = null - return null + var extension = path.get_file().get_extension() + if extension == "csv": + var csveditor = CsvEditor.instance() + SplitEditorContainer.add_child(csveditor) + csveditor.hide() + csveditor.connect("update_file",self,"_on_update_file") + csveditor.connect("editing_file",self,"_on_vanillaeditor_text_changed") + current_csv_editor = csveditor + csveditor.current_file_path = path + csveditor.open_csv_file(path) + return csveditor + else: + current_csv_editor = null + return null func close_file(index): LastOpenedFiles.remove_opened_file(index,OpenFileList) @@ -517,8 +518,8 @@ func save_file(current_path : String): current_csv_editor.open_csv_file(current_path) OpenFileList.set_item_metadata(current_file_index,[current_editor,current_ini_editor,current_csv_editor]) - if OpenFileList.get_item_text(current_file_index).ends_with("(*)"): - OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index).rstrip("(*)")) + if OpenFileList.get_item_text(current_file_index).begins_with("(*)"): + OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index).lstrip("(*)")) # OpenFileList.set_item_metadata(current_file_index,[current_editor,open_in_inieditor(current_file_path),open_in_csveditor(current_file_path)]) @@ -573,8 +574,8 @@ func json_preview(): func _on_vanillaeditor_text_changed(): - if not OpenFileList.get_item_text(current_file_index).ends_with("(*)"): - OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index)+"(*)") + if not OpenFileList.get_item_text(current_file_index).begins_with("(*)"): + OpenFileList.set_item_text(current_file_index,"(*)"+OpenFileList.get_item_text(current_file_index)) func update_list(): diff --git a/addons/file-editor/scripts/GoogleTranslatorAPI.gd b/addons/file-editor/scripts/GoogleTranslatorAPI.gd index 5adf11d..58cf5ba 100644 --- a/addons/file-editor/scripts/GoogleTranslatorAPI.gd +++ b/addons/file-editor/scripts/GoogleTranslatorAPI.gd @@ -30,4 +30,4 @@ func request_dummy() -> void: func _on_translation_received(result: int, response_code: int, headers: PoolStringArray, body: PoolByteArray) -> void: # print("Request Result ", result, " with response code ", response_code) if response_code != 200 : print(JSON.parse(body.get_string_from_utf8()).result) - emit_signal("translation_received", JSON.parse(body.get_string_from_utf8()).result) + emit_signal("translation_received", [response_code,JSON.parse(body.get_string_from_utf8()).result])