From 611bd77a8971aca66441ef9649dd396dd2112f87 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Tue, 15 Oct 2019 19:15:07 -0500 Subject: [PATCH 1/2] Open in default frame --- easymacro.py | 2 +- files/ZAZFavorites_v0.3.0.oxt | Bin 65441 -> 66856 bytes source/pythonpath/easymacro.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easymacro.py b/easymacro.py index bd5f1aa..7d34428 100644 --- a/easymacro.py +++ b/easymacro.py @@ -3548,7 +3548,7 @@ def open_doc(path, **kwargs): """ path = _path_url(path) opt = dict_to_property(kwargs) - doc = get_desktop().loadComponentFromURL(path, '_blank', 0, opt) + doc = get_desktop().loadComponentFromURL(path, '_default', 0, opt) if doc is None: return diff --git a/files/ZAZFavorites_v0.3.0.oxt b/files/ZAZFavorites_v0.3.0.oxt index 752296da10e5037c753cf0dab4a78794c913946e..0136be9c34b3db2d0b2c15dbd8f23e4c94ca0e55 100644 GIT binary patch delta 31075 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 xf6t7K9TTX(2vzcqj5nun#{y$$x?|%RQ delta 29644 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

%_~v zVT#sG5|K*T5xO7wy)f>Y)k=^hF`S&)hRQ$1|qoF z^(5`3`T+$Z7IwK&&PaN9Nv4$CP0mBwo~w(R zsH%xfa*AkiU`qvR+CpnxIl<%UPaUEP~mW z4fBc}4Th=Fv@-qBB^eL?w2yC~_Yxt#*x$hQ$2><~;La->hUk4dGjc=Qh#BxlcaPMx zxJ-cRc~@oJBj-Dz>~ca5Vba9))C98a;^x|uTJ2*mf;(o|Iq3YlSNh^~KSnhh>iP(J zbeItW{8l%$ZttS?$=p-PH*J~hVss|w9Zh+o6LMTfFQ5Z0UFsxzoV`sc2w*fR*DC`2 zH8_JG*4g?3`jJN8Bu{eFq$P=6O%3L7r5$fggi6=d%ltb_(PH*KbPXNH@BmqLyn92$ zQDX{&`nuHJJ*6H)sPmrAGrcpKO#M47?UMa(&+$LB#;u8H){_Ed`d~FxN~tQly!81z z{50=>Z-xJzjj1Z#-9s?}nJ-oRG-E(h6AgU>RxS*kPfz09{9Rw4-86PwvVJ-R^`=qF zHLOAATDe0!Y4%l9zm~_v+W=Xn326E2WCpowc^Z}!@@v_f!i<|Yc=9Emqe(OTqnUaK ze-(xL6&HOQ@uz0Oa(lLm_~)JsY5JE)y1wNG_+}*Tbn4-L7b1hKMKP4W(l=tPNl~+I zc_@%OWGkRCeb!Z?+{q`9#weu>r*~+;!%F1Dy|$(Cv;XyR4`u-idj)_C3?6=mc1^K& zwGP&Hr-W|tHBlMPmK~gt3H=}rX1EnrXpU6X7m7!5F>xZe4Qsn%-DF}xs>q|dz15FK{LpH(_{AdpTogB3%RLKWA{RrZA0mB)F+@T?B z%JIUf@1Xws>~5YX_B-$&PhJ6pB#9T=O@fwrzoVDYa>D99(oZstMArM68!ym=db+j# zw9WB+@V5gsy^y?;<$rn3J1C#Dv=JMxAemay6iI%J*+C!s187^e>bW_>&>Q+mAc(49;KTYlN>WdjHa@Dd?k*~uY zx_BU@UWY73I;1ec>5n3XWMe&JHx0LEb&0*}=E>^_5?42+l3yZI2zg1XBz;VjC-gg2 z9=d7vFOxXwk^zxHfmxhkKIFKFcqqb6ivrf-_3q#eZUo>;+RKZ|i|6=m5g=c}NZ2mF z1|G_d1nirc<0Sd5m(JLy{Z-O;1GPsF>&lioBnk|hDxz^NvS5f2XjeXDIs9$aI%5M` z%5;|B0!pMtPq$4st*P{@M`PBDS1j8)6x{O7Qq5gV1c8+E^|(-L-u$UeiF4pyk__ z7%X}gR9pkZB}hQ7pC!tJ|8nqp1Ph2=x;8?Aye&zg)q;xrTA0>ihD=kzMGY>q z<1hvW5q2-HR0H3U;e1E~OAk@A3@qh#l#tI*IRL@zCs>Ykhsh5HnW|k7NwH*23)$V! z*UePfKU)oMDVJ~)(hv=lQILvnAK!7sKzY-4Q{DGR*(D50 zkAWu2J&GhnOK};rxN+D!N(bqe17t_yv0(E%U!1VFkW5Jr8@^2qUirukTo* zA7wg=xSDV+o2sL0b>$R(+NLymGc%^qNKM9M#*YIPhG8%p*;Ke2G|PmoeD&$BF<%mS z(BX9}Ura;I9_47=gwspPmCwUYHarzxSrR`eOhfUB%>*}n^uta?iG06NY85RLOThCO zvwS!<^6PT=v;CV5>yh97)xw+vX#-0!hlNe}qZBc}o>m~XjMAR4OlzVQFHfD7`3TM& za!^wgH8_f3Ouw67Ts&j7PXRVtD;b34`d;=*v=Kuc)KO~IBpo-IY$s7@f}znM;^(G3 zrN|ODA|NLIT8}!CmSXUdU#(U z92?^PCcRZ1+E9rGg{CDDm7dDdZ_brR5Fo<3s|hAA z!P9X$g9a_M>6^E#LgffHQcQL@X6?g-x77p7q+_Q>PpZE-x2wsrOLg1|)-pv&t-|%YlF(bfPr(a6dMxce-s4{h^7p@CJ%Y%E7t*S;(H?P-YGvLXt@9FXI!t1Hf z)A{e-;IX&>SwSP74Fsngns&{={2!3%LJ_$=hV!r=9qieMUe2t|xCCuc0vQz>VE@X{ zxrAG2+YlKdN-s_V%f!a?o7Y?pUIe~Lg?Ufld$c)-v8u(dYwfkN7z256$rBarafniw zYu5f_Xe)tub{YtV)qsO_6DT(xe8=1Ti93^p$>=zzU-EiUP;y4fe8j*ix= z{HigAWWERcgli}|PrGvPh;rwIAG0H&!;p=>g{G{Bj{OH&NJPTa#JK>1PF(g6nYdj) z4so1(#Jp{T_;n+?D|vUF!8Kg@{caC@&6u`4ch@-nny~I!Isnu%FOG}|)e#=|dud;5 z`L}fq+(v{V@zbJE1Ygh(zgH@8SE7_g!aNqa%1?XRaBKG8J0bU8445hRXKWFAU>FSa z6f|jRY6WLPTU?j%f_wR^Uq7`OJsa$$u8T8K=Ltv`sF;oxS5D&wcGUxN1}*9vBu*KHkrw!zv> zi{|>Rv25^3Yo4JVW&RDY(aV6S3*)LDlFP~>Id+_ked#A?e8cw3NsI%z98*=>ihi!! zUhQ-I_t^1asD2l@^>YYhcTe$JVHWYxV~(JTSMx%$90zD=D4yeQQHs`esyD+%lm><8 zwzFl%u5XkbPT9T$>j)F(^>@QJ;L&2bzA^SKIFAy>?_eIcz=1^1k6V0-@I9pFr?oox z_)jX08fHeBqUh(Dki~!Mem-xMzOUodpt0PVLSExgs_fb3*tdaAKVOk4gduqj_}uo1 z8bP-Yfx_9bcAaa5M&FBuUQE*8R<_wAH zVHZm*PjBb8HuEvoL{ALWdMK1w&~N=JPFN{7!T6S_*z-4PsVLv1PW`P2B4^_qE$WBp z&=yd6B4^Cd4HnM<`Md(x1fE0@$)vLGhjSAnpc%^wTb}Y7a+x!B-49%MNkK)SDgix5 zC9K8E=bK4@cUyrFS~D+k&XNI`0XvSsG=1>hb6|E}yTL+GgDZ!G$CzEimJFm!Rrg;`pM25y{rJlTl;NGLQZKXW;2;1}s zz}{$NBPm2*BD@@@S%MBJu;kGO0<&pfVV%eOS z?~fz-dn&e*r+JTPqZ>mHghe>XgyXdXy0Yk7epA1u2BaPTkCju1;Gm#>vKuBc58jCp0jH23!c5oDU4H<7+^2x;ij3yH02$q_&ma$jW!|*-yZ?wD1Ivr$m2RW z;So9PB4@I{0wX?K7cIyg;?EZ(sWG2>-R&m_{fV1tTe$3N&EbpQm-iJ#HCVRtWsM1u zA)p=m+VKuvoa*5HlAW2Cq@M)dQslo5c($5v>|fIFvxbt=CGc@$RX#(k>(PUNXEcb< z?@fITN3zmxGy+YC4=_NZ`E7E;kB_;2N$Q1o2`Or~>z$68L~>GW^fj+;_ymw1zn<1l zo9+4XB5af#MRVND zny&46m4u5RPH`%gi>(B*Tx)NK1^G$8JIvGY>y&04r$JWB<%u}U zzKnxib&pQ+UUcBU773k}~!b7nE$Wee| zVv~(fPH3Ok<%0jP^uIgW=uCDCNt=)!kZ*6j^|@?Ge=C(DWX1@n)6_8Zsj%iL5ZG=! zMYl%a7Tl)DXQA;h_4l`5qQ?|{34RvK)6)0uY1vcBO8^?X)Y5u8US5yR*BD?=i=vFK z)A1OC>bmbg>BBT5D0Z~8we?*WW88?Nf9tI~Ez0b>;;Nt1)^TX)Z<%LF?HkSaKq5MU zCU%IW+jr~z*81&)7fCF3PKssM?cu8@RQ!NU{O40(iq+(HrezJ!p_9-{x6aUU!#}@t ziF)ik;t|l@_OVBUt~e@_)DBv!%BBcGYHT3(J7_TACR*J$!+N8vGl{Ng8@#(EpCY|Sj9Rl}a<+16m#6mm2| z=BjhN>^hD$j-116J*Uan&eS^wMnZ9*r+IFe7Nz0k7K1H2lTGGINPX{aH@oWG_7OUz z0_c}Ms_F0Pb!gb2>c}4t_kp-Qdyq{|m8ka$KBL1!^iCvY9O$+Y+0{0nb`d@fhTe2a zUZHDvae=GsIVx!~GJvoEgL&ML*N826gLezowDnMjQ5m<&koqdp?~F+$WIi9T;O@j7 z)NNPyGn#n126$G|&>;QJwuFJ0VYXFxfNhGNF0?OypeaGz@zDtRH#-R;BT$#Z;uQTe@YZEG+Fa@LMPYni+N+!~m*v@_{SPm5cr%=!Nsr>X7 zd=d6NU@bFp$}Uc}?jyKWOAB_>wuvoqHSSgQ?*Tv2am$fTgVOFbMByc0WNpKhazR3t zY$%KdBwJ{7zSRUQsW8O6GyhOQEWS*uxlf%iVv;fU*aZ@u8Ef3gXN+GXU(T3v(69F^6eC3=ZA3p7FZ!qUi@HOvU!LOWN}k;*7$PI`lz>9nhZ{YfQ&Z8q_-T(gZd$Tw_E zjJoOOw@tPREuPxi%^Lg4ZN{}~Xv!3|_&ddoWuqto+u5&Xaps*<8U`8LkeXh|C{Pu` z(0XH`k7xP1U(0LW7xnpISdigyU-aHAlW(wx^;thk@qH8I6vx{P482zApm(y5>y1X7 zvhz%AE%D(M1-Af**_(A(g3^9&b!`YQY-57%QARhQHTumiWnn&rw$8y_8}n=LRE*J1 z5qz?~xmgUyhw|FTQSosnU-Eb)@CHR8gQx@eGaFr0xLqk$3`<*x&x_#_99$n4vCV>0 zY6VYURXrFODfn&_EQ1Z$^WkNz2@x^d5+1Tub7~cyOta7{oBe_XT;3b=`DW=Ye^gFDz2&UE z5AuROhiyvaRiuMQ)r#rV^G;P}JkVB&o+bJSU!^6euCHCb8a({5yb^Bs$HAU()@&#NFH?p)^`!9T&HkIML!l$24i*hMfowY+e#m*L0 zldb-GD2FH&xONs=9g-4$Z3f}Ea(S&%cTv@rG5di{m@AKO+`|zbc*WUJkP(}!`wjj5 zeSVM1dG~*>0^Ow5l2-eDD>_5(j&-X%4i0Z~py`60-lEFm zentku(ITQ7Jx8K`6#C{EZBa|m44L;H?V1lBWf+3_mij5gZQr-+S2TJ>tQ}f}b7mMU zK+^af%t$`;ppE$L#r^u1_9C`S%b5R;`0|%76+UOAXFTwNh7l)$YqHQ(62rP_jhxQh z8OWTB?OGc9hijXOE_N4wU2Q#hyLnRUQh*7#C!ej>`u^PEEsXvQuUisu4%Yp>FDeuT zmx!Tj3>pVH${3C}S1sh&`|QBt^kVVG3D1#=o{$fiPUi!n4A1Y^jd30U$%^^^IHei< z&=m7Cm7EQ*qrbH0OI@VB>O;8|eIT{zHlj^C2SWQ^LA}7U;UeS((93!PL$X`kc1Zv} zrzYvT&Jos(%Jp&3=)RFrjb0E|h3JC&pN>o>U0C;Ivn^NHCWWH8jYDA`@Z1LOBMj}N zzb~{j3D;kXaiIT-V4lx^KbV4?jZ!XF?;gl%j#Mz?fc$av^N-F8LLEBatE$F}Tb9Wt ziVmeRHO>BnLTRvhm95K7agi%w^y3F$TFK~(SRCTehKFOx&o(&aC6eBci-0iIsyyky z1UZ8*J5ILD{iTE6Gy1!>Alg|VsIqi?HBvPX1MwmG(Q3RbnDMOZCFtF>mX5GQ_ZGa5 zx|DN$eC`^>$gK6bt$-(1ZRKpjz5koW?YtEaEXXf#s)%~UGgH~{-5(J~P1()BaFB0y zN*nQY=aGG5Yez}{^39t^y0CahAgpGubf$y7n{fMr$+eHIXdr7fc?q#(oS{sgSB{2= zwafSrYqsN(3E0DfEpZlMC}G|ej)%OQJ;C>hpFu_;Y9MS!e${@ z$W7+*DkFQ>LonrM>$|}=SUe8^AzWmnP)=YzK5_2I{!4pSUfBqNQ#OGuFEQK;B*e8x ze^O(1{4`ITsk!#pq8UXqQK$-2u(&|xZV$n2^rCV=vauTn%?=sk2y~Lls?Q|%e{z^| z1E2F{zW2}4bj?i1qCUCzf*q;NBKFTuTsB#F*DlLOEtAXb7q>#lK|6l>{b;<4QO~^?oTNlvbnlZ(d_B@}RGK5&*;v>N)NuHv z8u#dh@?jz43hty4G9EPaem5(s{&mchAe=6!L)k9(%N%3Us6}Z6Q62}|@oN9?^X}nC z7*Wl**s{E%q_-_1JPhz;bJ%Ii7%Ut97~IKUA<=VpS5&84^|xhb&SANPhfaT{IVp%I z3r3i(0}BZ*eV6|`R;Ayj8ou4^fMGv9Hc+s%#3J@nxoTV69WF_nj#|W+<1bV$rem!m z>U9#U8F6V8J-9Db+M9QfW``10Y-C~M-!0^~Z45rU+L#@t=u$vaV*kCI19{P3oB)WGK3cSPnpqoL!yRjOU2*^9wNTUw=!APauYC` z{iC?v{pUKMg#D$jm;0^lm%0vhh(zpr?Nv*uEXIZFERBF#j+**npE%w)(Xu-aZ=e4v znnmhS?n|)9xH2m$P@c7iCq-`s3lCrsv>}{Xjv6#Vmkn*%**mSO z;OhqrocgGGd`jF>)pwX9fd=0Oq-ro4vHgq*$;ViO3w%W}RchO^&Dh`P@fhT9w9rWr z5x;E6`kh6?=?ce9_^(4AjYaK?ipLn+8yQz`@u&P_n10~`f?*8XZk> z4qQ>+FSTHHeDD|=Uk)m@#4-HpmM5!gRLtA1H4j)yfc_>rbWJ6LQ~0k?`4?06ZW!36 zz@gp#e9L^z)r{WjQzjO>&L6`_I#gNg?lc$BD^o(JA?=hB$p$V$B-6t5XyM>Ps@7yk zN?0{ZI$fMt)A@xWj0e$W>AG$^nNu$mHHDbt-Aa)-gEEJ_Ub;2MYU6_#`&f2VvAAcfmGql5(nX)Ln*qn3P1^O#TW_xjKp9X;mh1<{iFh`o26 z)j!LZ;y-?E#Vk7*ZtSjOr_=TXcx(FhMbPZ=$*)LY=tl~as&i9#PA223rVbr zy~7Ehvu$g)XEC9`}KHvdM{!2bL+){y(>ggEUv_!j=>72dlnR*ka09nsj5<|+Qkc?@k{MdHq-4C@Ry zba>0TTHDN3KpNTIz}aUz80dl8AxT__ z_QphH3~l$z0*JzsslHCqBZ@IeU~+-LbRBMHskf4Om48BNt&VUI#*K&Xo?xt7$a)%m za6C*ckzXE)TIhEA8Zm0Hy~p!r;KL0F=r)@KZJ`Cd?aq*=m{%{DXW~K9L?BI5k`m7r zr&~M<()LY$?i`2w`Q_|#cpbB#t#f>sY&EU_4lySGFwbvEx6fDot2Wv09u8hayPm2x zq+{#RG>QDU*2`)H`*?brUKrEqPPL3$&F^`YY^t1{tsSOnWT(M^E$O2@iFUd z4frWyRFKW zTQa1biHP{VUN-7x6o=&L>F~^kSgQJ5o}U=wVaxBPSYn)WSG(WuhV0#Hi**EVKw9YV z+p60jH0Q^cyoo{(v1h@87XLeNW>x4AcJ!&KUo;UNUL=yttK_Eux>86D5tAy?D{a}7 zVwkZ!`qO?>KwUUbgvUPo*3EHDJ~W-oj%9>8^WczQt$VB9#+HKDLXv=3D1IJNnAB5z z1lrLi{3Vh=v?_Xds6tlOrr9(Os(#zV2 z73~jWj*L+_F%jY-`X(>o#`*pZ*$~99Cy4Q4$I}-Yrz5 zE~t7~!6uTMjEn^f^Ii~8jXsnEGX9b{oDouuzLZn=?l!-7sSqU|8Y^5r%tX$G<2J=) z%)0xBNgm{}D{$sdx7>Kxa_F?MdYrY6um#~ehjusQ0ES5h=*8VJC3y+zEvg(&X@C*A zl-zy)%77fmS?v)R$p5x%n=fZo#249Zxd#OSp#=v4NhW{50vtA&&_}Pmqeo4Mt6 ztiGSO`V7oly@VtMsx{*!WF%4#|FHk%(xjQ)OqneTSG~!0G}{RL_Uv_y_eG8n2x5-P z9nU4d3KrU@AY|s@ck)t?;oGG0+UpL53MPdvqDI^zSJ+~jA0Cd|2mj00fkfI)F5uC_ z%SR|l7XQ0P0HA7Cw4`m~3v+1WmLktm^`v;lYE>DRUkHZDyju*%@etUj4uXg>x%^jQ z*UlsyZ=_}o7FS`yp_jD^ok?mIx4YOlV{3*ecLyVZvUzel&4H3gRLC6uHvhP-ImJW_ zwOXW7AU3apspf1vWOn6^Y{VZci0eH#WhcoRjw;c{0eEp`%w|`&<#~S5da>3?Pr3xS zJ-4_D%QJUV`Rk(&v$h< zDy=pX;mjyRYC%xXWnRg^Rj-jn#4TPrTPJ=|sQxvA%1G%pCtjPe9O=)_Rcj`(0!dR~ zIqKP14g{4_%L2cb0KHdE$@F|d!e_+ZMU|jpU&t2B{@3wd$1_iV_j_JLJPFyG`Bz!L z@ub0MxB@{P4{@4#sfCw6E6dXImPCU*X$ zP6=I*jXQuvMenKXPBEgXXN5|3h*Dw_-1Rr}8g?n;o?OLV#Y~93Q>iT%v4MB^OlaHr zlGlXO{tY@AxlQgP*t!MV^Q#M(G}RLmBa&3momZ7j=9 z*hsWYSmzTmlJpxnEw!d>%J2!?52n1%`Om@oybeGzeo-zx5h)DL`$yqUrjEC<4#(3t zrAuh2n=u8GG43CYZI}3>D$|GyA^fyCjwA~+szaTQ{=1K|KPz2M(7u}Z1`qumSG~V} zLmYOAl^h47;&t?AcW@Fd)+EXmv8Z;m%`DAWsMQgtAIFVIm_y8y4II9F|97xxm8%!< z;fD&~Jxg>zinl?Bq4eJl_tKtudivgW71LK0w_m=0-359ImE1TXz0z)Ck70 z0q-$^O`{uXTAN;PXNW(E3a+G)18Bm2b0D_8&jkctM%@ij}81@-?gOoEDhg>*#F zFF&rYI0p(U`W4&I!9Y>}bHPlf`UWccf7@H8dwm1tBKm)uF!Gn1=KqZ1Ak_4^Z=gg( zfBt7xe&Hhf)v3R*`Cp?rh%Frf9F(5;zoh>M!2cu3;3XXq9F#B}83Gg*5e) Date: Wed, 23 Oct 2019 22:10:23 -0500 Subject: [PATCH 2/2] Fix error in main --- CHANGELOG | 4 + VERSION | 2 +- conf.py | 2 +- easymacro.py | 585 +++++++++++++++++++++++++++++---- files/ZAZFavorites_v0.4.0.oxt | Bin 0 -> 69343 bytes source/ZAZFavorites.py | 12 +- source/description.xml | 2 +- source/pythonpath/easymacro.py | 585 +++++++++++++++++++++++++++++---- 8 files changed, 1068 insertions(+), 124 deletions(-) create mode 100644 files/ZAZFavorites_v0.4.0.oxt diff --git a/CHANGELOG b/CHANGELOG index 1d1843c..8c96867 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +v 0.4.0 [23-oct-2019] + - Fix error in main + + v 0.3.0 [15-oct-2019] --------------------- - Add menus in start application. diff --git a/VERSION b/VERSION index 69367fd..26b5dec 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,2 @@ -0.3.0 +0.4.0 diff --git a/conf.py b/conf.py index 839b08a..012a322 100644 --- a/conf.py +++ b/conf.py @@ -26,7 +26,7 @@ import logging TYPE_EXTENSION = 1 # ~ https://semver.org/ -VERSION = '0.3.0' +VERSION = '0.4.0' # ~ Your great extension name, not used spaces NAME = 'ZAZFavorites' diff --git a/easymacro.py b/easymacro.py index 7d34428..547f936 100644 --- a/easymacro.py +++ b/easymacro.py @@ -22,6 +22,7 @@ import csv import ctypes import datetime import errno +import gettext import getpass import hashlib import json @@ -40,12 +41,15 @@ import time import traceback import zipfile -from collections import OrderedDict -from collections.abc import MutableMapping +# ~ from collections import OrderedDict +# ~ from collections.abc import MutableMapping from functools import wraps from operator import itemgetter from pathlib import Path, PurePath from pprint import pprint +from enum import IntEnum +from urllib.request import Request, urlopen +from urllib.error import URLError, HTTPError from string import Template from subprocess import PIPE @@ -75,6 +79,7 @@ from com.sun.star.table.CellContentType import EMPTY, VALUE, TEXT, FORMULA from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK from com.sun.star.text.TextContentAnchorType import AS_CHARACTER +from com.sun.star.script import ScriptEventDescriptor from com.sun.star.lang import XEventListener from com.sun.star.awt import XActionListener from com.sun.star.awt import XMouseListener @@ -87,6 +92,13 @@ from com.sun.star.awt import XKeyListener from com.sun.star.awt import XItemListener from com.sun.star.awt import XFocusListener +class FontSlant(IntEnum): + NONE = 0 + OBLIQUE = 1 + ITALIC = 2 + DONTKNOW = 3 + REVERSE_OBLIQUE = 4 + REVERSE_ITALIC = 5 try: from fernet import Fernet, InvalidToken @@ -94,6 +106,20 @@ except ImportError: pass +ID_EXTENSION = '' + +DIR = { + 'images': 'images', + 'locales': 'locales', +} + +KEY = { + 'enter': 1280, +} + +SEPARATION = 5 + + MSG_LANG = { 'es': { 'OK': 'Aceptar', @@ -117,6 +143,9 @@ LOG_NAME = 'ZAZ' CLIPBOARD_FORMAT_TEXT = 'text/plain;charset=utf-16' +PYTHON = 'python' +if IS_WIN: + PYTHON = 'python.exe' CALC = 'calc' WRITER = 'writer' OBJ_CELL = 'ScCellObj' @@ -281,16 +310,17 @@ def info(data): return -def debug(info): +def debug(*info): if IS_WIN: doc = get_document(FILE_NAME_DEBUG) if doc is None: return doc = LogWin(doc.obj) - doc.write(info) + doc.write(str(info)) return - log.debug(str(info)) + data = [str(d) for d in info] + log.debug('\t'.join(data)) return @@ -314,18 +344,17 @@ def run_in_thread(fn): return run -def now(): - return datetime.datetime.now() +def now(only_time=False): + now = datetime.datetime.now() + if only_time: + return now.time() + return now def today(): return datetime.date.today() -def time(): - return datetime.datetime.now().time() - - def get_date(year, month, day, hour=-1, minute=-1, second=-1): if hour > -1 or minute > -1 or second > -1: h = hour @@ -578,9 +607,6 @@ class LODocument(object): def _init_values(self): self._type_doc = get_type_doc(self.obj) - # ~ if self._type_doc == 'base': - # ~ self._cc = self.obj.DatabaseDocument.getCurrentController() - # ~ else: self._cc = self.obj.getCurrentController() return @@ -701,10 +727,117 @@ class LODocument(object): return path_pdf +class FormControlBase(object): + EVENTS = { + 'action': 'actionPerformed', + 'click': 'mousePressed', + } + TYPES = { + 'actionPerformed': 'XActionListener', + 'mousePressed': 'XMouseListener', + } + + def __init__(self, obj): + self._obj = obj + self._index = -1 + self._rules = {} + + @property + def obj(self): + return self._obj + + @property + def name(self): + return self.obj.Name + + @property + def form(self): + return self.obj.getParent() + + @property + def index(self): + return self._index + @index.setter + def index(self, value): + self._index = value + + @property + def events(self): + return self.form.getScriptEvents(self.index) + + def remove_event(self, name=''): + for ev in self.events: + if name and \ + ev.EventMethod == self.EVENTS[name] and \ + ev.ListenerType == self.TYPES[ev.EventMethod]: + self.form.revokeScriptEvent(self.index, + ev.ListenerType, ev.EventMethod, ev.AddListenerParam) + break + else: + self.form.revokeScriptEvent(self.index, + ev.ListenerType, ev.EventMethod, ev.AddListenerParam) + return + + def add_event(self, name, macro): + if not 'name' in macro: + macro['name'] = '{}_{}'.format(self.name, name) + + event = ScriptEventDescriptor() + event.AddListenerParam = '' + event.EventMethod = self.EVENTS[name] + event.ListenerType = self.TYPES[event.EventMethod] + event.ScriptCode = _get_url_script(macro) + event.ScriptType = 'Script' + + for ev in self.events: + if ev.EventMethod == event.EventMethod and \ + ev.ListenerType == event.ListenerType: + self.form.revokeScriptEvent(self.index, + event.ListenerType, event.EventMethod, event.AddListenerParam) + break + + self.form.registerScriptEvent(self.index, event) + return + + +class FormButton(FormControlBase): + + def __init__(self, obj): + super().__init__(obj) + + + class LOForm(ObjectBase): def __init__(self, obj): super().__init__(obj) + self._init_controls() + + def __getitem__(self, index): + if isinstance(index, int): + return self._controls[index] + else: + return getattr(self, index) + + def _get_type_control(self, name): + types = { + # ~ 'stardiv.Toolkit.UnoFixedTextControl': 'label', + 'com.sun.star.form.OButtonModel': 'formbutton', + # ~ 'stardiv.Toolkit.UnoEditControl': 'text', + # ~ 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', + # ~ 'stardiv.Toolkit.UnoFixedHyperlinkControl': 'link', + # ~ 'stardiv.Toolkit.UnoListBoxControl': 'listbox', + } + return types[name] + + def _init_controls(self): + self._controls = [] + for i, c in enumerate(self.obj.ControlModels): + tipo = self._get_type_control(c.ImplementationName) + control = get_custom_class(tipo, c) + control.index = i + self._controls.append(control) + setattr(self, c.Name, control) @property def name(self): @@ -1235,6 +1368,42 @@ class LOWriter(LODocument): self._cc.select(text) return + def search(self, options): + descriptor = self.obj.createSearchDescriptor() + descriptor.setSearchString(options.get('Search', '')) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if 'Attributes' in options: + attr = dict_to_property(options['Attributes']) + descriptor.setSearchAttributes(attr) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + + if options.get('First', False): + found = self.obj.findFirst(descriptor) + else: + found = self.obj.findAll(descriptor) + + return found + + def replace(self, options): + descriptor = self.obj.createReplaceDescriptor() + descriptor.setSearchString(options['Search']) + descriptor.setReplaceString(options['Replace']) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if 'Attributes' in options: + attr = dict_to_property(options['Attributes']) + descriptor.setSearchAttributes(attr) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + found = self.obj.replaceAll(descriptor) + return found + class LOTextRange(object): @@ -1779,6 +1948,36 @@ class LOCellRange(object): chart.cell = self return chart + def search(self, options): + descriptor = self.obj.Spreadsheet.createSearchDescriptor() + descriptor.setSearchString(options.get('Search', '')) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + + if options.get('First', False): + found = self.obj.findFirst(descriptor) + else: + found = self.obj.findAll(descriptor) + + return found + + def replace(self, options): + descriptor = self.obj.Spreadsheet.createReplaceDescriptor() + descriptor.setSearchString(options['Search']) + descriptor.setReplaceString(options['Replace']) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + found = self.obj.replaceAll(descriptor) + return found + class EventsListenerBase(unohelper.Base, XEventListener): @@ -1813,7 +2012,7 @@ class EventsMouse(EventsListenerBase, XMouseListener, XMouseMotionListener): def mousePressed(self, event): event_name = '{}_click'.format(self._name) if event.ClickCount == 2: - event_name = '{}_double_click'.format(name) + event_name = '{}_double_click'.format(self._name) if hasattr(self._controller, event_name): getattr(self._controller, event_name)(event) return @@ -1914,6 +2113,9 @@ class EventsFocus(EventsListenerBase, XFocusListener): super().__init__(controller, name) def focusGained(self, event): + service = event.Source.Model.ImplementationName + if service == 'stardiv.Toolkit.UnoControlListBoxModel': + return obj = event.Source.Model obj.BackgroundColor = COLOR_ON_FOCUS @@ -1930,6 +2132,27 @@ class EventsKey(EventsListenerBase, XKeyListener): event.Modifiers """ + def __init__(self, controller, name): + super().__init__(controller, name) + + def keyPressed(self, event): + pass + + def keyReleased(self, event): + event_name = '{}_key_released'.format(self._name) + if hasattr(self._controller, event_name): + getattr(self._controller, event_name)(event) + return + + +class EventsKeyWindow(EventsListenerBase, XKeyListener): + """ + event.KeyChar + event.KeyCode + event.KeyFunc + event.Modifiers + """ + def __init__(self, cls): super().__init__(cls.events, cls.name) self._cls = cls @@ -2023,7 +2246,6 @@ class EventsMenu(EventsListenerBase, XMenuListener): def itemHighlighted(self, event): pass - @catch_exception def itemSelected(self, event): name = event.Source.getCommand(event.MenuId) if name.startswith('menu'): @@ -2122,6 +2344,20 @@ class UnoBaseObject(object): def tag(self, value): self.model.Tag = value + @property + def visible(self): + return self.obj.Visible + @visible.setter + def visible(self, value): + self.obj.setVisible(value) + + @property + def enabled(self): + return self.model.Enabled + @enabled.setter + def enabled(self, value): + self.model.Enabled = value + @property def step(self): return self.model.Step @@ -2160,16 +2396,17 @@ class UnoBaseObject(object): return def move(self, origin, x=0, y=5): - w = 0 - h = 0 if x: - w = origin.width + self.x = origin.x + origin.width + x if y: - h = origin.height - x = origin.x + x + w - y = origin.y + y + h - self.x = x - self.y = y + self.y = origin.y + origin.height + y + return + + def possize(self, origin): + self.x = origin.x + self.y = origin.y + self.width = origin.width + self.height = origin.height return @@ -2242,7 +2479,6 @@ class UnoListBox(UnoBaseObject): def __init__(self, obj): super().__init__(obj) - self._data = [] @property def type(self): @@ -2250,15 +2486,55 @@ class UnoListBox(UnoBaseObject): @property def value(self): - return self.obj.SelectedItem + return self.obj.getSelectedItem() + + @property + def count(self): + return len(self.data) @property def data(self): - return self._data + return self.model.StringItemList @data.setter def data(self, values): - self._data = list(sorted(values)) - self.model.StringItemList = self.data + self.model.StringItemList = list(sorted(values)) + return + + def unselect(self): + self.obj.selectItem(self.value, False) + return + + def select(self, pos=0): + if isinstance(pos, str): + self.obj.selectItem(pos, True) + else: + self.obj.selectItemPos(pos, True) + return + + def clear(self): + self.model.removeAllItems() + return + + def _set_image_url(self, image): + if exists_path(image): + return _path_url(image) + + if not ID_EXTENSION: + return '' + + path = get_path_extension(ID_EXTENSION) + path = join(path, DIR['images'], image) + return _path_url(path) + + def insert(self, value, path='', pos=-1, show=True): + if pos < 0: + pos = self.count + if path: + self.model.insertItem(pos, value, self._set_image_url(path)) + else: + self.model.insertItemText(pos, value) + if show: + self.select(pos) return @@ -2393,11 +2669,75 @@ class UnoRoadmap(UnoBaseObject): self.model.insertByIndex(i, opt) return + @property + def enabled(self): + return True + @enabled.setter + def enabled(self, value): + for m in self.model: + m.Enabled = value + return + def set_enabled(self, index, value): self.model.getByIndex(index).Enabled = value return +class UnoTree(UnoBaseObject): + + @catch_exception + def __init__(self, obj, ): + super().__init__(obj) + self._tdm = None + self._data = [] + + @property + def selection(self): + return self.obj.Selection + + @property + def root(self): + if self._tdm is None: + return '' + return self._tdm.Root.DisplayValue + + @root.setter + def root(self, value): + self._add_data_model(value) + + def _add_data_model(self, name): + tdm = create_instance('com.sun.star.awt.tree.MutableTreeDataModel') + root = tdm.createNode(name, True) + root.DataValue = 0 + tdm.setRoot(root) + self.model.DataModel = tdm + self._tdm = self.model.DataModel + self._add_data() + return + + @property + def data(self): + return self._data + @data.setter + def data(self, values): + self._data = list(values) + self._add_data() + + def _add_data(self): + if not self.data: + return + + parents = {} + for node in self.data: + parent = parents.get(node[1], self._tdm.Root) + child = self._tdm.createNode(node[2], False) + child.DataValue = node[0] + parent.appendChild(child) + parents[node[0]] = child + self.obj.expandNode(self._tdm.Root) + return + + def get_custom_class(tipo, obj): classes = { 'label': UnoLabel, @@ -2407,11 +2747,12 @@ def get_custom_class(tipo, obj): 'grid': UnoGrid, 'link': UnoLabelLink, 'roadmap': UnoRoadmap, + 'tree': UnoTree, # ~ 'tab': UnoTab, # ~ 'image': UnoImage, # ~ 'radio': UnoRadio, # ~ 'groupbox': UnoGroupBox, - # ~ 'tree': UnoTree, + 'formbutton': FormButton, } return classes[tipo](obj) @@ -2422,6 +2763,7 @@ def add_listeners(events, control, name=''): 'addMouseListener': EventsMouse, 'addItemListener': EventsItem, 'addFocusListener': EventsFocus, + 'addKeyListener': EventsKey, } if hasattr(control, 'obj'): control = contro.obj @@ -2441,6 +2783,7 @@ def add_listeners(events, control, name=''): if is_roadmap and key == 'addItemListener': control.addItemListener(EventsItemRoadmap(events, name)) continue + getattr(control, key)(listeners[key](events, name)) return @@ -2893,6 +3236,8 @@ class LODialog(object): self._init_controls() self._events = None self._color_on_focus = -1 + self._id_extension = '' + self._images = 'images' return def _create(self, properties): @@ -2928,10 +3273,11 @@ class LODialog(object): def _get_type_control(self, name): types = { 'stardiv.Toolkit.UnoFixedTextControl': 'label', - 'stardiv.Toolkit.UnoButtonControl': 'button', - 'stardiv.Toolkit.UnoEditControl': 'text', - 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', 'stardiv.Toolkit.UnoFixedHyperlinkControl': 'link', + 'stardiv.Toolkit.UnoEditControl': 'text', + 'stardiv.Toolkit.UnoButtonControl': 'button', + 'stardiv.Toolkit.UnoListBoxControl': 'listbox', + 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', } return types[name] @@ -2951,6 +3297,22 @@ class LODialog(object): def model(self): return self._model + @property + def id_extension(self): + return self._id_extension + @id_extension.setter + def id_extension(self, value): + global ID_EXTENSION + ID_EXTENSION = value + self._id_extension = value + + @property + def images(self): + return self._images + @images.setter + def images(self, value): + self._images = value + @property def height(self): return self.model.Height @@ -2958,6 +3320,13 @@ class LODialog(object): def height(self, value): self.model.Height = value + @property + def width(self): + return self.model.Width + @width.setter + def width(self, value): + self.model.Width = value + @property def color_on_focus(self): return self._color_on_focus @@ -2995,17 +3364,17 @@ class LODialog(object): def _get_control_model(self, control): services = { - 'button': 'com.sun.star.awt.UnoControlButtonModel', - 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', - 'groupbox': 'com.sun.star.awt.UnoControlGroupBoxModel', - 'image': 'com.sun.star.awt.UnoControlImageControlModel', 'label': 'com.sun.star.awt.UnoControlFixedTextModel', 'link': 'com.sun.star.awt.UnoControlFixedHyperlinkModel', - 'listbox': 'com.sun.star.awt.UnoControlListBoxModel', - 'radio': 'com.sun.star.awt.UnoControlRadioButtonModel', - 'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel', 'text': 'com.sun.star.awt.UnoControlEditModel', + 'listbox': 'com.sun.star.awt.UnoControlListBoxModel', + 'button': 'com.sun.star.awt.UnoControlButtonModel', + 'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel', + 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', 'tree': 'com.sun.star.awt.tree.TreeControlModel', + 'groupbox': 'com.sun.star.awt.UnoControlGroupBoxModel', + 'image': 'com.sun.star.awt.UnoControlImageControlModel', + 'radio': 'com.sun.star.awt.UnoControlRadioButtonModel', } return services[control] @@ -3019,10 +3388,16 @@ class LODialog(object): column_model.addColumn(grid_column) return column_model - def _set_image_url(self, path): - if exists_path(path): - return _path_url(path) - return '' + def _set_image_url(self, image): + if exists_path(image): + return _path_url(image) + + if not self.id_extension: + return '' + + path = get_path_extension(self.id_extension) + path = join(path, self.images, image) + return _path_url(path) def _special_properties(self, tipo, properties): columns = properties.pop('Columns', ()) @@ -3030,12 +3405,17 @@ class LODialog(object): properties['ColumnModel'] = self._set_column_model(columns) elif tipo == 'button' and 'ImageURL' in properties: properties['ImageURL'] = self._set_image_url(properties['ImageURL']) - elif tipo == 'roadmap' and not 'Height' in properties: - properties['Height'] = self.height + elif tipo == 'roadmap': + if not 'Height' in properties: + properties['Height'] = self.height + if 'Title' in properties: + properties['Text'] = properties.pop('Title') return properties def add_control(self, properties): tipo = properties.pop('Type').lower() + root = properties.pop('Root', '') + properties = self._special_properties(tipo, properties) model = self.model.createInstance(self._get_control_model(tipo)) set_properties(model, properties) @@ -3044,9 +3424,39 @@ class LODialog(object): control = self.obj.getControl(name) add_listeners(self.events, control, name) control = get_custom_class(tipo, control) + + if tipo == 'tree' and root: + control.root = root + setattr(self, name, control) return + def center(self, control, x=0, y=0): + w = self.width + h = self.height + + if isinstance(control, tuple): + wt = SEPARATION * -1 + for c in control: + wt += c.width + SEPARATION + x = w / 2 - wt / 2 + for c in control: + c.x = x + x = c.x + c.width + SEPARATION + return + + if x < 0: + x = w + x - control.width + elif x == 0: + x = w / 2 - control.width / 2 + if y < 0: + y = h + y - control.height + elif y == 0: + y = h / 2 - control.height / 2 + control.x = x + control.y = y + return + class LOWindow(object): @@ -3175,7 +3585,7 @@ class LOWindow(object): controller = EventsWindow(self) self._window.addTopWindowListener(controller) self._window.addWindowListener(controller) - self._container.addKeyListener(EventsKey(self)) + self._container.addKeyListener(EventsKeyWindow(self)) return @property @@ -3236,7 +3646,7 @@ def get_document(title=''): return doc for d in desktop.getComponents(): - if d.Title == title: + if hasattr(d, 'Title') and d.Title == title: doc = d break @@ -3294,6 +3704,11 @@ def get_config_path(name='Work'): return _path_system(getattr(path, name)) +def get_path_python(): + path = get_config_path('Module') + return join(path, PYTHON) + + # ~ Export ok def get_file(init_dir='', multiple=False, filters=()): """ @@ -3424,6 +3839,10 @@ def get_path_extension(id): return path +def get_home(): + return Path.home() + + # ~ Export ok def inputbox(message, default='', title=TITLE, echochar=''): @@ -3602,13 +4021,39 @@ def zip_content(path): return names +def popen(command, stdin=None): + try: + proc = subprocess.Popen(shlex.split(command), shell=IS_WIN, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + for line in proc.stdout: + yield line.decode().rstrip() + except Exception as e: + error(e) + yield (e.errno, e.strerror) + + +def url_open(url, options={}, json=False): + data = '' + req = Request(url) + try: + response = urlopen(req) + # ~ response.info() + except HTTPError as e: + error(e) + except URLError as e: + error(e.reason) + else: + if json: + data = json_loads(response.read()) + else: + data = response.read() + + return data + + def run(command, wait=False): - # ~ debug(command) - # ~ debug(shlex.split(command)) try: if wait: - # ~ p = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) - # ~ p.wait() result = subprocess.check_output(command, shell=True) else: p = subprocess.Popen(shlex.split(command), stdin=None, @@ -4223,6 +4668,24 @@ def format(template, data): return result +def _get_url_script(macro): + macro['language'] = macro.get('language', 'Python') + macro['location'] = macro.get('location', 'user') + data = macro.copy() + if data['language'] == 'Python': + data['module'] = '.py$' + elif data['language'] == 'Basic': + data['module'] = '.{}.'.format(macro['module']) + if macro['location'] == 'user': + data['location'] = 'application' + else: + data['module'] = '.' + + url = 'vnd.sun.star.script:{library}{module}{name}?language={language}&location={location}' + path = url.format(**data) + return path + + def _call_macro(macro): #~ https://wiki.openoffice.org/wiki/Documentation/DevGuide/Scripting/Scripting_Framework_URI_Specification name = 'com.sun.star.script.provider.MasterScriptProviderFactory' @@ -4243,6 +4706,7 @@ def _call_macro(macro): args = macro.get('args', ()) url = 'vnd.sun.star.script:{library}{module}{name}?language={language}&location={location}' path = url.format(**data) + script = factory.createScriptProvider('').getScript(path) return script.invoke(args, None, None)[0] @@ -4469,6 +4933,7 @@ def import_csv(path, **kwargs): rows = tuple(csv.reader(f, **kwargs)) return rows + def export_csv(path, data, **kwargs): with open(path, 'w') as f: writer = csv.writer(f, **kwargs) @@ -4476,6 +4941,19 @@ def export_csv(path, data, **kwargs): return +def install_locales(path, domain='base', dir_locales=DIR['locales']): + p, *_ = get_info_path(path) + path_locales = join(p, dir_locales) + try: + lang = gettext.translation(domain, path_locales, languages=[LANG]) + lang.install() + _ = lang.gettext + except Exception as e: + from gettext import gettext as _ + error(e) + return _ + + class LIBOServer(object): HOST = 'localhost' PORT = '8100' @@ -4555,12 +5033,9 @@ class LIBOServer(object): # ~ 'CurrencyField': 'com.sun.star.awt.UnoControlCurrencyFieldModel', # ~ 'DateField': 'com.sun.star.awt.UnoControlDateFieldModel', # ~ 'FileControl': 'com.sun.star.awt.UnoControlFileControlModel', - # ~ 'FixedLine': 'com.sun.star.awt.UnoControlFixedLineModel', - # ~ 'FixedText': 'com.sun.star.awt.UnoControlFixedTextModel', # ~ 'FormattedField': 'com.sun.star.awt.UnoControlFormattedFieldModel', # ~ 'GroupBox': 'com.sun.star.awt.UnoControlGroupBoxModel', # ~ 'ImageControl': 'com.sun.star.awt.UnoControlImageControlModel', - # ~ 'ListBox': 'com.sun.star.awt.UnoControlListBoxModel', # ~ 'NumericField': 'com.sun.star.awt.UnoControlNumericFieldModel', # ~ 'PatternField': 'com.sun.star.awt.UnoControlPatternFieldModel', # ~ 'ProgressBar': 'com.sun.star.awt.UnoControlProgressBarModel', diff --git a/files/ZAZFavorites_v0.4.0.oxt b/files/ZAZFavorites_v0.4.0.oxt new file mode 100644 index 0000000000000000000000000000000000000000..679b8fe7eb0bad41ac82616a0567cb9cb231bffb GIT binary patch literal 69343 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 literal 0 HcmV?d00001 diff --git a/source/ZAZFavorites.py b/source/ZAZFavorites.py index a0e8641..e0dcddd 100644 --- a/source/ZAZFavorites.py +++ b/source/ZAZFavorites.py @@ -1,4 +1,3 @@ -import gettext import uno import unohelper from com.sun.star.task import XJobExecutor @@ -9,16 +8,7 @@ ID_EXTENSION = 'net.elmau.zaz.Favorites' SERVICE = ('com.sun.star.task.Job',) -p, *_ = app.get_info_path(__file__) -path_locales = app.join(p, 'locales') -try: - lang = gettext.translation('base', path_locales, languages=[app.LANG]) - lang.install() - _ = lang.gettext -except Exception as e: - from gettext import gettext as _ - app.error(e) - app.debug(app.LANGUAGE) +_ = app.install_locales(__file__) class Controllers(object): diff --git a/source/description.xml b/source/description.xml index d0da032..79c0dc7 100644 --- a/source/description.xml +++ b/source/description.xml @@ -1,7 +1,7 @@ - + Favorites files Archivos favoritos diff --git a/source/pythonpath/easymacro.py b/source/pythonpath/easymacro.py index 7d34428..547f936 100644 --- a/source/pythonpath/easymacro.py +++ b/source/pythonpath/easymacro.py @@ -22,6 +22,7 @@ import csv import ctypes import datetime import errno +import gettext import getpass import hashlib import json @@ -40,12 +41,15 @@ import time import traceback import zipfile -from collections import OrderedDict -from collections.abc import MutableMapping +# ~ from collections import OrderedDict +# ~ from collections.abc import MutableMapping from functools import wraps from operator import itemgetter from pathlib import Path, PurePath from pprint import pprint +from enum import IntEnum +from urllib.request import Request, urlopen +from urllib.error import URLError, HTTPError from string import Template from subprocess import PIPE @@ -75,6 +79,7 @@ from com.sun.star.table.CellContentType import EMPTY, VALUE, TEXT, FORMULA from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK from com.sun.star.text.TextContentAnchorType import AS_CHARACTER +from com.sun.star.script import ScriptEventDescriptor from com.sun.star.lang import XEventListener from com.sun.star.awt import XActionListener from com.sun.star.awt import XMouseListener @@ -87,6 +92,13 @@ from com.sun.star.awt import XKeyListener from com.sun.star.awt import XItemListener from com.sun.star.awt import XFocusListener +class FontSlant(IntEnum): + NONE = 0 + OBLIQUE = 1 + ITALIC = 2 + DONTKNOW = 3 + REVERSE_OBLIQUE = 4 + REVERSE_ITALIC = 5 try: from fernet import Fernet, InvalidToken @@ -94,6 +106,20 @@ except ImportError: pass +ID_EXTENSION = '' + +DIR = { + 'images': 'images', + 'locales': 'locales', +} + +KEY = { + 'enter': 1280, +} + +SEPARATION = 5 + + MSG_LANG = { 'es': { 'OK': 'Aceptar', @@ -117,6 +143,9 @@ LOG_NAME = 'ZAZ' CLIPBOARD_FORMAT_TEXT = 'text/plain;charset=utf-16' +PYTHON = 'python' +if IS_WIN: + PYTHON = 'python.exe' CALC = 'calc' WRITER = 'writer' OBJ_CELL = 'ScCellObj' @@ -281,16 +310,17 @@ def info(data): return -def debug(info): +def debug(*info): if IS_WIN: doc = get_document(FILE_NAME_DEBUG) if doc is None: return doc = LogWin(doc.obj) - doc.write(info) + doc.write(str(info)) return - log.debug(str(info)) + data = [str(d) for d in info] + log.debug('\t'.join(data)) return @@ -314,18 +344,17 @@ def run_in_thread(fn): return run -def now(): - return datetime.datetime.now() +def now(only_time=False): + now = datetime.datetime.now() + if only_time: + return now.time() + return now def today(): return datetime.date.today() -def time(): - return datetime.datetime.now().time() - - def get_date(year, month, day, hour=-1, minute=-1, second=-1): if hour > -1 or minute > -1 or second > -1: h = hour @@ -578,9 +607,6 @@ class LODocument(object): def _init_values(self): self._type_doc = get_type_doc(self.obj) - # ~ if self._type_doc == 'base': - # ~ self._cc = self.obj.DatabaseDocument.getCurrentController() - # ~ else: self._cc = self.obj.getCurrentController() return @@ -701,10 +727,117 @@ class LODocument(object): return path_pdf +class FormControlBase(object): + EVENTS = { + 'action': 'actionPerformed', + 'click': 'mousePressed', + } + TYPES = { + 'actionPerformed': 'XActionListener', + 'mousePressed': 'XMouseListener', + } + + def __init__(self, obj): + self._obj = obj + self._index = -1 + self._rules = {} + + @property + def obj(self): + return self._obj + + @property + def name(self): + return self.obj.Name + + @property + def form(self): + return self.obj.getParent() + + @property + def index(self): + return self._index + @index.setter + def index(self, value): + self._index = value + + @property + def events(self): + return self.form.getScriptEvents(self.index) + + def remove_event(self, name=''): + for ev in self.events: + if name and \ + ev.EventMethod == self.EVENTS[name] and \ + ev.ListenerType == self.TYPES[ev.EventMethod]: + self.form.revokeScriptEvent(self.index, + ev.ListenerType, ev.EventMethod, ev.AddListenerParam) + break + else: + self.form.revokeScriptEvent(self.index, + ev.ListenerType, ev.EventMethod, ev.AddListenerParam) + return + + def add_event(self, name, macro): + if not 'name' in macro: + macro['name'] = '{}_{}'.format(self.name, name) + + event = ScriptEventDescriptor() + event.AddListenerParam = '' + event.EventMethod = self.EVENTS[name] + event.ListenerType = self.TYPES[event.EventMethod] + event.ScriptCode = _get_url_script(macro) + event.ScriptType = 'Script' + + for ev in self.events: + if ev.EventMethod == event.EventMethod and \ + ev.ListenerType == event.ListenerType: + self.form.revokeScriptEvent(self.index, + event.ListenerType, event.EventMethod, event.AddListenerParam) + break + + self.form.registerScriptEvent(self.index, event) + return + + +class FormButton(FormControlBase): + + def __init__(self, obj): + super().__init__(obj) + + + class LOForm(ObjectBase): def __init__(self, obj): super().__init__(obj) + self._init_controls() + + def __getitem__(self, index): + if isinstance(index, int): + return self._controls[index] + else: + return getattr(self, index) + + def _get_type_control(self, name): + types = { + # ~ 'stardiv.Toolkit.UnoFixedTextControl': 'label', + 'com.sun.star.form.OButtonModel': 'formbutton', + # ~ 'stardiv.Toolkit.UnoEditControl': 'text', + # ~ 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', + # ~ 'stardiv.Toolkit.UnoFixedHyperlinkControl': 'link', + # ~ 'stardiv.Toolkit.UnoListBoxControl': 'listbox', + } + return types[name] + + def _init_controls(self): + self._controls = [] + for i, c in enumerate(self.obj.ControlModels): + tipo = self._get_type_control(c.ImplementationName) + control = get_custom_class(tipo, c) + control.index = i + self._controls.append(control) + setattr(self, c.Name, control) @property def name(self): @@ -1235,6 +1368,42 @@ class LOWriter(LODocument): self._cc.select(text) return + def search(self, options): + descriptor = self.obj.createSearchDescriptor() + descriptor.setSearchString(options.get('Search', '')) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if 'Attributes' in options: + attr = dict_to_property(options['Attributes']) + descriptor.setSearchAttributes(attr) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + + if options.get('First', False): + found = self.obj.findFirst(descriptor) + else: + found = self.obj.findAll(descriptor) + + return found + + def replace(self, options): + descriptor = self.obj.createReplaceDescriptor() + descriptor.setSearchString(options['Search']) + descriptor.setReplaceString(options['Replace']) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if 'Attributes' in options: + attr = dict_to_property(options['Attributes']) + descriptor.setSearchAttributes(attr) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + found = self.obj.replaceAll(descriptor) + return found + class LOTextRange(object): @@ -1779,6 +1948,36 @@ class LOCellRange(object): chart.cell = self return chart + def search(self, options): + descriptor = self.obj.Spreadsheet.createSearchDescriptor() + descriptor.setSearchString(options.get('Search', '')) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + + if options.get('First', False): + found = self.obj.findFirst(descriptor) + else: + found = self.obj.findAll(descriptor) + + return found + + def replace(self, options): + descriptor = self.obj.Spreadsheet.createReplaceDescriptor() + descriptor.setSearchString(options['Search']) + descriptor.setReplaceString(options['Replace']) + descriptor.SearchCaseSensitive = options.get('CaseSensitive', False) + descriptor.SearchWords = options.get('Words', False) + if hasattr(descriptor, 'SearchRegularExpression'): + descriptor.SearchRegularExpression = options.get('RegularExpression', False) + if hasattr(descriptor, 'SearchType') and 'Type' in options: + descriptor.SearchType = options['Type'] + found = self.obj.replaceAll(descriptor) + return found + class EventsListenerBase(unohelper.Base, XEventListener): @@ -1813,7 +2012,7 @@ class EventsMouse(EventsListenerBase, XMouseListener, XMouseMotionListener): def mousePressed(self, event): event_name = '{}_click'.format(self._name) if event.ClickCount == 2: - event_name = '{}_double_click'.format(name) + event_name = '{}_double_click'.format(self._name) if hasattr(self._controller, event_name): getattr(self._controller, event_name)(event) return @@ -1914,6 +2113,9 @@ class EventsFocus(EventsListenerBase, XFocusListener): super().__init__(controller, name) def focusGained(self, event): + service = event.Source.Model.ImplementationName + if service == 'stardiv.Toolkit.UnoControlListBoxModel': + return obj = event.Source.Model obj.BackgroundColor = COLOR_ON_FOCUS @@ -1930,6 +2132,27 @@ class EventsKey(EventsListenerBase, XKeyListener): event.Modifiers """ + def __init__(self, controller, name): + super().__init__(controller, name) + + def keyPressed(self, event): + pass + + def keyReleased(self, event): + event_name = '{}_key_released'.format(self._name) + if hasattr(self._controller, event_name): + getattr(self._controller, event_name)(event) + return + + +class EventsKeyWindow(EventsListenerBase, XKeyListener): + """ + event.KeyChar + event.KeyCode + event.KeyFunc + event.Modifiers + """ + def __init__(self, cls): super().__init__(cls.events, cls.name) self._cls = cls @@ -2023,7 +2246,6 @@ class EventsMenu(EventsListenerBase, XMenuListener): def itemHighlighted(self, event): pass - @catch_exception def itemSelected(self, event): name = event.Source.getCommand(event.MenuId) if name.startswith('menu'): @@ -2122,6 +2344,20 @@ class UnoBaseObject(object): def tag(self, value): self.model.Tag = value + @property + def visible(self): + return self.obj.Visible + @visible.setter + def visible(self, value): + self.obj.setVisible(value) + + @property + def enabled(self): + return self.model.Enabled + @enabled.setter + def enabled(self, value): + self.model.Enabled = value + @property def step(self): return self.model.Step @@ -2160,16 +2396,17 @@ class UnoBaseObject(object): return def move(self, origin, x=0, y=5): - w = 0 - h = 0 if x: - w = origin.width + self.x = origin.x + origin.width + x if y: - h = origin.height - x = origin.x + x + w - y = origin.y + y + h - self.x = x - self.y = y + self.y = origin.y + origin.height + y + return + + def possize(self, origin): + self.x = origin.x + self.y = origin.y + self.width = origin.width + self.height = origin.height return @@ -2242,7 +2479,6 @@ class UnoListBox(UnoBaseObject): def __init__(self, obj): super().__init__(obj) - self._data = [] @property def type(self): @@ -2250,15 +2486,55 @@ class UnoListBox(UnoBaseObject): @property def value(self): - return self.obj.SelectedItem + return self.obj.getSelectedItem() + + @property + def count(self): + return len(self.data) @property def data(self): - return self._data + return self.model.StringItemList @data.setter def data(self, values): - self._data = list(sorted(values)) - self.model.StringItemList = self.data + self.model.StringItemList = list(sorted(values)) + return + + def unselect(self): + self.obj.selectItem(self.value, False) + return + + def select(self, pos=0): + if isinstance(pos, str): + self.obj.selectItem(pos, True) + else: + self.obj.selectItemPos(pos, True) + return + + def clear(self): + self.model.removeAllItems() + return + + def _set_image_url(self, image): + if exists_path(image): + return _path_url(image) + + if not ID_EXTENSION: + return '' + + path = get_path_extension(ID_EXTENSION) + path = join(path, DIR['images'], image) + return _path_url(path) + + def insert(self, value, path='', pos=-1, show=True): + if pos < 0: + pos = self.count + if path: + self.model.insertItem(pos, value, self._set_image_url(path)) + else: + self.model.insertItemText(pos, value) + if show: + self.select(pos) return @@ -2393,11 +2669,75 @@ class UnoRoadmap(UnoBaseObject): self.model.insertByIndex(i, opt) return + @property + def enabled(self): + return True + @enabled.setter + def enabled(self, value): + for m in self.model: + m.Enabled = value + return + def set_enabled(self, index, value): self.model.getByIndex(index).Enabled = value return +class UnoTree(UnoBaseObject): + + @catch_exception + def __init__(self, obj, ): + super().__init__(obj) + self._tdm = None + self._data = [] + + @property + def selection(self): + return self.obj.Selection + + @property + def root(self): + if self._tdm is None: + return '' + return self._tdm.Root.DisplayValue + + @root.setter + def root(self, value): + self._add_data_model(value) + + def _add_data_model(self, name): + tdm = create_instance('com.sun.star.awt.tree.MutableTreeDataModel') + root = tdm.createNode(name, True) + root.DataValue = 0 + tdm.setRoot(root) + self.model.DataModel = tdm + self._tdm = self.model.DataModel + self._add_data() + return + + @property + def data(self): + return self._data + @data.setter + def data(self, values): + self._data = list(values) + self._add_data() + + def _add_data(self): + if not self.data: + return + + parents = {} + for node in self.data: + parent = parents.get(node[1], self._tdm.Root) + child = self._tdm.createNode(node[2], False) + child.DataValue = node[0] + parent.appendChild(child) + parents[node[0]] = child + self.obj.expandNode(self._tdm.Root) + return + + def get_custom_class(tipo, obj): classes = { 'label': UnoLabel, @@ -2407,11 +2747,12 @@ def get_custom_class(tipo, obj): 'grid': UnoGrid, 'link': UnoLabelLink, 'roadmap': UnoRoadmap, + 'tree': UnoTree, # ~ 'tab': UnoTab, # ~ 'image': UnoImage, # ~ 'radio': UnoRadio, # ~ 'groupbox': UnoGroupBox, - # ~ 'tree': UnoTree, + 'formbutton': FormButton, } return classes[tipo](obj) @@ -2422,6 +2763,7 @@ def add_listeners(events, control, name=''): 'addMouseListener': EventsMouse, 'addItemListener': EventsItem, 'addFocusListener': EventsFocus, + 'addKeyListener': EventsKey, } if hasattr(control, 'obj'): control = contro.obj @@ -2441,6 +2783,7 @@ def add_listeners(events, control, name=''): if is_roadmap and key == 'addItemListener': control.addItemListener(EventsItemRoadmap(events, name)) continue + getattr(control, key)(listeners[key](events, name)) return @@ -2893,6 +3236,8 @@ class LODialog(object): self._init_controls() self._events = None self._color_on_focus = -1 + self._id_extension = '' + self._images = 'images' return def _create(self, properties): @@ -2928,10 +3273,11 @@ class LODialog(object): def _get_type_control(self, name): types = { 'stardiv.Toolkit.UnoFixedTextControl': 'label', - 'stardiv.Toolkit.UnoButtonControl': 'button', - 'stardiv.Toolkit.UnoEditControl': 'text', - 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', 'stardiv.Toolkit.UnoFixedHyperlinkControl': 'link', + 'stardiv.Toolkit.UnoEditControl': 'text', + 'stardiv.Toolkit.UnoButtonControl': 'button', + 'stardiv.Toolkit.UnoListBoxControl': 'listbox', + 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', } return types[name] @@ -2951,6 +3297,22 @@ class LODialog(object): def model(self): return self._model + @property + def id_extension(self): + return self._id_extension + @id_extension.setter + def id_extension(self, value): + global ID_EXTENSION + ID_EXTENSION = value + self._id_extension = value + + @property + def images(self): + return self._images + @images.setter + def images(self, value): + self._images = value + @property def height(self): return self.model.Height @@ -2958,6 +3320,13 @@ class LODialog(object): def height(self, value): self.model.Height = value + @property + def width(self): + return self.model.Width + @width.setter + def width(self, value): + self.model.Width = value + @property def color_on_focus(self): return self._color_on_focus @@ -2995,17 +3364,17 @@ class LODialog(object): def _get_control_model(self, control): services = { - 'button': 'com.sun.star.awt.UnoControlButtonModel', - 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', - 'groupbox': 'com.sun.star.awt.UnoControlGroupBoxModel', - 'image': 'com.sun.star.awt.UnoControlImageControlModel', 'label': 'com.sun.star.awt.UnoControlFixedTextModel', 'link': 'com.sun.star.awt.UnoControlFixedHyperlinkModel', - 'listbox': 'com.sun.star.awt.UnoControlListBoxModel', - 'radio': 'com.sun.star.awt.UnoControlRadioButtonModel', - 'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel', 'text': 'com.sun.star.awt.UnoControlEditModel', + 'listbox': 'com.sun.star.awt.UnoControlListBoxModel', + 'button': 'com.sun.star.awt.UnoControlButtonModel', + 'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel', + 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', 'tree': 'com.sun.star.awt.tree.TreeControlModel', + 'groupbox': 'com.sun.star.awt.UnoControlGroupBoxModel', + 'image': 'com.sun.star.awt.UnoControlImageControlModel', + 'radio': 'com.sun.star.awt.UnoControlRadioButtonModel', } return services[control] @@ -3019,10 +3388,16 @@ class LODialog(object): column_model.addColumn(grid_column) return column_model - def _set_image_url(self, path): - if exists_path(path): - return _path_url(path) - return '' + def _set_image_url(self, image): + if exists_path(image): + return _path_url(image) + + if not self.id_extension: + return '' + + path = get_path_extension(self.id_extension) + path = join(path, self.images, image) + return _path_url(path) def _special_properties(self, tipo, properties): columns = properties.pop('Columns', ()) @@ -3030,12 +3405,17 @@ class LODialog(object): properties['ColumnModel'] = self._set_column_model(columns) elif tipo == 'button' and 'ImageURL' in properties: properties['ImageURL'] = self._set_image_url(properties['ImageURL']) - elif tipo == 'roadmap' and not 'Height' in properties: - properties['Height'] = self.height + elif tipo == 'roadmap': + if not 'Height' in properties: + properties['Height'] = self.height + if 'Title' in properties: + properties['Text'] = properties.pop('Title') return properties def add_control(self, properties): tipo = properties.pop('Type').lower() + root = properties.pop('Root', '') + properties = self._special_properties(tipo, properties) model = self.model.createInstance(self._get_control_model(tipo)) set_properties(model, properties) @@ -3044,9 +3424,39 @@ class LODialog(object): control = self.obj.getControl(name) add_listeners(self.events, control, name) control = get_custom_class(tipo, control) + + if tipo == 'tree' and root: + control.root = root + setattr(self, name, control) return + def center(self, control, x=0, y=0): + w = self.width + h = self.height + + if isinstance(control, tuple): + wt = SEPARATION * -1 + for c in control: + wt += c.width + SEPARATION + x = w / 2 - wt / 2 + for c in control: + c.x = x + x = c.x + c.width + SEPARATION + return + + if x < 0: + x = w + x - control.width + elif x == 0: + x = w / 2 - control.width / 2 + if y < 0: + y = h + y - control.height + elif y == 0: + y = h / 2 - control.height / 2 + control.x = x + control.y = y + return + class LOWindow(object): @@ -3175,7 +3585,7 @@ class LOWindow(object): controller = EventsWindow(self) self._window.addTopWindowListener(controller) self._window.addWindowListener(controller) - self._container.addKeyListener(EventsKey(self)) + self._container.addKeyListener(EventsKeyWindow(self)) return @property @@ -3236,7 +3646,7 @@ def get_document(title=''): return doc for d in desktop.getComponents(): - if d.Title == title: + if hasattr(d, 'Title') and d.Title == title: doc = d break @@ -3294,6 +3704,11 @@ def get_config_path(name='Work'): return _path_system(getattr(path, name)) +def get_path_python(): + path = get_config_path('Module') + return join(path, PYTHON) + + # ~ Export ok def get_file(init_dir='', multiple=False, filters=()): """ @@ -3424,6 +3839,10 @@ def get_path_extension(id): return path +def get_home(): + return Path.home() + + # ~ Export ok def inputbox(message, default='', title=TITLE, echochar=''): @@ -3602,13 +4021,39 @@ def zip_content(path): return names +def popen(command, stdin=None): + try: + proc = subprocess.Popen(shlex.split(command), shell=IS_WIN, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + for line in proc.stdout: + yield line.decode().rstrip() + except Exception as e: + error(e) + yield (e.errno, e.strerror) + + +def url_open(url, options={}, json=False): + data = '' + req = Request(url) + try: + response = urlopen(req) + # ~ response.info() + except HTTPError as e: + error(e) + except URLError as e: + error(e.reason) + else: + if json: + data = json_loads(response.read()) + else: + data = response.read() + + return data + + def run(command, wait=False): - # ~ debug(command) - # ~ debug(shlex.split(command)) try: if wait: - # ~ p = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) - # ~ p.wait() result = subprocess.check_output(command, shell=True) else: p = subprocess.Popen(shlex.split(command), stdin=None, @@ -4223,6 +4668,24 @@ def format(template, data): return result +def _get_url_script(macro): + macro['language'] = macro.get('language', 'Python') + macro['location'] = macro.get('location', 'user') + data = macro.copy() + if data['language'] == 'Python': + data['module'] = '.py$' + elif data['language'] == 'Basic': + data['module'] = '.{}.'.format(macro['module']) + if macro['location'] == 'user': + data['location'] = 'application' + else: + data['module'] = '.' + + url = 'vnd.sun.star.script:{library}{module}{name}?language={language}&location={location}' + path = url.format(**data) + return path + + def _call_macro(macro): #~ https://wiki.openoffice.org/wiki/Documentation/DevGuide/Scripting/Scripting_Framework_URI_Specification name = 'com.sun.star.script.provider.MasterScriptProviderFactory' @@ -4243,6 +4706,7 @@ def _call_macro(macro): args = macro.get('args', ()) url = 'vnd.sun.star.script:{library}{module}{name}?language={language}&location={location}' path = url.format(**data) + script = factory.createScriptProvider('').getScript(path) return script.invoke(args, None, None)[0] @@ -4469,6 +4933,7 @@ def import_csv(path, **kwargs): rows = tuple(csv.reader(f, **kwargs)) return rows + def export_csv(path, data, **kwargs): with open(path, 'w') as f: writer = csv.writer(f, **kwargs) @@ -4476,6 +4941,19 @@ def export_csv(path, data, **kwargs): return +def install_locales(path, domain='base', dir_locales=DIR['locales']): + p, *_ = get_info_path(path) + path_locales = join(p, dir_locales) + try: + lang = gettext.translation(domain, path_locales, languages=[LANG]) + lang.install() + _ = lang.gettext + except Exception as e: + from gettext import gettext as _ + error(e) + return _ + + class LIBOServer(object): HOST = 'localhost' PORT = '8100' @@ -4555,12 +5033,9 @@ class LIBOServer(object): # ~ 'CurrencyField': 'com.sun.star.awt.UnoControlCurrencyFieldModel', # ~ 'DateField': 'com.sun.star.awt.UnoControlDateFieldModel', # ~ 'FileControl': 'com.sun.star.awt.UnoControlFileControlModel', - # ~ 'FixedLine': 'com.sun.star.awt.UnoControlFixedLineModel', - # ~ 'FixedText': 'com.sun.star.awt.UnoControlFixedTextModel', # ~ 'FormattedField': 'com.sun.star.awt.UnoControlFormattedFieldModel', # ~ 'GroupBox': 'com.sun.star.awt.UnoControlGroupBoxModel', # ~ 'ImageControl': 'com.sun.star.awt.UnoControlImageControlModel', - # ~ 'ListBox': 'com.sun.star.awt.UnoControlListBoxModel', # ~ 'NumericField': 'com.sun.star.awt.UnoControlNumericFieldModel', # ~ 'PatternField': 'com.sun.star.awt.UnoControlPatternFieldModel', # ~ 'ProgressBar': 'com.sun.star.awt.UnoControlProgressBarModel',