removes unused file

removes unused file

L*x5O]:h8!eF;L܀:}j? X>~W$mX@xdLKi)-*KY!e"X$imm
L>i%CP!m?BPZGu
.㕕:T&
[t1*#PՍCJNϫO	qID.`ܠ\W84J`Γ2jޭԬ_ 	I8Ň
Ό%MŢ8)k@uJ5-g8jʬ_
)7|AAcL	yʚha)u+UQ,ڜJ&D%J 1ϫp&-\Y
$D<J"Q@ZXD¢%$\t(ЉDJ"eRxJސS=K?mPHlT
0I#6.);*	5/諊tKT
WmIjZ2ɯJ:Sm4:ʎOSI~=y`u	`B VLIJRo/Zvbc`Mʒau}x\!𣕰bŰ[FZ[~Qn$X*65	[>LTAV8"$	9R98DL2w:
$I;Tp7 6&	׭(dL
$3#sqGNe(H+!XI8d H<)H
#	dc;{:ʍ K$>ًj*Ȩ kX*E"U5U!
x 'Z`;Jj`/>HE34(0DhEeFFK 2tcrWiXYR4V4b*
>W($L!oϮc(ίW>V)`
βK
`x."Q[֙BZ"k?,
XLcѕ&)OJwRϊHE-S;p4үlOF
H G
jh*&`_Ư5X 9JآD['P	GH?-[VƮI(s\ 1UUyHeh8LZ0 U()n7*+q,J -l`p
Wx+o]@CFAtBf|__zV 'U5@
֭)	>j Q!PrԨWWXc@}u LhdJv2ɄəɅɦ[IŽ^`@Kz'нo䩝b{`
:j*! 1~F%G%5ũOh@L}~YH}T)GQV:	Nl2ߢ3˪h@/A4B0'`Cxw[ɽ~NLёv[򽜠߅}*MRs;CO
ANB`n7~2;Ҕ"
&CeLpq,XBAb@ŘŃ,XbEDŉ_1bƈŇH,GXFyf\.flH
8ʱbŉKJ,IX1b̎ōN,MXLb
}xpF6D6XϱbQPO,b^_d0Ӿ,XbTSR/nsv
i㨔2PC(eėĖĕWVU.Ȯiє`O	>O?nښZ
	)Q]\	LI1ERTAD.z<24t.LH+Va1S
!/JҚPKV	%pN!#G	٪# 1Yi6NnM)f
RɪVZp	uygAO
7?B<,.gP|9 ~!;.t!b !C
1
C0123456789jy,{blxoK <<
??2x*Jdjwo"cِow!# cx<~5|y<DFo:褢%>r3aPO|~ P?j;y5"~ 	|wW@xw#mboYd ߔ㛶XqǌȢyxíbhby翎yxvqAD	x+9	iXa]QO
KaPcob;xdQ x`[y{d@`;Yxh@(9CcFL
Up(4cyv
ÅPwb}Xd7Fxbycx	oXy,J.wl|ebCl,`~:0 8,h~.~ly~ajlzb
k0S
0<Q<GpF,!!H|醱䀥@`iFHT :a>L4*b`w&N1ݠMQ QF/!1 #{2	3  @Ƞ¼)kטi:\e0"0Fc#5FO
a.i6'VMim&[4h%>Lo;3V[\m6)0\C!xI1:֕-u%%G:`=Y/+&	Y0J{%G&v$$Es>.a$!*5VV{ZJFOxsZ6YU\y5dä 6`3ogTuGLfVQ3YYoQ̤9GtrnQ5ܘ,
|eલ4
B?`"t
GYof_7!7t6)	/%%&vT R(IPicL04@-\8JŽjqo`\TTiZt9u8tNuCp!tӐuztӐuNtC!5NBj9P	ru;(0g(Xg(g(g(tCJ:P rQP0RXT9C8@UrpVbPWbPY
uNAwC!uӐHw)vtOw:rav9VwvN]wC!vӐd	!5NkwCaӥӥӥ(tCJ:P#:PK:PsATʃXUÔ3V(brW(brY(#gXZPKΘ[sVrwxtw:ry9wyNC9yRxNyC!xӐyxt$y:v8tCJ8'8xgOw3N38pθA3W(br8p'xO8gw\ʟ88U+y:rz9cyzNyC!zӐyMS!C9	r{Tz:sVMDJ:ql%X֑skYqT5c.c1ӍiƢsǈ-cԔJq8NdZRz'V%lb[X&s-TcPYtzy*m#Z[Ri[%z[H{h]&74P^	|c`_-AZ2Nj߆>b1G]r,Xb,?_BW>L͕6yX`Y "=<(@L&>S͠F$6eeiUNNTSsH	w(C:+X&DH"mRn!
%U`wJ*.AVI5LYw Mf	\PPPx8\8CM' U
&	fs;x`&,\3qB'86,uDRZ69@8 )XK:E.k\`e8H7]f6]RdAl@&<ਐp
	fd`\sgXURѵ^Ϟ<y32dɺI$0	'??Tsq>W	BI$~3놰<@`A6Z_wAI_G)}lx~) {!݃%w`yZ$
,DΘ('?@h0ð27*$!P(TKͲS m6B*`0M0fϘ@ڌ7R{4V41fQ:7M5-I(zqK(tFZ΃2kPhS;5
8`XC<}@`.q?0f6AGCFLYsfl๱Y<ؠ>bU>U?Nw6sιN" @Q8-f¿2rKҒW~:!d̶G@Vfvs4plT$Hq5bRDT<a$Q832Z&.?Ԁ	(;8sse{?R?0d&0`# n>sM3py{PnmxOPǌ{PJ/<nσ8<l,"s682m`0.m@s ;*&F.5DycN'9ɧճ 8`p̺Z9b'30p)*IY
4S㺜'3tp߶s,7=ÝP	ÇoX?@vqb	FrG$I!J?E8pY̅@5(f~qoAR['96?gS}!A)4P>|CXā5?D$Qe
Bdg8o% @|QAPnne#h4d9sThaU<xW\q##_<glߟAw.WEї+NH(`R{fb&wp8 S3vK4&{,I>T8~q{x OW3|_?1ī2D hBG|x5AP @_yv[@
݁A90iա <h]+W\`UZdÜH?Bl;0l(ӕfCAs'qK:Aʡ`%LِXӃnلGJЧ6g	MeS1[e,'0DiaؓR(11c$İkP0Fk{\XMe`VR(MH'u0{Np̊VĂ }@2kmqaSk K*rv!ّ0PsP)k6Ȃr lls n0F18P'-F`7ىʀ6!fa"l6+cxZ! @46wils5f6g(F>gų^l6@c1qT[|,\Y<,..RÁ<, ˃o(c	`2 t`JޠY0mPK%@OY1$>l8Ivp)~hyG|6|"2.xlKX8m=mgDw*Ώmt
v>`ei[`|=9lwʗ5
7o,:ruy~s(	aB1`#Nπ0|4x\5N
Cg(pCQ `@^6M
R$<qs
w=	Ǧ HL*΅3h/
|q3ǬGCZ81EZ<1РWfPH`	xň0ހaC8@d'
0  l*8X@ ɮ{T	8?(vp`G%\2;ppm$hᎈ7%0Ga <9,5P02а8?:g
@B P""pc9$@hH_pF)DPjTk0	ILJmr>h"m	m4ѕ~ɹs=?ưĽB1bG ^hdE,tʵШOu2CbFVrY%mF`Η&خӒ۹U`sNdu1ndTd$Ɉʌ*
ɀ2vza%ͪ`[<42ǲʓ˂yTnǝ.z*qI".9Q16*jD`:G<.vsJLPL(nvј"ws濝暰*&i5F
Шo0߸YY+%9oQق66[jKLCbO
FTI<
]?wļ*yXL@o1br&c7NH-@Vi	ed9E㊎޾q-:2EolT99Y0.)
o)0ey'GKL-829;bUrٔ?NLKQ7j	.LGBOkRm2~8a_jHZ_KQE.JLpɹ..q|d[v}1WnЛ1bNswQ6pDJ0[3e4'EbPspn7?q<6n79B=@/4(̔m&_q.k9Xy[i+0$
JTL\qWl]ɝ30_mirOu_A!(/
%1ԗ'$F)q+rU HӭtYG攴~h!G:iLhq")Xr`Lq+i]	ɪ3m*,&jҭr
%GHbs
T(Q:XҼI[44\B7C
a..A*WFL8̂8RDsEjrT88	)zY%69ΉȨf =Ð2cADVa(m\jI0ΙIp8Úp8E\m\9hÚ5ji16WpsX`7:$8Af*&?8;
c+` 'u(@j	A@`7pp@V? ~3fLOأ8wRk
9L4H+@4<Fa8<X:b1>=R %zHpqj1h-٨(AR6ƌвigZ9!_/]hkT	t&hH/rBFPH0`\&
t\h
šWב߿ы3Ɍ^.()7@B34*o^ %\3JvгFmBۣIf~c`0~1fm6q
!eU3B?Q `g?23,}Pp;u8<$ 8q+B&JfTfzF#*00?@`!$	>/@F aJf  HLJvv"fҝc(=ĦP(Yw4D6vy[]x;19Ïrs}|+9`e^pؼx}n_NL'W8ߜc<
;}頝(ʐ:>ҹh)}oխr*>ϔF4$*tO'!)_`EHv	j]h;Bvw0	i鿝L([#'ۦz)̲"n}Mnymq	YhLy#y:'W08z0) /nS[lF8՟yۿ;(=x^2ztO`ZRۼ"SEY}%L{{k[udfev*OX	lVZo޽@:DՐͳEPFJսGsuYw܉yn!LCniԙ-MQ}PjT}L>	A%8jr*rTLײG)}oeL&E
Ai[ݳ52"_{)Vt"A(:b%CL+quH}n
-0
&QȥLIY>eVwt8\wwŮ]e!4bzF3L	393Y{~}[8Nv_\bU0[@g	#e/\)XELNk+>u`J`}Xu䳇VcTe3	@]]`GJbkNT0*#)9#۝hG!=){(#{J΍C#3úQp-"SAz>jȄ;J28}5S(L=&VSMPYj=YNԽ2+Z:cdZQ'}Լ0iSFMLa|!W0LΧ,_i-g
)p*U ԯ-,")G=0kɀj'/i	^iHL[{.չ/S9L0>X)m/&1U5+5ͭ	*ؖ`n_s̗+p*Zp*.WEW۫З+n9ī\^rBx Lep@xXoژ0 .thV˿	:/JZ3/˶xX}T7 H1eԬ߿ȍl~J!hx%A!D
	+b"Z5(u%*JaQ̾^@lP"TF`b@7k
=:@Q3/^v8e&Ff,Hw3rTo0  D!"d
$
R EP2z/
 '!*+.1#$2?>5(),/0"%3j<4-'!&
4(siL=ē햦;Bc&؁1v
dS
_R9ݿOXCQ?ɿ<`RѱV	qX􂈍Z/쳁5|,:v±yvWPg`[jj$=
*+A:u-䁫6u2FZ:g}mub9`cu@us*{G='9l74𹞢VXem!yor9YqAD0-mD0a͛<Jh$(w$ž8:7n@IAXd\1-8+<:CRgt]8ipdYub"l'@7c2nt3Yub"ܿ.ā2	ghqQp]kVۍ-_:d5Ƌbjڌ;7bׯaicԌ}7~ ;hC4w޲2_g|ݍދLIb2YbEy`
a@9ZTi9a	JqescT]z5Ae%6nnhLi	bc2Ĺg6أ3_4>Iҍi
20_1/c$%TaQl Tnl׾7qdsf{	Rf\1EXT05Ս*a5:nNA9[b)=@[A(]MM1=a-&t	B.AwKڑf	:_-6s2m=VFaX0;6}Ul%wu_u
_:_Q;Wi&*_	Z-K=h>CB9_7'`\rx{
Hf>
`@o/j,\ڼ+#4>w=ɇd-зix
7kc_d	ku[HOR7(|Z_4H @YTU!4s`x}##NR]sc^?E,qHq4uuc5^Jxj81Ո#:s8͍\j-iH|F	}W?
9iM$`JH+<@[ k9J]|jt)@\eA8#PrMsb"N[.5*lo[߶S a?={Wpzx
m3
)$qC,	4e@.f=0N>	~Ih`ǰh[˪\B3;?0Hh1(_hh;\ҩV^sRTx6732C8t<-*Ĝ4
9Jzr<v^>LHr5ɨ6sP0
m2\IKl	.q?OIyK`0 Ol3	+qcd}˰M?KmI_P2TJ&?F¯):X%"F|2tE{'5ӃpQ]T60,N2
V	C
|+{8V%ӠĴ/L'`$OjBlLy&[:'N}Cb .Jm0jL9[4 `^.RaEM8S
at3f9L
*vW^
Sep}_ܸC>0@wi#	Dj'IQLP)=;(mCL~HBeo-A|ph+w
qxɐŽc"b8<<D5ڰ0((ݑØa} `Uo8?$vu
^3v}! &R2t\?ռ0L"x0}F=# x%Md<zȘoЉAnP\=w7VѤ~~`ii>;L"ɏ
v'Sw<)uȔŹT
}KJU]:# _<iFuI4im!j&e1P`jj'3}ü]" 0Z(bΣO}Jg|vi@
_w#^TN/~0^i!AwB	%?p
RgIW)~&SO;^}xv}@~KЖn 2`ܟ)t1	WN#=XLWc
p
d#Kcf@03Mh_ B
?J_NgEb
v	cs_x	ԍ)C
iƐi'o4ol#GVKnVX.FG!"t
9ȱFvy#w xL)0f,UaX[צ]4at]/9<hPL" !G
XbXbuy4!X*5}7@bDJNwI"/+jie]r@" }i7Ϙ
%F8 W!L!qZ	f]z11r1y)hz0htduUȼfrWsYHJ h:+	=:#LsPE2Q$`}|4LOHjTh)V`01!

#@AU9P`abcdTVWRSXQPfc
"% !$>O%8y
 6@$;$18<&:&?&'8!a<	6,&j;Y5<I,:̿?``1(=kZi>3lC05U0:R.D9VFF\LdtN2̫
Z 5. 7.71?Wܠ;
8p18/xwp,^=r
U3P+9LU84Ӹ3vBvy@hh=!'%#c+&tdo/v"!⳿`I1=pqN%$h")3ZV#Oj10/BôkF/=$0ĺ	:Cr61.0㘡{8"pb<<uԳ=t5F:t?7sb*LxUJLIbEt@Ihr~h>s5CkE;f~is4rljG:;=4}H?}Bd4qwq+p%EG $7
Ae*@l%!4 sʪ@hpΆ@:,ȉ[c ʱ0)31D
c=
DO3|ұ11Az1DbB@'[ iPJPKKH"o`110}&*(`	Ax"KN!PNޫ,wBa"!#8j0b4Lcz)>RY`9B#*18?FMT[b ;h/G_(0 4!"!Dj,Df,LH@ ,H$;
L*ٍ=D7C(@696$TU:MOW;*LSFIADCOVER$ +,U3L?FvhCԈL5Ѐҗ^΍_8cT&5^u8N`EZM(	n-iiʍp`8u+P_rsԷvO0Jm " 52j
<HTmD$;lDY40)xTNXWZ`MUkee5!J?{;,)L4O\+.3U,qH~=4ߢ21f ƨL{H56v2wQK	]:ߨŷAIAl`u LB|K.e}װm?KWD5쩃GG{?F)Cd^x4"L>~ JLsp?
Z0,_Ʋ
b7UM-,la1h %?L+]SVW½}`dI7I}.J'͕0M`;V8o
aui
-`L>Ulvf^5ICS}_KSC0@ji{	NԃXS5IL'mɴ,)~(mN6LM90
L(v~pҥhxabmл69OM8˨R30e`+Pr#~)?I
R!Q+v	8rJ$!{y )?9mL30pJ=#[ܷȘ*zː=7%)Z~'a3i]LO
v#U+[w?F))KR[ZW776WRTcV	 id5|U<s
J_ȹ{`])T,`'&
aRb.Q}Ja߲kS|@
dE#^ʹx_7R[1:$y
	*7ز
ixTG )ǤԀ3n !F	s)%='	v/#=cL)
w2Z̧kV𶹪ZK@0zzMdɵB
vJKNLQ
`waNcaÎ
i	$-8KOWX_^5G.j*ju]I`-bZΜW"M[X۠ Ms/vUy+w UL)0kj,m"n O
4s8C-XmGbOXcnrx|,Xb˂A1ywHZ']ՃHUhULia7
J8 eq^Rf1!s,zllrlyjFq͍hBϓ#Aڙ+r*s]J h	t`Z+L`HYYh)_`
'! !"#f,/0%)147lV!(^4-.&7*258J+
$'+369?%A~}K3S@&9KU56t7k#bs9w`u緩l:F6zߊA<dblX.cTq7G5Ý%F<>ßz\ab"\F`Pt<.]N9qv-aɵHC-($C.Rͪax?r&w~;t-~9ZLH;_I?i+gx÷|4>̠UUs
|7f>&6V@*Qw$D|c]_	%. 32v2a/qӬ.ii!w^'ct3p~HDh:20ֆ-B~GWѦ"Bn	8'ஒm#
ޠVQ
rw
6}	꼿3nZ/brv]ٻ:ocݶV56+8}7y;D-tǈ\$Zq	z3Й	{sBt8p]1d/kJpX65+zsAX
61p@P1`pbQ̰f3e[~un Nr̺c1π_1lDDг>+X:	;h,XA|ż?.r59<AC~-D`WP/bۭkhTȽVrOV.2ŵZC=躡 BHI	!3qx`3o0*wv)ͧP%p&ƭBrcz+)
(Ws0{Yɦut9P]w3bQK7`Df/~|1UTJ5	S&s9qs)ᘑK ><3	l:A譙$roqis٩ɑȏr93rHUTs+j^fM혍?fiK=?ٳ6
`r>;&%Ndq.]0M&KCsf"Xv{fl/UwrƼƺ?֌B:f~@wvg@ATip ݂@o@hg.Dlg.}QZҘl!TVcH8i-$ a'	'39i'>s1QG%9〄l[< ($
a.<q	O@Y$"0KZcY6#`I`lu#9'8sGmA6d#=fPZ"lTRȟ
hnB!plAڈУRot\ t	*JA3@[#: {$ÿmh=!
ap
aЍ&-ۭ%K	A]04,%Qv{nWtM.OP[
%`|_n 9hW0R
&?()*+(i&o7y3ku%w1^rHf4coj->S2

 h	 @!H"#A$%$&'(j$@1B @A5Q0}dD(',{l^~S 7M	薄TU{:HACoELPORMI@ @(H@)%M`
lR<K9	{tw-ߺ{YV"Ģ `hZyE!<==B#.cOf0t7EeYKҟ(SdoOl}$BuITN)Nz`iMQi?Bz5]LbdLO	JHV3wXU,0B44 jLHf5}?6kv\/.훝=Q{^dIȭ`9 xwJD&?KSgnyLd>t	S.. |C
A9f+@)_r?7SiUGs-	~e/RRL/?!}="^,9D}P\u}.6C;e
ھJ^
saht5LISiۛc}l<0eɽtWkm4L+ͩ#z>p|qTPz*[Yj^gpgӛzp+T@)q
V{\AW=J$!N [/HVK3PgiR=#8J۲ޘz:Jhg3Kەvr_I^eP̿jN$޿Q/nSHC
aAg|I_.e_w7^,
l}
AH4{!Qϰz^0=΅zgS,3KP)ӃH~)MĿHMM
y]#={#`ߌߙ'
i-8)G(HP?6ǂzH@'5k"t(}Ǯk=zNM6	D
m==.{{Qi%|3,
߆{q#x(
oj?*_g`h!MD&(8ˆ93AFt4N"
v
0+-}
L)12:=BDGX#)	(r%,C./0 '*$567;>?CEH@~}^@iz:H<p*@"Q=ar`v-6$_N<L9r9E~*u4t 3> A?s~6};@*ehj..rX0-^-,1rHK8^ 8TIQP8%F%a`H`q8V37xѲ	ʤ2>2-=XqeiC-IX9,:8=AGpfQ.&`!d]{%)<8\rX̜%~{	MB@4 (5c*7;Np0$Rju)y4ƀm\FusfW-(Kv](=2Em+F52Zs5ql{wT5'N2mr~ɴmHKFjbc8qH"36sf:
C,"~@$Ρ}~'^hHSlqFR	CYéG1TjNV3)
#2=K!O_¡-5(7Q9]2*2D54^p?hqC2f 1RgJs~ִaZd@dF*%`kB(rJ})N-B.lht&hkk2$.p0yfE-)+.P2vfڜ`)fmĄ:wrZ%76+~i?3hplenI6 k$ƗôSbtCڰppRϸ}Fdr$4aɮgu QGuZ'8S
LO.	ʏӘ@~Q?D!?@Y4!i\)&*`	R	F	cOAm,)Q{l
oNq?jf!$1_7Vs5RMl#Bals&F`/6Fa|
*:O^ 'FCA(ABp
 R"	"G
3"Oi SJl侴*tGHߐCRI:Y|JMANTCUh pM}Smb1_?^͔Hwهb%	G[R}5`c,$խDI	sEV
i,O _H|oD_Jv&_9!$(_~-ї~
ȕ$q'VUZ`1)N,Ǽ/`pM=?j)pLOX+ ,-RR35,&"},9sݧ}h=NHr5Oͨ۠6a>ZT?⶯cfqIz/gvv-5ݦF4_6E7ݦ:AQ	M>1m:8?S/>brYV/+WA-X}7fO}LiVϛ,*x?u;Mx2av?o}ݟ2N&>l[B*9
V}-תʖ~mgT@}vN'Z05\kwFvm?{+#۟\smvT|iӧMCdWanFӼ'}U+kNiLm>UeV\8$7!Gu9~G+G03A(v+]֚ȘV/J}T|Jo"s.~҅Zz֝;ZiikO-iwH/ֻcrZd,#}}4^W?@ Ud8B
)iȹ=ʔO֚deuԍ\_.U(vX}LIˢW>#=(KyϞ֛yw6gj:7`uI|5>nӡA~<zU1C<Ս_'@Y-U"mb2EԚִi{4tM$unعG,JX@[b_ԋ,xWXbZi	aˇ
%jOKZei)E~
nK2ixW7!OUi,`0
%"&),/2
?6<AB #'*-03:79=@C!	$(G+.1457/8;>DEFGH-	vqed"Vciǥ"X~8<-^+s& ͫ+wD~$JqyS 縔}zV3͋#n'Qa"Ǯx?p.r#>|)wxFf-˞w`&7qpu=c%"G~)ds{JP2:$%q&@/5GshvB76$eDp%(	RLJcaN6Pzŝ,5A-,m/Fx5i#ra."pS
	Yro1JΘ^Z
lrc=dq7@#Os~5p & upefBQUp<SèR{Ty5	M,X)kMtҌ##aG|&|j3DvKq
ډ:qRm溽{h tn	FÃ:EinC<L.Yi(¶UZќ+fZuοZr nn X*Xt[#Ms:&87XhϷy:$T>Iup9ғ&Ҡp F@>	p+rqc&zk0˯cDhkJǐCDF?wp"Y!Bm#p$+L7QM.޷wUjĘ	r9gJE+H?1a1jȍ4gjb2`?<e֏ل#ZH>r6$'9prLpіLSӸ"B"86ոp75.u:i|f~)R4mH֡Pr6
Qprap,
p(ria4m
8|21R5E+li3;NIWbAԿĸ]AxkfYNvfr
d#_(-5&
r=db7~[9ظ5dQk+:{>=_Jt:CfۼJ.+]dAi&ÿϗhAyq<17(ǹ2I"$̳%D OVTQ1bŞp̢Ť1f,7pqiU3t}Tw@˽L]"0m3K22}^V,sKVةY@з-lXbԲeq-x&Qx
ഗDK8du=ա,J`[hSIJBa>1T<qA_pfS[bZhs%fMpxiCqu@,*hsar0ò.p4H"Y}0r(<-%PD-Hk[	xrI7fF$f^e&	J!Lh
NqVRYvpW-M؍=<w:rFߥۉ?j)JUdgEs$ynt7RDo@>IyB<(HNp͒]qrmcg)[v?POaW`s}j$EqmI$ɰ?u2)Zf~t+ڛcڮm`4"hqpj}}d̑Cn˰;UY?,F$pOe[΢ZqfrЪmwsUlM*48%=Q j -/ʀ;`AďZx4$?
s2teR5D,\p48f2D/E!sZ/;9ZCH[pY.j;E!T`e;d#'yզZFb
jZWpeNbB
6&3lmt;C)aBaXvu&,<kdfNt'a[VGoK2K]hY RU'	о5@-.A)1-@PJIwr[ŀ
;im/0_FYr/l)*A+B,)_'mVy[=8(|g]^q<x{+`i-,@dA"  !"#
$% &'h()6<DE=MUu-~s =S-WkIZA].7SWM1>(P@'oC%T:JfNAZkHDUYRkGAE_MIX. ,87ctuS\OԈ<*留	Qb5=8g`eHD +$	URy~\8"	PԽ~1Nd9
Yì/@ϔ>?'5$SκtXNu)gNGkο`cJ
MyO?}e;%LOu\U"ڄ3%,;:<_4wF^ jLH&5mRy6|kE>.󝽌|[QIޥ`& 'J|m4H|?K?s2(d'3	Lz< |
ך͙
~6rwbWHssf-7D2 \˼L`vT"]&S5
DiLwU/]ZIz}[.Ӗ#v0`o3V8
9a6LS'ɘ퐷:^ƶ}_iq0{ڮmLp+͖#;IpSESV[즍b\qݜ8;WcMIĐ0ө+wO#ݗۏJ
y*]8Hz$U!o )?9݆LPW03&e=#KBK6/<}J)ӾꖹtVk5W3J=5+	&I`|H
aJbga~b߁J
xE;Yy݃91n,
!$4+ `nՍ{V!5Rs@Lɴ:ϩ==)K򐹇^!<
yu훹zVHyg`~1OW};td.@AEFGPHJ
OJ1ː{*@``3"ڧq>[Hk L_)0SbJ@[_,Xݱbx	l
	H]kH5hL$i7
CV8 q[UxY)!	ף"`2!M!#$G|
#&"
%#ju
	"' &7NO$/4Z+Rw
xF% $t	[A|~?~?9KÃEuTN1nCde;D;x;`$|7>-I1υ+A|C*D"_.a:?Xb~/Uwz_$f13a<bR:<b.!'8D[C.hKqM90A1gtYsd1˿
,I=w4/HiZ6D}TU3HJ1Xk՟j硱>B`z%W|0
NӼy!&|]:iv!̬y񥁰@v"RpӴmY!U38ڙcIF[&1p歞N%-ke2yx}֟a&&6[AǸ>T	rYw%lTp)#%v;,L*" pu M"H1%'taÙ=1<NH,:8&61&Ǭj/PNXGqR'=(&W#8-:v<:3-Lzrp4v.e.5D79ы?f	s6639[SwM5zq1$0z(v,g	*D.6w0v2HtkYŪYf9]s:
r5s~D} tnjL/1rn|t!+C	/Np}<c8ދ
obq¬:wk P=BcCcr[\5s.pٺ@
^˱J$q
̵
ufd6aV~.7sRq.p3DXv1䅠s5#w0&blwqkͮfkp09r<$?-pf,'muk3bq_`\@<D9
*T?0cda!9R}L}"-o0݈.dd`
&v6HQ$c'y{FA>8paQ0Es#*Y#Q3$ o6=L!
Gḽ];VR29	40A %Фxب~P@
+I/
N/p2Z
!lg"l	iG?!Dz#\M>z 4
B D3fb$D(35Qfd"@`adbDB[A'ty#-_RD.u7g &+TWMI:L^dUNePbCO CeR2$hkk+^n!w5U685wǊ0?ھP`^G) 	w;E^
lo/	iiE[T9践0q
)@wl\\8Cw(PrseF^?r5*&Q[ Yt
px
mލ3|R$U"wIWsg9)wicNE@`MjjȅT?\W0G,L&rbq])9CϽ3~}9:'4
Irl !yLiHˑ5^6e~nKc	.ws?}[
[I`#> k	qc}J<}c??K't??1x8	WP#f 3g`p
?XD"0,__
-6%ٱ7\OF$Շc	 ˼L=`߅]x]SG$`7XIyT}f.J=N}40`68o
aof.8^Lp}_1C_~0@㑽bi-uKTILvm5)!(mzL}B͢:s-ph̞$9"Hɐ|p
K=;ByLY8rt!Fΐ0_+F#}
U$Oavj8gS*$!T ޹lt?>L=/
Δ0}ۨO=#4\$[}uȘAMkdL6IiMnSr
p(w+)73yrgT}ڧ6.TRq =9#T[K
J'Dȹ(}f%7bkf`/y/bkIAd6Yoy~3^j鿅Yl~!"x	!uoɾVWӷ=t]T}Fs7{*:L	6)Ls
,	#=cDK@0슽M B
_6WjNL
x`"	cf
i0ۨ!$T!`=3Kۓ"Z
N vtе(wﭭ Ll)0qka{ki68t9_LJ"w
xb=3N,RXjE#'A,PXYzri1yH~]N[HehL>i7|
8 K;WN!;z4sXz؁;Y'Fvht6{r.퉚x(rs`H|J ['h)	y`5(Lb`Bm?S3he+28;>5?aW/(E/;]CB/
 &),036@NOPQXZ\G^abFnMD!
G@	"/#$%.!'*-1#47ASTUGVY[]_cGHJVtq!,X$4LfNDKh)FNa	kv,$\br?iO$
[tԤ%ñ*й|naE-ȵqc=	F=J1RG!`hqEtQExovMQz	1T05a6f]PrSO:?p-+~}2/hsK+Www|:.nŴ{w3f:	fdL+Č$RQ#OMap~eX>nUSTx2r$Z['ΕcUC[vb{>>.'"Er$[QeyDC6A60Ga_HNaxxP@>rϐ)B1Aa]<9	AMc0T:Z1px(A3f<TPU(qJZ'c wdTFp"w~3m361:kGIy!m$%&Ӣ$=&aѠrW¿mp:Y7plTy~JT*8nS3id#)`)T8n<e357]ÊWn>,F5JN2c.G:K҆4papD'83wO/eB1I7cI5ƉD=aaY:!ӻ
0ӽ
05
pfcPÔfӉC@]?
vÂ%=î
.E2
Pbҵh5br?ts܊VMf/1W_6Կ1
Iߪ??;VD@N|ܟ]V$Rv#lc6
KKjK
fv><BSP*A_6EfCGHMU
"hht
JHF*ʴhxO?Hu11`p$0Lb.L)*A~而5*0/l+m)./!#0fq| +rQt7(MECF85>jJ4!<#;#:#p9izd"Mcd3۔BtYuGbCXAmjf!&2@ïPG?2><%~
Vӛ%͑n.B\)5ds΃75ߎ,i:aHxu5fnucE0w]A]23s>(zexisJ[~6sm5d쮥fܨwr|u"r>Wp%culqR p$wԠ
: 'ЯLԁ߾MP;.m"b% c0vg6C`Q|vځ5ctIR퍚`@G[P1 5	6
-@l`EL" OD\4!i!Si&Ig' AJSZmY&!Az#+Pdv:dE( $	Am&Vt#jX5.i:Su)K'A(",KXt#Sg%3Nv9cx$N^o
ALW	)cU5",=ITs8X07>E D8!A
ap B!!"B#$%&B",DY#T,@5Y˘ňs)t?ăyެ7^1CNHORAM6:YUNu-bITLE.H( eHeNi}^R>
xsKcp4)mXGh5rQK8b44v8j[&SК	"In@iJxM`RH|R 9OՀ^85)y@qpI81"Prx4XsD<n)lvM@) 3Ȱcp/x;
mD3f"$VY9ĆN+Im3`e
#_ȈY-!c?0zH>h1(Ey'*
G4SOs(6V«a
6q3_&Q<a*ۿ
JvXXq1LH˖5MO60sg0
7mt\K	Y.?ȟ%A/I"!`0 lf	qWcf,۴}?K_?gy7)9:bq<"Qt"V'4U?p{>e0,C		'uL(w
mBo	Ǣ6'r
GLn`E'N"qOVBl[y(&n3[2b!}CCS .rGϼF0VgsZ`8`(Te8<)
a:\g*L
7S^!}_Ov9Cz0@i;	Pe@RILPE;?)0V(mNLѤDHB(͂cT-Op<hoxbxhɐ>\zc#ьEsyǤ8uޣD50X(?Evx\x ND8a*$/u
v}!I nKt?r%:vLlE0}=#=SYCްdonVȘL,AP==7f5Z~?IiՎL+
v*w(t)D͒}LRQ,p+
X ͹;ƔO1
JB:uW,R `k]ZE V0bp(}Jo^kw|˟W^&_]p    '(P	a
$%6i6ɩn鰝>5N+x(, u(OgZ+n %,4nݿY<)CܱS	1ՠN#=XLL_Jl
`PiЍelKM@0m3M B
ƳǗ+&lN|
7f13;w
i
'1<NSZbkqx#G^(fX2
d>"A۽9/эTvjkC"w Lg)0aa[.J]ts9L
L"
IXb
bXu,yP!*5-i@DJ,NYNwEI.B.b^]TOHhL2yiI7k
"8 r!qf*fzryk4chP]d Uμ2"^rVsvHdJ hQ	g3;:wB"Lsȇ=*)D`}4L?HTh)WV`PZP1RUG	*P2NSTBAC&!#<`" $Q#|lEG::>%!;')573K7	~(0)CN:B % ~@3KAƝ!JTxJ<ME@ ZC`HHF3II1,JN<dR$bYR+4EG0@`7#鲉MDua!!?e8Ot?Q5;Gf?vzFA.7M;N)q~M)LhH
K@ )a"1L!	(]PPQ0DA4X8FTCBd:5ZR=s̺DFj bLpRA?I>~$5/ ^I;,fp;覵
Dơ<DKpA֫)?~9 	cq.Ct~yr@:u-s~>I)M<+HPAi:5n0v~pAwr =eYʪ!BQ8$r֢8!6b1JYL`()-8rOLĀ )D0(8D:H3ju]k>z@%!ڠ>
$W2k7tg"!@O(a-/,H'L	bAD
j c'޻X&<j/
"J|_!Ba8E_y5` '.Rt{.V]dkryD@ 8E
"=՘I	D#6P%} SF-WIZARD.7SWM'1

@dCT]MI:PRFUGSCOVER2 )c8	a#Kh[XOԈ&^
tN9)KY^V_5S5z i8m6sф	m[[d!iBԜi`u*H\!N}02~0
)@~mKV漜H81PrE
s|wZO.'&="
+)Sp/x
m36S0$V w^XJ+E:L)cNI;}`b{R[?0?Hh1( XT:ȦLugu-z63CEK<*#4
N\SʣVLH56JnK\	ɻ.坹?`7UIތ-`0 ٠	q^.cJݷt}l?Kl4_?KΆ)C[=^i"M2xdy" l|~p'
je0,d/
6̇
T]Z.f	b! lZLM2YE\n\à(װX~HJS,0nL-*`Pw(8
aH	LV㐨l.u}c~}C0@{Di{	N	PDILsm\_)(mN7L2tB|:-΋ph5)$^+g6zɐO,ڪI^8V]4ޙZːI5{Z0({ {!Z /aMn43u
k}!>f z޸t_?мI=ɯLI9Pq0}:=#ąȮ\=߱Ș&*AyP=7A~~&imHL
vTyʭ1w)xfrY}-SkǝS~i t5W
J}c&ȹo-s``hyjs J_0>}br}J}˗k/d
^W_^
Zd
A
ib^E , @'/8K^s
y,BtY,{'Q68YN	Тmgp:Ddu8&@"ȴqLh8Eh$'鏝^U鰝<M+xu2 ,ztJn{{HL-	)VlGq0	#=KLVN
S?_}TK@0Mk B
Pӑ6QNL
`wA;԰
i	$-8OV^gmt]Jխh_ꤐwkL䳻Ygvwf6"K\۠ ԗ'vMQ1w Lw)0
a%)ZڊOtR9LȽ"
mb⣫Ŵʋ,X
B+	,408&9//H]=ݦ~HhLiv7
˝8} oqyTC!$%szryIѭÍdNhgB#ݼ1^rs/J h	`ר1L&j`Hh)	`7,qUI-&:j,
^LK$'*B>2-4XEJMP
8pȲXI1
)1$(B+105FHKNQ!%,QL9<1.$jj,Z&)c,/::K;<b=>?@A,C|3D6GI_LOȕR"r VTX{U	S
`b+!Y6W)ac[ZZ*[\\]X^_d
 ~a5Ұ{zۥfkm;+!)<ƛьKɑ#L	:M)2̞g
ɔ8҄XH5pd~CӭG|p~-k!X'}-E+W')~)h[,
~-p84P|u1A
uk1rڞ7[@43$%䱡,A?	K#3@@u2[`0S33qJ?u/ |Q#58Mʳl[|}rlQ%vgcd[c凮yn2J3|*Ƅ
?m*7Ix!
z
;96m7ŎP9[$Cxp۸
d(xv7/5K!flgM>G+/xV%ӂTd{mO k	tX%B0M.q&@˄q.Xud1lxpO`&j|n0`0YpP_l&L?whpJjD|tBKxoq9+p##`$Pde	#.N735i
&q?::~sp,W'Ħp)C
|s"n ά0Փ3O:.!xeAR5s= JQ0vc"ͧ1]0JBbQ_f)wt5d7 S,]vh	s3c?'txr`$30)A]5G3net6tbZ퓛+
0uϔRG)X&urCsFts=Zi!qCA/KThJ7u1=;X[p;e:divDtu`mi3
EoXpy,tK\n"KcM,i͡#qڶ1M?~;
Du:l׺Mg^wsfVNpLg<u>i0'4y-@:9hۘBPp|ϙ1Ƙ?qqK:aphƪ7b̮l?o	yF> oZ]}p?[,37BH<t1:3-l=M4<\67s7i4
,x#P
r[LpHvC[.B18elwnJp37h	QBp LF~v!g@Xj
׳
prJG,tRš"wqp285&vߩ#budcNe
DC9`8IIt&p].rsaGp8]`%ӂOvY?3iジf@[@t݅vmv$7Br'	#Oh2;rs?Få[%de{C*+:'7) as,qElQ*6l3	k;^]Sw2.se:
iݢ5~^uEfSkO׷zcΫRb?iNTP:~VN5?!8}&UR$*Ϊs.?0҇qg<	1#6~Et-ZFFr7f->fmwn\8*m}· qU;\hoTD !Oto~XJz-
<vFibbӅ5oK 'v%@KKP*WOI`Lk9i	Ro $
S.f)@z[YdڻJ!qBSvvk%b
NJy#'lmdUP`1*]n3
I=&r4A6YeCTImBp|B%Cp.$[y`%yjX2	XFxkw	5V4v{t1[F,_5iNpG`.@/0@1GE,6@!Wl<Hxr_s$S T<_s$5e!T3~9:Vh	3=d.B@_@
 2! "(#@$H% &b'A()$*+(,A-.j,ĄjD@$"D2RL@FMBW[krctumi8
LM2ǵD΍`L>v]!0يZ.IWiJ.CPKW'
72*@~Hjh-
'R& ec*0sMtW=V󱚘'/L|`h00)/7Q]F
<N"PJ>9E-D#tw
zunбJL`~DRm4pM[''lA!	ԟ }ȺWuZ@Cȝ4e	LrU(fh#xаuU^\ʶz^_8`=Q6'UwZNniJ^Y>ji\M=JFee'U5+SRJhA&Lag @_96npʿS0FɍLk})~M dݥZrROMzMLsţ1ۂ}NJ鶼ejȘ߹}4ݏL]\[V=@#t. iCJum`P)CGǆ#&E	XtIԩW:ȱykIޒ=`8U0ݴ '9K_t-NqCtZ-|(R79ZO
ѣnhq<Fgy<)D(ͺxSqBOt3 #c NSGmI>C @.147:>AEINRW\bhnu|,KjDOsy
Ec9\3uDf.PE
$a
0h=[`BD1C1A #36	ԂGo
!(HB@L&0@a	aK.0I4A-bDI% ;R
P-+_2F2F!(։PBo*@jWD	P*o
94|;
!#%&(*,.02579
 ""$')+-/1368:/ 	YK=!qagQGU#Q7!󔍙364ACs2󆱄NĒ
3wOV-pe:c	zT`Fzg9$m
L:6"dK%4ŝ!P츄pWpQ}=lBY`d5߁!'NhlB"jQxAz)@'$hb1ˣ~dt|}ic!A13{xLCo
PƐ-\Y164<0sxŚ@rD@f)s$|ǐxPWW`W'bp(
@ze+T+RАn]@XaFRQ(t5-,緛7<|?G
3X	?]FP\Lg;;D`gM48y]C6X
]Ea(&󉝞hNFϪ5tȓ%L̟xFEJnnlhAA'$L9>򒨗z!8J4ٙ,,gVy4H챵77Tu.4Ay44rS_D˜**C&(5E۠4N,{]
?F']u%E	T@֠1LF6D@|/	Ykj"l6g.WiFJtІ.ZS
2KFs8M2ld͞: ÏIЇXَ&r/<<L%r0dW2ŇhP\DjD9B$zbE%L@f&af*Iv
9&][͔CťP'
0|pHĆLByS	ΖBP6VXKDuD*qN"z@Š,3Pӟ@	c]ISK%q95FxR|ot(OP($aF_@HNʬDfl*L/ABHg J߲.7O􍤌>(`/K!<:=hkdBCY
i?j@q{ER|>F^KC?`j$T1qHHxbi0ۏNa2ߦ?k=:dLF}zs}/(xg@G|0A-?Rf{8Z~#S0pGFv`g.ٍL]-ڠ7c40Z@8nth`gpbg}@@
 2 hP4(
X
!#%'*,/258;?CFKOTY^djpw~xCD
w0уrɱ2֢ǠL	ˍܢ)z2ݚ%X[M23`Hd
ܭЍ9Xh@$	(V"BW3f!ʀ5QBD:


codegen/QtUiTools: updated

codegen/QtUiTools: updated

Modified:
codegen/QtUiTools/QUiLoader.prg

%%
%% Qt4xHb - Bindings libraries for Harbour/xHarbour and Qt Framework 4
%%
%% Copyright (C) 2020 Marcos Antonio Gambeta <marcosgambeta AT outlook DOT com>
%%

$project=Qt4xHb
$module=QtUiTools

$header

#include "hbclass.ch"

$addRequests

$beginClassFrom=QObject

$addMethods

$endClass

$destructor

#pragma BEGINDUMP

$includes

#include <QtCore/QStringList>
#include <QtCore/QDir>
#include <QtGui/QAction>
#include <QtGui/QLayout>

$prototype=QUiLoader ( QObject * parent = 0 )
$constructor=|new|QObject *=0

$deleteMethod

$prototypeV2=void addPluginPath( const QString & path )

$prototypeV2=QStringList availableLayouts() const

$prototypeV2=QStringList availableWidgets() const

$prototypeV2=void clearPluginPaths()

$prototype=virtual QAction * createAction ( QObject * parent = 0, const QString & name = QString() )
$virtualMethod=|QAction *|createAction|QObject *=0,const QString &=QString()

$prototype=virtual QActionGroup * createActionGroup ( QObject * parent = 0, const QString & name = QString() )
$virtualMethod=|QActionGroup *|createActionGroup|QObject *=0,const QString &=QString()

$prototype=virtual QLayout * createLayout ( const QString & className, QObject * parent = 0, const QString & name = QString() )
$virtualMethod=|QLayout *|createLayout|const QString &,QObject *=0,const QString &=QString()

$prototype=virtual QWidget * createWidget ( const QString & className, QWidget * parent = 0, const QString & name = QString() )
$virtualMethod=|QWidget *|createWidget|const QString &,QWidget *=0,const QString &=QString()

$prototypeV2=bool isLanguageChangeEnabled() const

$prototype=QWidget * load ( QIODevice * device, QWidget * parentWidget = 0 )
$method=|QWidget *|load|QIODevice *,QWidget *=0

$prototypeV2=QStringList pluginPaths() const

$prototypeV2=void setLanguageChangeEnabled( bool enabled )

$prototypeV2=void setWorkingDirectory( const QDir & dir )

$prototypeV2=QDir workingDirectory() const

#pragma ENDDUMP

%%
%% Qt4xHb - Bindings libraries for Harbour/xHarbour and Qt Framework 4
%%
%% Copyright (C) 2020 Marcos Antonio Gambeta <marcosgambeta AT outlook DOT com>
%%

$project=Qt4xHb
$module=QtUiTools

$header

#include "hbclass.ch"

$addRequests

$beginClassFrom=QObject

$addMethods

$endClass

$destructor

#pragma BEGINDUMP

$includes

#include <QtCore/QStringList>
#include <QtCore/QDir>
#include <QtGui/QAction>
#include <QtGui/QLayout>

$prototype=QUiLoader ( QObject * parent = 0 )
$constructor=|new|QObject *=0

$deleteMethod

$prototype=void addPluginPath ( const QString & path )
$method=|void|addPluginPath|const QString &

$prototypeV2=QStringList availableLayouts() const

$prototypeV2=QStringList availableWidgets() const

$prototypeV2=void clearPluginPaths()

$prototype=virtual QAction * createAction ( QObject * parent = 0, const QString & name = QString() )
$virtualMethod=|QAction *|createAction|QObject *=0,const QString &=QString()

$prototype=virtual QActionGroup * createActionGroup ( QObject * parent = 0, const QString & name = QString() )
$virtualMethod=|QActionGroup *|createActionGroup|QObject *=0,const QString &=QString()

$prototype=virtual QLayout * createLayout ( const QString & className, QObject * parent = 0, const QString & name = QString() )
$virtualMethod=|QLayout *|createLayout|const QString &,QObject *=0,const QString &=QString()

$prototype=virtual QWidget * createWidget ( const QString & className, QWidget * parent = 0, const QString & name = QString() )
$virtualMethod=|QWidget *|createWidget|const QString &,QWidget *=0,const QString &=QString()

$prototypeV2=bool isLanguageChangeEnabled() const

$prototype=QWidget * load ( QIODevice * device, QWidget * parentWidget = 0 )
$method=|QWidget *|load|QIODevice *,QWidget *=0

$prototypeV2=QStringList pluginPaths() const

$prototype=void setLanguageChangeEnabled ( bool enabled )
$method=|void|setLanguageChangeEnabled|bool

$prototype=void setWorkingDirectory ( const QDir & dir )
$method=|void|setWorkingDirectory|const QDir &

$prototypeV2=QDir workingDirectory() const

#pragma ENDDUMP


QtScriptTools: updated to use the macros PBOOL, PINT, PDOUBLE, PFLOAT and PQREAL

/*

  Qt4xHb - bibliotecas de ligao entre Harbour/xHarbour e Qt Framework 4

  Copyright (C) 2012-2017 Marcos Antonio Gambeta <marcosgambeta@uol.com.br>

*/

#include "hbclass.ch"
#include "qt4xhb_clsid.ch"

#ifndef QT4XHB_NO_REQUESTS
REQUEST QACTION
REQUEST QMENU
REQUEST QTOOLBAR
REQUEST QMAINWINDOW
REQUEST QWIDGET
#endif

CLASS QScriptEngineDebugger INHERIT QObject

   DATA class_id INIT Class_Id_QScriptEngineDebugger
   DATA self_destruction INIT .F.

   METHOD new
   METHOD delete
   METHOD action
   METHOD attachTo
   METHOD autoShowStandardWindow
   METHOD createStandardMenu
   METHOD createStandardToolBar
   METHOD detach
   METHOD setAutoShowStandardWindow
   METHOD standardWindow
   METHOD state
   METHOD widget
   METHOD onEvaluationResumed
   METHOD onEvaluationSuspended
   DESTRUCTOR destroyObject

END CLASS

PROCEDURE destroyObject () CLASS QScriptEngineDebugger
   IF ::self_destruction
      ::delete()
   ENDIF
RETURN

#pragma BEGINDUMP

#include <QScriptEngineDebugger>

#include "qt4xhb_common.h"
#include "qt4xhb_clsid.h"
#include "qt4xhb_utils.h"

/*
QScriptEngineDebugger ( QObject * parent = 0 )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_NEW )
{
  QScriptEngineDebugger * o = NULL;
  QObject * par1 = ISNIL(1)? 0 : (QObject *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
  o = new QScriptEngineDebugger ( par1 );
  PHB_ITEM self = hb_stackSelfItem();
  PHB_ITEM ptr = hb_itemPutPtr( NULL,(QScriptEngineDebugger *) o );
  hb_objSendMsg( self, "_pointer", 1, ptr );
  hb_itemRelease( ptr );
  hb_itemReturn( self );
}

HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_DELETE )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    delete obj;
    obj = NULL;
    PHB_ITEM self = hb_stackSelfItem();
    PHB_ITEM ptr = hb_itemPutPtr( NULL, NULL );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
QAction * action ( DebuggerAction action ) const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_ACTION )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QAction * ptr = obj->action (  (QScriptEngineDebugger::DebuggerAction) hb_parni(1) );
    _qt4xhb_createReturnClass ( ptr, "QACTION" );
  }
}

/*
void attachTo ( QScriptEngine * engine )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_ATTACHTO )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QScriptEngine * par1 = (QScriptEngine *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
    obj->attachTo ( par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
bool autoShowStandardWindow () const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_AUTOSHOWSTANDARDWINDOW )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    hb_retl( obj->autoShowStandardWindow (  ) );
  }
}

/*
QMenu * createStandardMenu ( QWidget * parent = 0 )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_CREATESTANDARDMENU )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QWidget * par1 = ISNIL(1)? 0 : (QWidget *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
    QMenu * ptr = obj->createStandardMenu ( par1 );
    _qt4xhb_createReturnClass ( ptr, "QMENU" );
  }
}

/*
QToolBar * createStandardToolBar ( QWidget * parent = 0 )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_CREATESTANDARDTOOLBAR )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QWidget * par1 = ISNIL(1)? 0 : (QWidget *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
    QToolBar * ptr = obj->createStandardToolBar ( par1 );
    _qt4xhb_createReturnClass ( ptr, "QTOOLBAR" );
  }
}

/*
void detach ()
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_DETACH )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->detach (  );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void setAutoShowStandardWindow ( bool autoShow )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_SETAUTOSHOWSTANDARDWINDOW )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->setAutoShowStandardWindow ( PBOOL(1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
QMainWindow * standardWindow () const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_STANDARDWINDOW )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QMainWindow * ptr = obj->standardWindow (  );
    _qt4xhb_createReturnClass ( ptr, "QMAINWINDOW" );
  }
}

/*
DebuggerState state () const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_STATE )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    hb_retni( (int) obj->state (  ) );
  }
}

/*
QWidget * widget ( DebuggerWidget widget ) const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_WIDGET )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QWidget * ptr = obj->widget (  (QScriptEngineDebugger::DebuggerWidget) hb_parni(1) );
    _qt4xhb_createReturnClass ( ptr, "QWIDGET" );
  }
}

#pragma ENDDUMP

/*

  Qt4xHb - bibliotecas de ligao entre Harbour/xHarbour e Qt Framework 4

  Copyright (C) 2012-2017 Marcos Antonio Gambeta <marcosgambeta@uol.com.br>

*/

#include "hbclass.ch"
#include "qt4xhb_clsid.ch"

#ifndef QT4XHB_NO_REQUESTS
REQUEST QACTION
REQUEST QMENU
REQUEST QTOOLBAR
REQUEST QMAINWINDOW
REQUEST QWIDGET
#endif

CLASS QScriptEngineDebugger INHERIT QObject

   DATA class_id INIT Class_Id_QScriptEngineDebugger
   DATA self_destruction INIT .F.

   METHOD new
   METHOD delete
   METHOD action
   METHOD attachTo
   METHOD autoShowStandardWindow
   METHOD createStandardMenu
   METHOD createStandardToolBar
   METHOD detach
   METHOD setAutoShowStandardWindow
   METHOD standardWindow
   METHOD state
   METHOD widget
   METHOD onEvaluationResumed
   METHOD onEvaluationSuspended
   DESTRUCTOR destroyObject

END CLASS

PROCEDURE destroyObject () CLASS QScriptEngineDebugger
   IF ::self_destruction
      ::delete()
   ENDIF
RETURN

#pragma BEGINDUMP

#include <QScriptEngineDebugger>

#include "qt4xhb_common.h"
#include "qt4xhb_clsid.h"
#include "qt4xhb_utils.h"

/*
QScriptEngineDebugger ( QObject * parent = 0 )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_NEW )
{
  QScriptEngineDebugger * o = NULL;
  QObject * par1 = ISNIL(1)? 0 : (QObject *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
  o = new QScriptEngineDebugger ( par1 );
  PHB_ITEM self = hb_stackSelfItem();
  PHB_ITEM ptr = hb_itemPutPtr( NULL,(QScriptEngineDebugger *) o );
  hb_objSendMsg( self, "_pointer", 1, ptr );
  hb_itemRelease( ptr );
  hb_itemReturn( self );
}

HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_DELETE )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    delete obj;
    obj = NULL;
    PHB_ITEM self = hb_stackSelfItem();
    PHB_ITEM ptr = hb_itemPutPtr( NULL, NULL );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
QAction * action ( DebuggerAction action ) const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_ACTION )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QAction * ptr = obj->action (  (QScriptEngineDebugger::DebuggerAction) hb_parni(1) );
    _qt4xhb_createReturnClass ( ptr, "QACTION" );
  }
}

/*
void attachTo ( QScriptEngine * engine )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_ATTACHTO )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QScriptEngine * par1 = (QScriptEngine *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
    obj->attachTo ( par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
bool autoShowStandardWindow () const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_AUTOSHOWSTANDARDWINDOW )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    hb_retl( obj->autoShowStandardWindow (  ) );
  }
}

/*
QMenu * createStandardMenu ( QWidget * parent = 0 )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_CREATESTANDARDMENU )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QWidget * par1 = ISNIL(1)? 0 : (QWidget *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
    QMenu * ptr = obj->createStandardMenu ( par1 );
    _qt4xhb_createReturnClass ( ptr, "QMENU" );
  }
}

/*
QToolBar * createStandardToolBar ( QWidget * parent = 0 )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_CREATESTANDARDTOOLBAR )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QWidget * par1 = ISNIL(1)? 0 : (QWidget *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
    QToolBar * ptr = obj->createStandardToolBar ( par1 );
    _qt4xhb_createReturnClass ( ptr, "QTOOLBAR" );
  }
}

/*
void detach ()
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_DETACH )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->detach (  );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void setAutoShowStandardWindow ( bool autoShow )
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_SETAUTOSHOWSTANDARDWINDOW )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->setAutoShowStandardWindow ( (bool) hb_parl(1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
QMainWindow * standardWindow () const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_STANDARDWINDOW )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QMainWindow * ptr = obj->standardWindow (  );
    _qt4xhb_createReturnClass ( ptr, "QMAINWINDOW" );
  }
}

/*
DebuggerState state () const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_STATE )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    hb_retni( (int) obj->state (  ) );
  }
}

/*
QWidget * widget ( DebuggerWidget widget ) const
*/
HB_FUNC_STATIC( QSCRIPTENGINEDEBUGGER_WIDGET )
{
  QScriptEngineDebugger * obj = (QScriptEngineDebugger *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QWidget * ptr = obj->widget (  (QScriptEngineDebugger::DebuggerWidget) hb_parni(1) );
    _qt4xhb_createReturnClass ( ptr, "QWIDGET" );
  }
}

#pragma ENDDUMP


[VOXporter] Added calls to SuspendLayout() etc in the generated code. Also fixed an endless recursive call when two groupboxes share the same same space in the window

USING System.IO
USING System.Text
USING System.Drawing
USING System.Collections.Generic

STATIC CLASS WinFormsConverter
	STATIC METHOD Convert(oProject AS VOProjectDescriptor, cAppFolder AS STRING) AS VOID
		LOCAL aWeds AS STRING[]

		aWeds := Directory.GetFiles(cAppFolder + "\tmp" , "*.wed")
		Directory.CreateDirectory(cAppFolder)

		LOCAL oApp AS ApplicationDescriptor
		oApp := oProject:AddApplication("Windows.Forms")
		oApp:SetWinForms()
		oApp:GACReferences:Add("System.Drawing")
		oApp:GACReferences:Add("System.Windows.Forms")

		FOREACH cWed AS STRING IN aWeds
			LOCAL aLines AS STRING[]
			aLines := File.ReadAllLines(cWed , Encoding.Default)

			LOCAL oCurrentWed AS WedDescriptor
			LOCAL oMainWed AS WedDescriptor
			oCurrentWed := WedDescriptor{}
			oMainWed := oCurrentWed

			FOR LOCAL nLine := 1 AS INT UPTO aLines:Length
				LOCAL cLine AS STRING
				cLine := aLines[nLine]:Trim()
				IF cLine:StartsWith("CONTROL=")
					oCurrentWed := WedDescriptor{oMainWed}
					oMainWed:Controls:Add(oCurrentWed)
				ENDIF
				IF cLine:IndexOf('=') != -1
					oCurrentWed:ReadProperty(cLine)
				END IF
			NEXT

			// Put control inside GroupBoxes
			AdjustContainers(oMainWed)

			LOCAL aCode, aClassCode, aInitCode, aConstrCode AS List<STRING>
			LOCAL cClassDeclCode AS STRING
			aClassCode := List<STRING>{}
			aConstrCode := List<STRING>{}
			aInitCode := List<STRING>{}
			aCode := List<STRING>{}

			LOCAL cFileName AS STRING
			LOCAL cNameSpace AS STRING
			LOCAL cPrg AS STRING
			cFileName := FileInfo{cWed}:Name:Replace(".wed","")
			cNameSpace := cFileName:Substring(0, cFileName:IndexOf('.'))
			FOREACH cChar AS Char IN e"!@#$%^&*()_+~`-=[]{};:',./<>?|\\\" "
				cNameSpace := cNameSpace:Replace(cChar:ToString(), "")
			NEXT

			cPrg := cAppFolder + "\" + cFileName + ".prg"
			oApp:AddModule(cFileName, ""):HasDesignerChild := TRUE

			LOCAL oWriter AS StreamWriter
			oWriter := StreamWriter{cPrg + ".wed" , FALSE , Encoding.Default}
			oWriter:WriteLine(String.Format("DESIGNERSTART = Form,Form,{0}" , oMainWed:Name ) )
			oWriter:WriteLine(String.Format("GUID={0}" , Guid.NewGuid():ToString()) )
			oWriter:WriteLine(String.Format("Name={0}" , oMainWed:Name) )
			oWriter:WriteLine(String.Format("Text={0}" , oMainWed:Caption) )
			oWriter:WriteLine(String.Format("Location={0},{1}" , oMainWed:Location:X , oMainWed:Location:Y) )
			oWriter:WriteLine(String.Format("ClientSize={0},{1}" , oMainWed:Size:Width , oMainWed:Size:Height) )
			oWriter:WriteLine(String.Format("ControlPrefix=None") )
			oWriter:WriteLine(String.Format("") )

			cClassDeclCode := String.Format("PARTIAL CLASS {0} INHERIT System.Windows.Forms.Form", oMainWed:Name)

			aConstrCode:Add( String.Format(e"" ) )
			aConstrCode:Add( String.Format(e"CONSTRUCTOR()" ) )
			aConstrCode:Add( String.Format(e"\tSELF:InitializeComponent()" ) )
			aConstrCode:Add( String.Format(e"RETURN" ) )

			aInitCode:Add( String.Format(e"" ) )
			aInitCode:Add( String.Format(e"PRIVATE METHOD InitializeComponent() AS VOID" ) )
			aInitCode:Add( String.Format(e"" ) )

			aCode:Add( String.Format(e"\t", Quoted(oMainWed:Name)) )
			aCode:Add( String.Format(e"\tSELF:SuspendLayout()", Quoted(oMainWed:Name)) )
			aCode:Add( String.Format(e"\t", Quoted(oMainWed:Name)) )
			aCode:Add( String.Format(e"\tSELF:Name := {0}", Quoted(oMainWed:Name)) )
			aCode:Add( String.Format(e"\tSELF:Text := {0}", Quoted(oMainWed:Name)) )
			aCode:Add( String.Format(e"\tSELF:ClientSize := System.Drawing.Size{{{0},{1}}}", oMainWed:Size:Width , oMainWed:Size:Height) )
			aCode:Add( String.Format(e"") )

			oWriter:WriteLine(String.Format("SUBCONTROLSSTART") )

			FOREACH oControl AS WedDescriptor IN oMainWed:Controls
				WriteControl(oControl, "SELF", oWriter, aClassCode, aInitCode, aCode)
			NEXT

			oWriter:WriteLine(String.Format("SUBCONTROLSEND") )

			oWriter:WriteLine(String.Format("") )
			oWriter:WriteLine(String.Format("DESIGNEREND={0}" , oMainWed:Name) )
			oWriter:Close()

			aCode:Add( String.Format(e"\tSELF:ResumeLayout(false)" ) )
			aCode:Add( String.Format(e"\tSELF:PerformLayout()" ) )
			aCode:Add( String.Format(e"" ) )
			aCode:Add( String.Format(e"RETURN" ) )
			aCode:Add( String.Format(e"" ) )

			oWriter := StreamWriter{cPrg , FALSE , Encoding.Default}
			oWriter:WriteLine("BEGIN NAMESPACE " + cNameSpace)
			oWriter:WriteLine("")
			oWriter:WriteLine(cClassDeclCode)
			FOREACH cLine AS STRING IN aConstrCode
				oWriter:WriteLine(cLine)
			NEXT
			oWriter:WriteLine("END CLASS")
			oWriter:WriteLine("")
			oWriter:WriteLine("END NAMESPACE")
			oWriter:Close()

			cFileName := FileInfo{cWed}:Name:Replace(".wed","")
			cPrg := cAppFolder + "\" + cFileName + ".Designer.prg"
			oApp:AddModule(cFileName + ".Designer", ""):IsDesignerChild := TRUE
			oWriter := StreamWriter{cPrg , FALSE , Encoding.Default}
			oWriter:WriteLine("BEGIN NAMESPACE " + cNameSpace)
			oWriter:WriteLine("")
			oWriter:WriteLine(cClassDeclCode)
			FOREACH cLine AS STRING IN aClassCode
				oWriter:WriteLine(cLine)
			NEXT
			FOREACH cLine AS STRING IN aInitCode
				oWriter:WriteLine(cLine)
			NEXT
			FOREACH cLine AS STRING IN aCode
				oWriter:WriteLine(cLine)
			NEXT
			oWriter:WriteLine("END CLASS")
			oWriter:WriteLine("")
			oWriter:WriteLine("END NAMESPACE")
			oWriter:Close()

		NEXT

		IF xPorter.ExportToXide
			oApp:CreateAppFile(cAppFolder , TRUE)
		ENDIF
		IF xPorter.ExportToVS
			oApp:CreateAppFile(cAppFolder , FALSE)
		ENDIF

		SafeDirectoryDelete(cAppFolder + "\tmp")
	RETURN

	INTERNAL STATIC METHOD WriteControl(oControl AS WedDescriptor, cParent AS STRING, oWriter AS StreamWriter, aClassCode AS List<STRING>, aInitCode AS List<STRING>, aCode AS List<STRING>) AS VOID
		oWriter:WriteLine(String.Format("CONTROL={0}" , oControl:Type) )
		oWriter:WriteLine(String.Format("GUID={0}" , Guid.NewGuid():ToString()) )
		oWriter:WriteLine(String.Format("Name={0}" , oControl:Name) )
		oWriter:WriteLine(String.Format("Text={0}" , oControl:Caption) )
		oWriter:WriteLine(String.Format("Location={0},{1}" , oControl:Location:X , oControl:Location:Y) )
		oWriter:WriteLine(String.Format("Size={0},{1}" , oControl:Size:Width , oControl:Size:Height) )
		oWriter:WriteLine(String.Format("TabIndex={0}" , oControl:Order) )

		aClassCode:Add(String.Format(e"\tPRIVATE {0} AS {1}" , oControl:Name, oControl:Type) )

		aInitCode:Add(String.Format(e"\tSELF:{0} := {1}{{}}" , oControl:Name, oControl:Type) )

		aCode:Add(String.Format(e"\tSELF:{0}:Name := {1}" , oControl:Name, Quoted(oControl:Name)) )
		aCode:Add(String.Format(e"\tSELF:{0}:Text := {1}" , oControl:Name, Quoted(oControl:Caption)) )
		aCode:Add(String.Format(e"\tSELF:{0}:Location := System.Drawing.Point{{{1},{2}}}" , oControl:Name, oControl:Location:X, oControl:Location:Y) )
		aCode:Add(String.Format(e"\tSELF:{0}:Size := System.Drawing.Size{{{1},{2}}}" , oControl:Name, oControl:Size:Width, oControl:Size:Height) )
		aCode:Add(String.Format(e"\t{1}:Controls:Add(SELF:{0})" , oControl:Name, cParent) )
		aCode:Add(String.Format(e"") )

		IF oControl:Controls:Count != 0
			oWriter:WriteLine("SUBCONTROLSSTART")
			FOREACH oChild AS WedDescriptor IN oControl:Controls
				WriteControl(oChild, "SELF:" + oControl:Name, oWriter, aClassCode, aInitCode, aCode)
			NEXT
			oWriter:WriteLine("SUBCONTROLSEND")
		END IF

		SWITCH oControl:VOType
			CASE "FIXEDTEXT"
				NOP
			CASE "RADIOBUTTON"
				oWriter:WriteLine(String.Format("AutoSize=TRUE") )
				aCode:Add(String.Format(e"\tSELF:{0}:AutoSize := true" , oControl:Name) )
			CASE "MULTILINEEDIT"
				oWriter:WriteLine(String.Format("Multiline=TRUE") )
				aCode:Add(String.Format(e"\tSELF:{0}:Multiline := true" , oControl:Name) )
		END SWITCH
	RETURN

	INTERNAL STATIC METHOD AdjustContainers(oWindow AS WedDescriptor) AS WedDescriptor
		LOCAL aContainers AS List<WedDescriptor>
		aContainers := List<WedDescriptor>{}
		FOREACH oControl AS WedDescriptor IN oWindow:Controls
			IF oControl:IsContainer
				aContainers:Add(oControl)
			END IF
		NEXT

		LOCAL nControl := 0 AS INT
		DO WHILE nControl < oWindow:Controls:Count
			LOCAL oControl AS WedDescriptor
			LOCAL oCurrent AS WedDescriptor
			oControl := oWindow:Controls[nControl]
			oCurrent := NULL
			FOREACH oContainer AS WedDescriptor IN aContainers
				IF oContainer == oControl
					LOOP
				END IF
				LOCAL oRectangle AS Rectangle
				oRectangle := Rectangle{oContainer:AbsoluteLocation , oContainer:Size}
				IF oRectangle:Contains(oControl:Location) .and. ;
					oRectangle:Contains(Point{oControl:Location:X + oControl:Size:Width - 1, oControl:Location:Y + oControl:Size:Height - 1}) .and. ;
					.not. oContainer:Parent == oControl
					IF oCurrent == NULL .or. ;
								(oContainer:AbsoluteLocation:X > oCurrent:AbsoluteLocation:X .and. ;
								oContainer:AbsoluteLocation:Y > oCurrent:AbsoluteLocation:Y)
						oCurrent := oContainer
					END IF
				END IF
			NEXT
			IF oCurrent != NULL
				oControl:SetParent(oCurrent)
			ELSE
				nControl ++
			END IF
		END DO

	RETURN NULL

//	INTERNAL STATIC METHOD GetAllContainers(oContainer AS WedDescriptor, aContainers as List<WedDescriptor>) AS VOID

	STATIC METHOD Quoted(cText AS STRING) AS STRING
	RETURN e"\"" + cText + e"\""

END CLASS

INTERNAL CLASS WedDescriptor
	PROTECT _cType AS STRING
	PROTECT _aControls AS List<WedDescriptor>
	PROTECT _oParent AS WedDescriptor
	PROTECT _lIsContainer AS LOGIC

	CONSTRUCTOR()
		SUPER()
		SELF:_cType := "System.Windows.Forms.Panel"
		SELF:_aControls := List<WedDescriptor>{}
		SELF:_lIsContainer := FALSE
	RETURN
	CONSTRUCTOR(oParent AS WedDescriptor)
		SELF()
		SELF:_oParent := oParent
	RETURN

	PROPERTY Name AS STRING AUTO
	PROPERTY Caption AS STRING AUTO
	PROPERTY Order AS INT AUTO
	PROPERTY Location AS Point AUTO
	PROPERTY Size AS Size AUTO
	PROPERTY VOType AS STRING AUTO
	PROPERTY Type AS STRING GET _cType
	PROPERTY Parent AS WedDescriptor GET SELF:_oParent
	PROPERTY IsContainer AS LOGIC GET SELF:_lIsContainer
	PROPERTY Controls AS List<WedDescriptor> GET SELF:_aControls
	PROPERTY AbsoluteLocation AS Point
		GET
			IF SELF:_oParent == NULL
				RETURN Point{0,0}
			ELSE
				RETURN Point{SELF:_oParent:AbsoluteLocation:X + SELF:Location:X , SELF:_oParent:AbsoluteLocation:Y + SELF:Location:Y}
			END IF
		END GET
	END PROPERTY

	METHOD SetParent(oParent AS WedDescriptor) AS VOID
		IF SELF:_oParent != NULL
			SELF:_oParent:Controls:Remove(SELF)
		END IF
		SELF:_oParent := oParent
		SELF:_oParent:Controls:Add(SELF)
		SELF:Location := Point{SELF:Location:X - SELF:_oParent:AbsoluteLocation:X , SELF:Location:Y - SELF:_oParent:AbsoluteLocation:Y}
	RETURN

	METHOD ReadProperty(cLine AS STRING) AS VOID
		LOCAL cProp AS STRING
		LOCAL cValue AS STRING
		LOCAL nAt AS INT
		nAt := cLine:IndexOf('=')
		cProp := cLine:Substring(0,nAt):Trim():ToUpperInvariant()
		cValue := cLine:Substring(nAt+1):Trim()
		SWITCH cProp
			CASE "NAME"
				SELF:Name := cValue
			CASE "CAPTION"
				SELF:Caption := cValue
			CASE "ORDER"
				SELF:Order := Int32.Parse(cValue)
			CASE "LEFT"
				SELF:Location := Point{Int32.Parse(cValue) , SELF:Location:Y}
			CASE "TOP"
				SELF:Location := Point{SELF:Location:X , Int32.Parse(cValue)}
			CASE "WIDTH"
				SELF:Size := Size{Int32.Parse(cValue) , SELF:Size:Height}
			CASE "HEIGHT"
				SELF:Size := Size{SELF:Size:Width , Int32.Parse(cValue)}
			CASE "CONTROL"
				SELF:VOType := cValue:ToUpperInvariant()
				SWITCH cValue:ToUpperInvariant()
					CASE "FIXEDTEXT"
						SELF:_cType := "System.Windows.Forms.Label"
					CASE "PUSHBUTTON"
						SELF:_cType := "System.Windows.Forms.Button"
					CASE "SINGLELINEEDIT"
					CASE "MULTILINEEDIT"
					CASE "IPADDRESS"
					CASE "RICHEDIT"
					CASE "HOTKEYEDIT"
						SELF:_cType := "System.Windows.Forms.TextBox"
					CASE "CHECKBOX"
						SELF:_cType := "System.Windows.Forms.CheckBox"
					CASE "RADIOBUTTON"
						SELF:_cType := "System.Windows.Forms.RadioButton"
					CASE "GROUPBOX"
					CASE "RADIOBUTTONGROUP"
						SELF:_cType := "System.Windows.Forms.GroupBox"
						SELF:_lIsContainer := TRUE
					CASE "COMBOBOX"
					CASE "COMBOBOXEX"
						SELF:_cType := "System.Windows.Forms.ComboBox"
					CASE "LISTBOX"
						SELF:_cType := "System.Windows.Forms.ListBox"
					CASE "LISTVIEW"
					CASE "DATALISTVIEW"
						SELF:_cType := "System.Windows.Forms.ListView"
					CASE "TREEVIEW"
						SELF:_cType := "System.Windows.Forms.TreeView"
					CASE "TABCONTROL"
						SELF:_cType := "System.Windows.Forms.TabControl"
					CASE "PROGRESSBAR"
						SELF:_cType := "System.Windows.Forms.ProgressBar"
					CASE "HORIZONTALSPINNER"
					CASE "VERTICALSPINNER"
					CASE "HORIZONTALSLIDER"
					CASE "VERTICALSLIDER"
						SELF:_cType := "System.Windows.Forms.TrackBar"
					CASE "VERTSCROLL"
						SELF:_cType := "System.Windows.Forms.HScrollBar"
					CASE "HORZSCROLL"
						SELF:_cType := "System.Windows.Forms.VScrollBar"
					CASE "SUBDATAWINDOW"
						SELF:_cType := "System.Windows.Forms.DataGridView"
				END SWITCH
		END SWITCH
	RETURN
END CLASS

USING System.IO
USING System.Text
USING System.Drawing
USING System.Collections.Generic

STATIC CLASS WinFormsConverter
	STATIC METHOD Convert(oProject AS VOProjectDescriptor, cAppFolder AS STRING) AS VOID
		LOCAL aWeds AS STRING[]

		aWeds := Directory.GetFiles(cAppFolder + "\tmp" , "*.wed")
		Directory.CreateDirectory(cAppFolder)

		LOCAL oApp AS ApplicationDescriptor
		oApp := oProject:AddApplication("Windows.Forms")
		oApp:SetWinForms()
		oApp:GACReferences:Add("System.Drawing")
		oApp:GACReferences:Add("System.Windows.Forms")

		FOREACH cWed AS STRING IN aWeds
			LOCAL aLines AS STRING[]
			aLines := File.ReadAllLines(cWed , Encoding.Default)

			LOCAL oCurrentWed AS WedDescriptor
			LOCAL oMainWed AS WedDescriptor
			oCurrentWed := WedDescriptor{}
			oMainWed := oCurrentWed

			FOR LOCAL nLine := 1 AS INT UPTO aLines:Length
				LOCAL cLine AS STRING
				cLine := aLines[nLine]:Trim()
				IF cLine:StartsWith("CONTROL=")
					oCurrentWed := WedDescriptor{oMainWed}
					oMainWed:Controls:Add(oCurrentWed)
				ENDIF
				IF cLine:IndexOf('=') != -1
					oCurrentWed:ReadProperty(cLine)
				END IF
			NEXT

			// Put control inside GroupBoxes
			AdjustContainers(oMainWed)

			LOCAL aCode, aClassCode, aInitCode, aConstrCode AS List<STRING>
			LOCAL cClassDeclCode AS STRING
			aClassCode := List<STRING>{}
			aConstrCode := List<STRING>{}
			aInitCode := List<STRING>{}
			aCode := List<STRING>{}

			LOCAL cFileName AS STRING
			LOCAL cNameSpace AS STRING
			LOCAL cPrg AS STRING
			cFileName := FileInfo{cWed}:Name:Replace(".wed","")
			cNameSpace := cFileName:Substring(0, cFileName:IndexOf('.'))
			FOREACH cChar AS Char IN e"!@#$%^&*()_+~`-=[]{};:',./<>?|\\\" "
				cNameSpace := cNameSpace:Replace(cChar:ToString(), "")
			NEXT

			cPrg := cAppFolder + "\" + cFileName + ".prg"
			oApp:AddModule(cFileName, ""):HasDesignerChild := TRUE

			LOCAL oWriter AS StreamWriter
			oWriter := StreamWriter{cPrg + ".wed" , FALSE , Encoding.Default}
			oWriter:WriteLine(String.Format("DESIGNERSTART = Form,Form,{0}" , oMainWed:Name ) )
			oWriter:WriteLine(String.Format("GUID={0}" , Guid.NewGuid():ToString()) )
			oWriter:WriteLine(String.Format("Name={0}" , oMainWed:Name) )
			oWriter:WriteLine(String.Format("Text={0}" , oMainWed:Caption) )
			oWriter:WriteLine(String.Format("Location={0},{1}" , oMainWed:Location:X , oMainWed:Location:Y) )
			oWriter:WriteLine(String.Format("ClientSize={0},{1}" , oMainWed:Size:Width , oMainWed:Size:Height) )
			oWriter:WriteLine(String.Format("ControlPrefix=None") )
			oWriter:WriteLine(String.Format("") )

			cClassDeclCode := String.Format("PARTIAL CLASS {0} INHERIT System.Windows.Forms.Form", oMainWed:Name)

			aConstrCode:Add( String.Format(e"" ) )
			aConstrCode:Add( String.Format(e"CONSTRUCTOR()" ) )
			aConstrCode:Add( String.Format(e"\tSELF:InitializeComponent()" ) )
			aConstrCode:Add( String.Format(e"RETURN" ) )

			aInitCode:Add( String.Format(e"" ) )
			aInitCode:Add( String.Format(e"PRIVATE METHOD InitializeComponent() AS VOID" ) )

			aCode:Add( String.Format(e"\tSELF:Name := {0}", Quoted(oMainWed:Name)) )
			aCode:Add( String.Format(e"\tSELF:Text := {0}", Quoted(oMainWed:Name)) )
			aCode:Add( String.Format(e"\tSELF:ClientSize := System.Drawing.Size{{{0},{1}}}", oMainWed:Size:Width , oMainWed:Size:Height) )
			aCode:Add( String.Format(e"") )

			oWriter:WriteLine(String.Format("SUBCONTROLSSTART") )

			FOREACH oControl AS WedDescriptor IN oMainWed:Controls
				WriteControl(oControl, "SELF", oWriter, aClassCode, aInitCode, aCode)
			NEXT

			oWriter:WriteLine(String.Format("SUBCONTROLSEND") )

			oWriter:WriteLine(String.Format("") )
			oWriter:WriteLine(String.Format("DESIGNEREND={0}" , oMainWed:Name) )
			oWriter:Close()

			aCode:Add( String.Format(e"RETURN" ) )
			aCode:Add( String.Format(e"" ) )

			oWriter := StreamWriter{cPrg , FALSE , Encoding.Default}
			oWriter:WriteLine("BEGIN NAMESPACE " + cNameSpace)
			oWriter:WriteLine("")
			oWriter:WriteLine(cClassDeclCode)
			FOREACH cLine AS STRING IN aConstrCode
				oWriter:WriteLine(cLine)
			NEXT
			oWriter:WriteLine("END CLASS")
			oWriter:WriteLine("")
			oWriter:WriteLine("END NAMESPACE")
			oWriter:Close()

			cFileName := FileInfo{cWed}:Name:Replace(".wed","")
			cPrg := cAppFolder + "\" + cFileName + ".Designer.prg"
			oApp:AddModule(cFileName + ".Designer", ""):IsDesignerChild := TRUE
			oWriter := StreamWriter{cPrg , FALSE , Encoding.Default}
			oWriter:WriteLine("BEGIN NAMESPACE " + cNameSpace)
			oWriter:WriteLine("")
			oWriter:WriteLine(cClassDeclCode)
			FOREACH cLine AS STRING IN aClassCode
				oWriter:WriteLine(cLine)
			NEXT
			FOREACH cLine AS STRING IN aInitCode
				oWriter:WriteLine(cLine)
			NEXT
			FOREACH cLine AS STRING IN aCode
				oWriter:WriteLine(cLine)
			NEXT
			oWriter:WriteLine("END CLASS")
			oWriter:WriteLine("")
			oWriter:WriteLine("END NAMESPACE")
			oWriter:Close()

		NEXT

		IF xPorter.ExportToXide
			oApp:CreateAppFile(cAppFolder , TRUE)
		ENDIF
		IF xPorter.ExportToVS
			oApp:CreateAppFile(cAppFolder , FALSE)
		ENDIF

		SafeDirectoryDelete(cAppFolder + "\tmp")
	RETURN

	INTERNAL STATIC METHOD WriteControl(oControl AS WedDescriptor, cParent AS STRING, oWriter AS StreamWriter, aClassCode AS List<STRING>, aInitCode AS List<STRING>, aCode AS List<STRING>) AS VOID
		oWriter:WriteLine(String.Format("CONTROL={0}" , oControl:Type) )
		oWriter:WriteLine(String.Format("GUID={0}" , Guid.NewGuid():ToString()) )
		oWriter:WriteLine(String.Format("Name={0}" , oControl:Name) )
		oWriter:WriteLine(String.Format("Text={0}" , oControl:Caption) )
		oWriter:WriteLine(String.Format("Location={0},{1}" , oControl:Location:X , oControl:Location:Y) )
		oWriter:WriteLine(String.Format("Size={0},{1}" , oControl:Size:Width , oControl:Size:Height) )
		oWriter:WriteLine(String.Format("TabIndex={0}" , oControl:Order) )

		aClassCode:Add(String.Format(e"\tPRIVATE {0} AS {1}" , oControl:Name, oControl:Type) )

		aInitCode:Add(String.Format(e"\tSELF:{0} := {1}{{}}" , oControl:Name, oControl:Type) )

		aCode:Add(String.Format(e"\tSELF:{0}:Name := {1}" , oControl:Name, Quoted(oControl:Name)) )
		aCode:Add(String.Format(e"\tSELF:{0}:Text := {1}" , oControl:Name, Quoted(oControl:Caption)) )
		aCode:Add(String.Format(e"\tSELF:{0}:Location := System.Drawing.Point{{{1},{2}}}" , oControl:Name, oControl:Location:X, oControl:Location:Y) )
		aCode:Add(String.Format(e"\tSELF:{0}:Size := System.Drawing.Size{{{1},{2}}}" , oControl:Name, oControl:Size:Width, oControl:Size:Height) )
		aCode:Add(String.Format(e"\t{1}:Controls:Add(SELF:{0})" , oControl:Name, cParent) )
		aCode:Add(String.Format(e"") )

		IF oControl:Controls:Count != 0
			oWriter:WriteLine("SUBCONTROLSSTART")
			FOREACH oChild AS WedDescriptor IN oControl:Controls
				WriteControl(oChild, "SELF:" + oControl:Name, oWriter, aClassCode, aInitCode, aCode)
			NEXT
			oWriter:WriteLine("SUBCONTROLSEND")
		END IF

		SWITCH oControl:VOType
			CASE "FIXEDTEXT"
				NOP
			CASE "RADIOBUTTON"
				oWriter:WriteLine(String.Format("AutoSize=TRUE") )
				aCode:Add(String.Format(e"\tSELF:{0}:AutoSize := true" , oControl:Name) )
			CASE "MULTILINEEDIT"
				oWriter:WriteLine(String.Format("Multiline=TRUE") )
				aCode:Add(String.Format(e"\tSELF:{0}:Multiline := true" , oControl:Name) )
		END SWITCH
	RETURN

	INTERNAL STATIC METHOD AdjustContainers(oWindow AS WedDescriptor) AS WedDescriptor
		LOCAL aContainers AS List<WedDescriptor>
		aContainers := List<WedDescriptor>{}
		FOREACH oControl AS WedDescriptor IN oWindow:Controls
			IF oControl:IsContainer
				aContainers:Add(oControl)
			END IF
		NEXT

		LOCAL nControl := 0 AS INT
		DO WHILE nControl < oWindow:Controls:Count
			LOCAL oControl AS WedDescriptor
			LOCAL oCurrent AS WedDescriptor
			oControl := oWindow:Controls[nControl]
			oCurrent := NULL
			FOREACH oContainer AS WedDescriptor IN aContainers
				IF oContainer == oControl
					LOOP
				END IF
				LOCAL oRectangle AS Rectangle
				oRectangle := Rectangle{oContainer:AbsoluteLocation , oContainer:Size}
				IF oRectangle:Contains(oControl:Location)
					IF oCurrent == NULL .or. ;
								(oContainer:AbsoluteLocation:X > oCurrent:AbsoluteLocation:X .and. ;
								oContainer:AbsoluteLocation:Y > oCurrent:AbsoluteLocation:Y)
						oCurrent := oContainer
					END IF
				END IF
			NEXT
			IF oCurrent != NULL
				oControl:SetParent(oCurrent)
			ELSE
				nControl ++
			END IF
		END DO

	RETURN NULL

//	INTERNAL STATIC METHOD GetAllContainers(oContainer AS WedDescriptor, aContainers as List<WedDescriptor>) AS VOID

	STATIC METHOD Quoted(cText AS STRING) AS STRING
	RETURN e"\"" + cText + e"\""

END CLASS

INTERNAL CLASS WedDescriptor
	PROTECT _cType AS STRING
	PROTECT _aControls AS List<WedDescriptor>
	PROTECT _oParent AS WedDescriptor
	PROTECT _lIsContainer AS LOGIC

	CONSTRUCTOR()
		SUPER()
		SELF:_cType := "System.Windows.Forms.Panel"
		SELF:_aControls := List<WedDescriptor>{}
		SELF:_lIsContainer := FALSE
	RETURN
	CONSTRUCTOR(oParent AS WedDescriptor)
		SELF()
		SELF:_oParent := oParent
	RETURN

	PROPERTY Name AS STRING AUTO
	PROPERTY Caption AS STRING AUTO
	PROPERTY Order AS INT AUTO
	PROPERTY Location AS Point AUTO
	PROPERTY Size AS Size AUTO
	PROPERTY VOType AS STRING AUTO
	PROPERTY Type AS STRING GET _cType
	PROPERTY IsContainer AS LOGIC GET SELF:_lIsContainer
	PROPERTY Controls AS List<WedDescriptor> GET SELF:_aControls
	PROPERTY AbsoluteLocation AS Point
		GET
			IF SELF:_oParent == NULL
				RETURN Point{0,0}
			ELSE
				RETURN Point{SELF:_oParent:AbsoluteLocation:X + SELF:Location:X , SELF:_oParent:AbsoluteLocation:Y + SELF:Location:Y}
			END IF
		END GET
	END PROPERTY

	METHOD SetParent(oParent AS WedDescriptor) AS VOID
		IF SELF:_oParent != NULL
			SELF:_oParent:Controls:Remove(SELF)
		END IF
		SELF:_oParent := oParent
		SELF:_oParent:Controls:Add(SELF)
		SELF:Location := Point{SELF:Location:X - SELF:_oParent:AbsoluteLocation:X , SELF:Location:Y - SELF:_oParent:AbsoluteLocation:Y}
	RETURN

	METHOD ReadProperty(cLine AS STRING) AS VOID
		LOCAL cProp AS STRING
		LOCAL cValue AS STRING
		LOCAL nAt AS INT
		nAt := cLine:IndexOf('=')
		cProp := cLine:Substring(0,nAt):Trim():ToUpperInvariant()
		cValue := cLine:Substring(nAt+1):Trim()
		SWITCH cProp
			CASE "NAME"
				SELF:Name := cValue
			CASE "CAPTION"
				SELF:Caption := cValue
			CASE "ORDER"
				SELF:Order := Int32.Parse(cValue)
			CASE "LEFT"
				SELF:Location := Point{Int32.Parse(cValue) , SELF:Location:Y}
			CASE "TOP"
				SELF:Location := Point{SELF:Location:X , Int32.Parse(cValue)}
			CASE "WIDTH"
				SELF:Size := Size{Int32.Parse(cValue) , SELF:Size:Height}
			CASE "HEIGHT"
				SELF:Size := Size{SELF:Size:Width , Int32.Parse(cValue)}
			CASE "CONTROL"
				SELF:VOType := cValue:ToUpperInvariant()
				SWITCH cValue:ToUpperInvariant()
					CASE "FIXEDTEXT"
						SELF:_cType := "System.Windows.Forms.Label"
					CASE "PUSHBUTTON"
						SELF:_cType := "System.Windows.Forms.Button"
					CASE "SINGLELINEEDIT"
					CASE "MULTILINEEDIT"
					CASE "IPADDRESS"
					CASE "RICHEDIT"
					CASE "HOTKEYEDIT"
						SELF:_cType := "System.Windows.Forms.TextBox"
					CASE "CHECKBOX"
						SELF:_cType := "System.Windows.Forms.CheckBox"
					CASE "RADIOBUTTON"
						SELF:_cType := "System.Windows.Forms.RadioButton"
					CASE "GROUPBOX"
					CASE "RADIOBUTTONGROUP"
						SELF:_cType := "System.Windows.Forms.GroupBox"
						SELF:_lIsContainer := TRUE
					CASE "COMBOBOX"
					CASE "COMBOBOXEX"
						SELF:_cType := "System.Windows.Forms.ComboBox"
					CASE "LISTBOX"
						SELF:_cType := "System.Windows.Forms.ListBox"
					CASE "LISTVIEW"
					CASE "DATALISTVIEW"
						SELF:_cType := "System.Windows.Forms.ListView"
					CASE "TREEVIEW"
						SELF:_cType := "System.Windows.Forms.TreeView"
					CASE "TABCONTROL"
						SELF:_cType := "System.Windows.Forms.TabControl"
					CASE "PROGRESSBAR"
						SELF:_cType := "System.Windows.Forms.ProgressBar"
					CASE "HORIZONTALSPINNER"
					CASE "VERTICALSPINNER"
					CASE "HORIZONTALSLIDER"
					CASE "VERTICALSLIDER"
						SELF:_cType := "System.Windows.Forms.TrackBar"
					CASE "VERTSCROLL"
						SELF:_cType := "System.Windows.Forms.HScrollBar"
					CASE "HORZSCROLL"
						SELF:_cType := "System.Windows.Forms.VScrollBar"
					CASE "SUBDATAWINDOW"
						SELF:_cType := "System.Windows.Forms.DataGridView"
				END SWITCH
		END SWITCH
	RETURN
END CLASS