From 92eccd36a8bf935910e3909e3536ca77cb54f2b1 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Thu, 18 Sep 2008 00:12:52 -0700 Subject: [PATCH 1/2] Updated TextMate bundle --- .../JavaScript Objective-J.tmbundle.zip | Bin 24813 -> 16643 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Tools/TextMate/JavaScript Objective-J.tmbundle.zip b/Tools/TextMate/JavaScript Objective-J.tmbundle.zip index 10319c64396a2378f075bf38dde5aea1d1943925..e26fd961cde85439a195afd9899ca78a3f82a26b 100644 GIT binary patch delta 14077 zcmZ|0Wl-I0+o+AZJEizSin~+X9g0hFclU)m6c+AY+}$be?yzu|;%@uCw>bSPt|3|6Py>39I^lDjIZPZ6Fc<(*mokhX_4kp<%i@L$A<*Z;+T;rHyZ zHR zShS?U=Ed%!n2T43Yuz^P(bAX7&mDaiOs}sYljC>4GrZ0$^d@YfLPE28ph=pefZqK5 z)$s`Z^X359^EVr%Wb4ih2Crt4+!^^PUmd%&9K zwejauKl=BqWw-0WX#C~n<#qDEYjHQQ_LT-P?cz&BuWkt#Lv{%hG3Ee`i*C zB2R_h#%sELOHzTY(yD^`cQtHa;CC%;M4Os{zIzAjm_nLD)R>W zoN116Ya$=RSz)bj$#}EfYs6X`Vrdn+K^D;UBVp}%`SzEi<%g&c@M(O@|IPAf5ZMHH zb${{8eM-nX@beQ7=IyBSMf!bh#_pYHiYBn}PAb{7iHW&SI5fkFTOX z<2NOcCpZ5LOzZ789lhTEacTALb4TC@H2M$~+;3-K8me+W#*mCHUF+K(Hp~CZ}Mupxvl^CGK7VMD=!ySo3-Jt%fE_ z{`7#0N$61j^EyVXNq^+5jj1Iu=0nMv*g?WdOC9}u>T=WM`0{phI_G9Hw7UO-r%e`U z?0wn4dHbBWb-Uv9ER^2iYP4N%M#joOZJx4%3TScNj) zZBNhKl2zIEzF5(Bp_${k&Qd6YSFF(Kr20A8bxu>-!k==%YBv{u==CNL`|gdW@e+4% zG2rdeu2(H8aWrzQyasV051_0cbJlqezp>)}Jh`7rR(R}xYUmru6u zuB4(?zE2y;{VA8y^y6vgW#gu*-^Z+f+~Po64}8cil##-R}jSn&AWTRu~J zfa__Qn&$6T+-=y%{i>%a=F+V1{PEQE;&a#gPU z^;BpQJ=gv{&i^tklT;cUKNmRktT01*2F8}AC@b%;+>ARkB9vUXu+vZQ_Kr~Y8{las zoi71&Ak70d73Y5Z3_Ed8>>9s0vpowW_CfzGkXr`8i~Yc5nAsi`czImjLN}IVE$VrB z9FH|=lOrC`U6v92v=Gli*WLo+s@^Sm@O)TZp1ZoftMZ*#2t&q(}>HSzOzLt>D3(Pi9=rTlbwAp#? zQHF2Zy^ecL(CYNZvUwwaL@kW@M5+KNb5{;7F)iL-X%nw^ z%R-3PU8xye!BDHT9Lb7q;tt1O`#6qEB2q)i%jPfi}hdU(UP#zE2!+7bzR6`+EL^c zL>2(XTbOUCqrE1#TI5cD^-bpas47HjVf2rL@N(p z#&qVCcJd?pltWzFBBMv4K8t8IH~)8i~#6S`2n*v1V9h^ICY?uD)4@`0Ns z%~<&3lXtqYY>`C)DHMXN$un<6RK)@p^|5G%>alNo?X;~Wq-fEmuQHkN(8@rAo_pr? zWGn95?O=!nGXl!DVv&qP%&l5raRVRA!0swpT;w!;;%V(1I8DBE*U4E-NY${2D1q<-{LK8L_IF+Mhg?|C5gaYE` zes=b{2relSMlQTHkHn=u*ygPIT<~0ga=I_A4A9<%awlCadV##Ekz)%Uhp)W@Z{fd7 z%I;|Siy>!6kacDy{EKIG#iplA-&HhJpsih5)6|b|xmn182iz&I+0?uHC04zGM%G`C z5Y3+@vv-Sj@L|n0soXf1iZenS6O5c6ENNZ(=fNawu#3(T_#8d-0D*KH%dI9W&@EW0 z)4AZV&3f)Bsa6;i=$-abt$u)aE^RScx`fO=f@Nj@xf>KFhJM?ZuiFLL93rSfP`;=l zB6U=74*m+95hTW)8HqqRe7=7F^x6D!~s2 zUoFF-6r;O*OvVl7-!quyxB9urZ}GFuy&6cj?Xd#XC?<9(eOhaX#XNF?0)^sfQ>D7> zZhB3kBx2|PWwP;8#Tw5Hb)WD4(FkWTz{P;>)IolF<#k5#n=g$;3LP=XB#<~dGZFc% zDDG&{(27~8@%{PFJ81nP-Fu?Y)~Or7#)of#89axhvxC@ znX5K%qQdGsTA>GD3MD)F*f)-a>BAG`5QGggpN@`x6622y+eC8~cq$ctvrx^@QKG&- zz~fP z8uWD0Rql7D_?QF)ZN+e^1|aWglcccLY$yXM@YFq!Zdn%_9nG|ubjMgJ)ywkJ@&@if zi$)Ll5?%Wee6&q*;2E}3o$tiSU!7Na%EqsLV5`r_6Pc!)QFV5yCEW$Js$2*&zC zsNaaX0QwqXC*P2J0;EK7h(z5$GkZb|d0{uNc|V?mLciWC6}DlkAKR*)?Q%??*$V^l z@tYF|K8yV6zc$dKMYiaRSMs4KSpS>NRv*ssMEOK!R0`mL<=O1hlMzw-p1kjZ+k1oGb zGDz7R76r~`*kz!M6065TZS6SiFHTl zKMZ8o1I(3G1GBkZzmu5pnAzgfzbYFJA>9=-2wcx5G39^QT}E0o)Sf?eNc6k{wsupz zvLRsNZPS@7LPb1io!kj;Rcumvw*<^W8@GRsw5-8Np#TM8NJEJnZ8&-x643db~hks*#z zlqIIcWUC8!tR84wOurwa3^Iw{h+=?6pZ2J+kXb~V_StT6fwEbavO9YM^s#Ztr?CQp zg2fnR2LsR-!l}fh_TlLq(-Y9I6K#%)QDcf(&XMEdn2Mny?TEn9{Um?jm+N*4$z4*cGRrQ9u;YaQB~g_Fy{p&*vCS!RAcywJUW{|ZlMC5z!L#{%a9)?+L~Csy zP&)V&Ck=3!tS5vN;6h!7bP@#Ru* zD8D?RD#qXJXw%r)^zi|L1Ox>ZfmBGPv(Z;r#1?MS96!|>8p4u*3Bi!2E@Sc<9CNHy z1yGq$`4YtAUtoU}hw&+#%(%Bu-%{patcG8GOOM}|9C=I^;>=LqEvuIP(@8yQkQV4e zrFPIrjx57MV^!a_MwKi(PKWtmUXWp1soedgI+9IHUL(ruqUZ**IW9G?k#(_KP!A zsr_K1XI3RxF6H~gx|hL88C(S5K{d`AQPs5ePZIU{al7o<(hqBVMRj2?JboN5$o{3V27ArRuGCzEFyD;2%NB<(RmD&B8aVO%94D zGmUAt&@D(nlz!5Vp4zJ+9#*nDPLx($n1>oEfG-xzV|{?&6+YR#Iml*2D~5uQGQ+AM z*e?=1Zpr^Zy)Uaf{}BsCo2xjy;QA4#HRMbM9tc6hR8IJqv2qeWy}{BK(ilZCR5RPP z9MnB#X`rqG^0aqg^A9EVFF=R+i;toj%$0I*_G-nSBBPnH%`R%lROsjPxq9zJ6W3Oa zX{{7}yUo}$VjvLF<9TKvDxjQ!JT8@Ot4k9si?_V8Vi8O-w&byrkdJBBBI*62Y>S4` zDqY~=DU3>_%89Hh6!Qp0*@uz%lG1KknP{Dl8f$pqVQKK??s2k} z$X2#&F&nS%D~ek)Y0So|2vjwc<=c@gv>n`_;};=_hqGHhX0$^(&@LCeGo!(nFSfHP zKXj$wBGv_j00@>+(vAhPXB!v>x+Ufyn4Jd=ceAH_p-@*wHWc#3vyS1p6Az0uWWwjh zM$G(y-buI$lk#@nrg2uG3zVe@d>*mbUZtnmJCd8q;fz(fWx{l=+NKW>pDw?=nh`VH z+_5LwYjeBFQD?_UlmiWwP7~_&dWT>lF?8JKI1=1>R)u5xc)1wG4z2NqG?#u!H)GXK zsHm!w=@R!$j<>RD;f1=Lw0A=HM;J)eWQ{}vBSxA~0?w)KUzB-OM*La&w(;@L|3c!! zx|gPmS_oB;!w_BLAS3=oMq$%JfGeHJgpx0Kru1g>b>)6twgw?3Gfm%GbGp9*z-(mG@Q{}&)9C4{7-ZmOALA6n>ru1| zl)=G$7Y_?kxW1=dsdHP*{o>*+?UEnj7Bdlf@l|gg%ADLQdxV^g zN^zF;h5+%QWe(S%>WqPEK&BnTip%hO8e5a-M7fRpn$fCQX*)SAXwiP{s4*nNl*|fi zo5LKs{thdj(_he`Sx^b%L-3<}4-VC@Ksyb>IMdK_vX+ z8&TMB@~mVL@^Z(J65I(C zO05nRSMB+S9Pq|NypY)^17Z%Q8{aHmF@vuhQHPzlCZL9VoJ63S_2E~zXhm)-S{t5hau_# zuLuKCkG+ZO^h=^=T2niJ4u3MRKH>Yy_bn9Z@%$Bz9?*mtjb!=`i}t%>E;TYrmWsz9 zK}7E+iJFjM@nHY$`>~C!kSr@g2=N5b@iN) z(jtQxuqa1aE$NP`=VP zg?z|CK?KpHnK&G@)Wq@moUAi&=C9@;Ci92o5q)ITi*`U|@Z=p6L-CUE@XGB#jR)51!qIKC77^Lj z?sI9?Ax0lF1K0i`!t@E%5tylOr@~}nhf}z1RK`vd*ykt8N^Z;O2=*Asfk;%@v(M12^p1=o$Ul##m!|VSsp{a@TPcj zgP1|A1xPy=vsDaWP!8i`qBd+Wd=mN7UI6TaX%GmHoiP;AHD48J|d42juZ z&CM4_IEufl3SsOjiGYaU9=1N?)H%VF{41>E1V0QwN_-BeJt-7P?D@O0H-{r6gFSx3 z(m~xIQPQ#?qqrI41bd&|;$5K7lRCn;7Zbq%9Yhc9{zFtzJD18|u~bQEj@s_<>Gqz$ z$*d`Lfa`E10Cr{WcO@e8_3ArAj?Pr*vR1&vIzXXgoqQ=3<{1yl%C%RXGhX{X<_yhh=MlNzb z262DKRHQ#(-leX@%Xke}Soh+q*oqE4R10P%Bt{1?VQ1;1tXIJBX^1gg?^F_=QJlLm zssxlUYG(`8CkQ2#?Dj>>)Y;@wA-)$PpR=-sw_wNFcC*j^NbFn#DvrtqMySrq9fB>e z{~IZuY5&C*PE3y1AC2ig9O}F(IWKA|;R){%@MboGX@cN*WGd8={OkDC?O9S~VA5VP zc-tLF{!M_IHvsB3&c|c^3{4tcu~FT@iT(u~fs6V)H^hli^v^eYN^ju=0b*iZMWJtg zhYy31bgS$ig28S?4p{FUK{_V}0{OcAsSO+s4)`loG!7-3gyxIxCIM zIy)~0)c4&P*9vYp{qvzLGvscblw*?KveXwKZuh)Km)G>ll%guCMVb%EEI2Vb8nq?b zIv6%LWHBi~lXH50WwNVg_3zgxuVC7Gq45YZ1`ea_v8*!NxN(85#%_*Zi+b&S3}b@b zB`5Cwe{Jj}8oZ77$i7wR+<=36J#IR~!^S$zbCy56x+?O}wM^yuh(1j{5ScLACAM{e zdd^Y8JDi>c-oryPRE#--6pfmVLM2i2MiJhtp|jzQxbU+ct2cq94e>=NtmjJZ0h)%74ugCY`Z|KnzFS6B8GrTQCrj#0JCkkAOZF;1lff!2z&T{Wp z_jBiiRxH@(jaAa*P`UYth)JS&$76pPxM$SYkgpk9sqqWYzIWw<2_$F%-?j`y& zReEqq!?hZ*bBwHah+#y=mTqETtJB`T9+RfN(2>tcSvvQgz#d{n>OKSvW~g0Qb4OzT ztx4a?mmj+iEZ0I4uFcB=iJNd&5;TN(JSOb3Oui@D^@@eK7(`7v zkDn+rULM%Gn`4Ykc~<=p593P!rbELglwqaO^W1b{FFZr>vbmeB(xTgzrnCG`GPpd6 z7zqUWi=7)9U$bDZ?7Pz0@P7#+_6a`e)hdkiagt;+7p=%S70Op`s*el?I`@i&_N03w z3enjJvyyaR+?92c$w6wPz*S)%DLr0oz!J9My4ouQ#QJ*)mThD0w{#7zv}!wOAE17P zsyw4w*9Z*d{_uoS#M}vIwT38#ow~&dAbuW}rW1SiuraE*T$m-#^=5Apl2kP%aJ4{4 z9+s0}pDZC58uK}?;+jPTMqe@p)RB1ACq5sZ3zY8zm7zAO;gtCmpn_EKAmY}NfntE$G+)d6975f?SJ1*uBnZ0%zg%URs z@17!nU2V|Zt6F@4?tJyAT0PXrC_R$_{pU3JAPaz|PT2lvLlI>hZp96+jU>~^kZnqm z=HY>ScHEEL@)50_MkpV6<03MY_H)!0;oB~DJ?_77SAz0X)ZFOJ<- z!anr(=*?(hS2URTY>MSyxAuLOBCDBc(H9f3!wi8&GRvvxpi60_aO7bIQIq6bM<;89xLX_Pa=!f2M8cX=KH}7TzfkP2 zMSs^8Ya0rH(q<_;UBqeCSN$O@v%V4-Sb-1-k>l=3P2Uq!a=y;+E$WRQt$AZ(d0)8> z`1u8joqm6ZR$Ad3jJm78j?_Zm69{!}j;(^A|UF0$J5b?G&;t#Z;D69kEHra$^gQ z4YIsZbH2AMmroFR~|A88xRqX3}w`Hh09FFh{gpvwlnnnSxJT{u5B-pNt8 ztUD-o4&K?X+J{6j5R~q=1erwqX97KBQ9DFuJLKuZOy&bLzlQYnK-&)8X<-dHO*um> zo1VpvSy({NX!u+v88f`_Aqu9sdMgGn&3>ma&=irkh%=>uv$yHgKx9b`ST@R{*1_v7 zrs0q2sIN14AMuze=|`ElA8gS=)>=+b&~)`@VW-l9r(?SU#K%QUB!g8zYFeH20C1eC zwAtrl*t0H3@H8y)3}9-2+uxtw>m=$CK3I*rxM$DhK#q@KKBO3y99DXW;ai?Ot#te*- zhk5%l=@{(70U^jla^gD}TT-W}25vTlb>ZOODO#SCn6kozOO{znBHlmpE2~fGfDWs= zGbC$mqBe%#O+ka_!$Vly6r#MVM}Vk|`u#QbA_RJ^yD?sOt@LCBaV^zX370^(BLX&y z&?73*Ahsu83FCBX{`AV6MAX&x(t3oV98uww;IJ~jIJ<@!)Oy6?p3^jT=&DzE>IgaK z?QRW_s;9;XIs?>7=P)!#ieYUS82Tc8p`~sFfPk(Km_ma&N^YkieAccI+0IHo%r^Nb zQaimQv^U2q- zC%Jx=(Pr5cMq6~KluJx+P)xY8xEQ&of>GBU5| zuT!gNCT>E9ZU4Hto_4Ya2FM&(^b$@BW`$kZ)KctgMMMud0zw9We&1dX{73WfiY`IY z+D|NKdm5?J!U0^wnx||s1||4o5?o|`tbHLa&*0Ty4h#Cls?%ZS4p*OyUhz)oggZ>a zMVeTJ&%8f6tdKG}5^_Wan5ogBuCxk9K*Vr3V}h(zW<*kj$cd@Uwdfe9 zyKxyqCnWQ%1(G3}m94FHHHP2r_@M*|wzBz)1Mv;JnekY1vaaw$nUyLQ zra6dE^{+xOrYmO2as0)LzjI6HmpcmbO6?{ze6Gyr^aGrJ z!Cy3{iAucwzzt$$mehVG2AEJ&`1XtKC1LF3BmwFdM|Y9r4yK9vqQI517crA)`8f`a z^j%&ju}bQVaG=fYdsQpx0 zAQZ<4OK_^{EDLWR%1LV#*U$q|fD$QD3A#N?PuYV4?=e0Wv4n%X9z14N?YezorRNk2 z4v{n;swkh26yNb)^{!?=0N^+xFvX8}>nsKh zk>{JcmaeXHFM{G9#8dgLmGY3f-D7M0sJzBblc+)lI{!d3<>?nHm%A)5crusjUbR$7 zi{&i0MA8e9rruGnd`C;E7dBpot-_-#*U*+;mz@Qn7!C3ZXYhQ^~dA+@{S zz;U|d>sxf&h;mWr{MNZc|+IQB^6wv z{bZvP#H&WX^QzPsbbH_5mq$7xH0b+vIzKE%O-@l6S^NtURM^d}(P-D+e}?dRNg=xoGjvFLOs=1ns5b6e&Nb!BJTr{j65$Fa>3J~ebVo1XsFxAQNDx*q!bONg9{n_t>QEpG~B zEw33fT4b@Xt*nzMN*lxSE2E76UNEG4c{=Axhe(cCaim(qZa({pqO5u+VLm1|k0381 zbEA5{vuZsJ>lEMFdzs+)}@&M;ccI6jMbg6&Rllv7oxz;I2gNCF%~x zZ>j2I%dNj>=l`Q2ZAB2Z4i#&+gnR5ht>TyTH{;$~%F<6?mo-L|%T{UYL;wfZFKUJ0 zuWg>G^Izps#}|GBWk#w^JY*%m&?Fvmr~LD4kBR-mt#W?WHPqV1zSpUMbLTVZD+JFS zIW1-VJ!q*YDR@t>*@9Apn*ZD>UEs5EeRYQ>c7zZ2JkH|nbzLA~5^P$?{|54d;k{t@ z7}SHdB{897*ZWmN(Ud_bzaMOPTNQ^S+H9&gs#8^Tg$0TRdIIIAlXO_~TLZQ#V6B)* zSG#5!XpD7fVP^TY zdjB9t7!e;hOPE;lbVS6P);pxP6ET{CdQT*vpf{l@heuF;9^c| zVDOSpy+pLFkI{+}Gj0jjyOxF_l0#s!RA(rnbJGG$Jkb|ncYN@89W+hz#0F*wml$Q! z7@sjvu`!2bPb;B?u2qd-`ewmpdC@lBCy`h1$=2)z2^KvIyy)V_^%ooeC%x(>;}RNX%{N*6v=Na4@m#)vWJhW%uzYyUsqx)dTA_;?Mg3&Kbp<{la&ovlG}I;hgx*U z$NXDV7NxV#r6Eo*z;DY*BvLbhXe{Mo*5z}+I$LPa)_$BDV5I|S2OT~|y_vR@s^0^- zh_{Ma%9K?e(WS{&*lTHd*jOjMETnnVTukXh+%-8uChpxbF9t{;JVH*1;*&LNu(7&M z4CX?>O9NDP9@H4F4~{#GT&wuM?d5>**Vx#- z)i~D&GGAZwT`~@qV1>U12hp`mI|x-$S+$~(Iv6k87GDXOnupl2|2v#z{ z@)4e{mjf$B)^<~mE+8bYBUl3qa~DUXh&0U8)QwtTXNO+6;%xcb*1xoMcCE+~fWQS= z5vmHVsNJS0-~UW`f_G*@wQ+5ToHF-2E5avX8+^iU307qSv$Nl+HQaNQhhM(roC{at ze@@x^FqEu+a!~1K39lJa9gVa`UmtHP#Vi8m*- z&uOH_Oo2Q~X9B4sED>&HIOqf@ASxfTpC(g1_L%1tKrT>ncGvM|R`{5DdDymd*!wgS zT}R6R(;vq+4i$Gb!slHWWSX{Uh^Yymkr3^{@Mgr#aIqV_A}Zif=l!_`&#;}Sn3grb z{?7Z)Yg6N(GB}e5@kBM%V4)5RUB$Si&ZsczC-PC@sQ{d}l);F1w zx|+}l-EB3gX0v?5j)tmpy?JwKX_23VEml}?gDp>M1}?mpTjQix$7p=q9_s{#fORc; zW+$V3h2^!Z%4Faz{F1DT*Vpp1{0;3UeW&7FdszJli8!<$t6_aWc%C5n80xV)a| zW_UmMMxn*1IlKAA?XUg2YD7m9|s}Oy)SADORJdqu2b$hz>Z#vbPLPz8VKz`D6ZUXvl z3+Th7Juer2e<*H8$F580hnY1mqNafr8gdF6&bqIexhqcj0l&xnJy=OSjk6TUroQ;x z9SQv8$zB33Fy^|q4Q(@2@7Y~A%5~YdV6XZ?KUojF8jEkId9m&Ncwn-g47q&zqazlP z9{36xQGY;9QphOAchT~TiVslO-ucx^SfmBAs^IdsdERo@AoO#d< zeGmV>AoR^--}lbN_f?8~^lv#>03s+&=aDid>v$J{;+V&{MglB!NVS@qfy;ZA+E?zpt-ZwZ7Y(W_Vu-cECVpndjo?ObMW1AEW;G0* zI2ZsU|5QFc|8jelV-Y_TjgxQY7a zODStlY*qh#9)Rnx;Vm5CO_0U9O5@qj^LUsJ6I^V-iV2AJ{Pria2_mvC^W2eo5iRUA3@ym=Qbc1F@W+j*4hwp;k!SlQzP> z5lm#mY=1+$0Q71=bD|L>O{<4 zYmT5w%Zw7o`FDr;EO@rtXAutE_N1DsiERk&a=gJ%S&LMf~W> zdsO>mu~K1Fp(QROgGJ$MW%h|ekNDaFJLNk7G5(Rl{WOiLx^BihMDW6IzBWA)`RExd z1o)BrgqXVNt>M2idAL+@%E;x~2BZO!E24SUp)8SLk&i41KEq{yZDOCD8M@x171E;T_*w*>0Mmu}|hdmM3@r#k4|K+Fb z-|@$HS$nDivX?clh^pQq>hC+pMIFglc*|2t9BZRiUHOY7b+8Nv(uHYdNHF32B#Nywnn+3$94 zJXkqs4q_+vO?2jhliz#XD z$bS`l2D^jRQsr;!{Z{Q{&)NW2(YL?2>Q1QRbW_WjbEQhXNW)qR{SAQW?jN(!!w4M9 z@LU#u7khuDpT&YbL-1ZdO}l}9ITr$EeLIAkajUlA@>-$U26_-bfF&?~{N?fJ=x9;u zXtnU*%Df44bg9_+#YnAF8w6&e7GDy=TKkZ&OTXQM;aG69Y{3+P!hK_8=>g)z*}Bbb zkxJ%N#Ks>Osh$hg?f@C}24Al}#cK0^P}P?A_;lw^Oq>cpZctZ|#+HqUsuDzX2@IGbvMXCnaV(5vz;_X_w&3{}|{X$AT*d6=j zwR_Ks9bQvR?oqksR^%|Ew+Zk7QQxIWSA}#md2_Oa4y-H%uzLmDiC+VAPR<;y%*PSj z^c&2|m`Sk3u%R{$R(iLx_w)#-;ih*F69h=N-f%tpEjHaLp2?0R>1py%lf$~2cuzya%MS)b%|5ghVB0&7#Q~rxU zM~?{dCJ|GYA+bOY|G%;PSC)!C5p+A;|0GFF*T?>EdH-4L|7MOw_&1Z{U(4(N$^DPx q#ryw#Y(oDR_x^u6P>}pf{;vh5EC&ns@6!Ht*z}+wAQA-sz4{-MJ1J`b literal 24813 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

XYe#2RQS{4Wxee5bH2TVHyy<&hpv;+8oT`6v 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 From 0ee572c09418d38f440c3a1adc491dbeb501153b Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Thu, 18 Sep 2008 00:46:05 -0700 Subject: [PATCH 2/2] CPSplitView updated to draw dividers in drawDividerInRect, and use it's own runloop. [#50 state:resolved responsible:tlrobinson] [#51 state:resolved responsible:tlrobinson] --- AppKit/CPSplitView.j | 191 +++++++++++++++++++++++-------------------- 1 file changed, 104 insertions(+), 87 deletions(-) diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index 97bff90a7..adafffca9 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -35,17 +35,19 @@ var CPSplitViewHorizontalImage = nil, @implementation CPSplitView : CPView { - id _delegate; - BOOL _isVertical; - BOOL _isPaneSplitter; + id _delegate; + BOOL _isVertical; + BOOL _isPaneSplitter; - int _currentDivider; - float _initialOffset; + int _currentDivider; + float _initialOffset; - CPString _originComponent; - CPString _sizeComponent; + CPString _originComponent; + CPString _sizeComponent; - CPArray _DOMDividerElements; + CPArray _DOMDividerElements; + CPString _dividerImagePath; + int _drawingDivider; } /* @@ -92,6 +94,7 @@ var CPSplitViewHorizontalImage = nil, _originComponent = [self isVertical] ? "x" : "y"; _sizeComponent = [self isVertical] ? "width" : "height"; + _dividerImagePath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename]; [self adjustSubviews]; } @@ -162,33 +165,30 @@ var CPSplitViewHorizontalImage = nil, - (void)drawRect:(CGRect)rect { -#if PLATFORM(DOM) - var dividerPath = [self isVertical] ? [CPSplitViewVerticalImage filename] : [CPSplitViewHorizontalImage filename]; - var count = [_subviews count]; - for (var i = 0; i < count; i++) + for (var _drawingDivider = 0; _drawingDivider < count-1; _drawingDivider++) { - if (!_DOMDividerElements[i]) - { - _DOMDividerElements[i] = document.createElement("div"); - _DOMDividerElements[i].style.cursor = "move"; - _DOMDividerElements[i].style.position = "absolute"; - _DOMDividerElements[i].style.backgroundRepeat = "repeat"; - CPDOMDisplayServerAppendChild(_DOMElement, _DOMDividerElements[i]); - } - - var frame = [self rectOfDividerAtIndex:i]; - CPDOMDisplayServerSetStyleLeftTop(_DOMDividerElements[i], NULL, _CGRectGetMinX(frame), _CGRectGetMinY(frame)); - CPDOMDisplayServerSetStyleSize(_DOMDividerElements[i], _CGRectGetWidth(frame), _CGRectGetHeight(frame)); - - _DOMDividerElements[i].style.backgroundImage = "url('"+dividerPath+"')"; + [self drawDividerInRect:[self rectOfDividerAtIndex:_drawingDivider]]; } -#endif } - (void)drawDividerInRect:(CGRect)aRect { - // TODO: figure out a way to "draw" dividers using DOM element +#if PLATFORM(DOM) + if (!_DOMDividerElements[_drawingDivider]) + { + _DOMDividerElements[_drawingDivider] = document.createElement("div"); + _DOMDividerElements[_drawingDivider].style.cursor = "move"; + _DOMDividerElements[_drawingDivider].style.position = "absolute"; + _DOMDividerElements[_drawingDivider].style.backgroundRepeat = "repeat"; + CPDOMDisplayServerAppendChild(_DOMElement, _DOMDividerElements[_drawingDivider]); + } + + CPDOMDisplayServerSetStyleLeftTop(_DOMDividerElements[_drawingDivider], NULL, _CGRectGetMinX(aRect), _CGRectGetMinY(aRect)); + CPDOMDisplayServerSetStyleSize(_DOMDividerElements[_drawingDivider], _CGRectGetWidth(aRect), _CGRectGetHeight(aRect)); + + _DOMDividerElements[_drawingDivider].style.backgroundImage = "url('"+_dividerImagePath+"')"; +#endif } - (BOOL)cursorAtPoint:(CPPoint)aPoint hitDividerAtIndex:(int)anIndex @@ -207,72 +207,89 @@ var CPSplitViewHorizontalImage = nil, return CGRectContainsPoint(effectiveRect, aPoint) || (additionalRect && CGRectContainsPoint(additionalRect, aPoint)); } -- (void)mouseDown:(CPEvent)theEvent -{ - var location = [theEvent locationInWindow], - point = [self convertPoint:location fromView:nil]; - - for (var i = 0; i < [_subviews count] - 1; i++) - { - var frame = [_subviews[i] frame], - startPosition = frame.origin[_originComponent] + frame.size[_sizeComponent]; - - if ([self cursorAtPoint:point hitDividerAtIndex:i]) - { - if ([theEvent clickCount] == 2 && - [_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)] && - [_delegate respondsToSelector:@selector(splitView:shouldCollapseSubview:forDoubleClickOnDividerAtIndex:)]) - { - var minPosition = [self minPossiblePositionOfDividerAtIndex:i], - maxPosition = [self maxPossiblePositionOfDividerAtIndex:i]; - - if ([_delegate splitView:self canCollapseSubview:_subviews[i]] && [_delegate splitView:self shouldCollapseSubview:_subviews[i] forDoubleClickOnDividerAtIndex:i]) - { - if ([self isSubviewCollapsed:_subviews[i]]) - [self setPosition:(minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i]; - else - [self setPosition:minPosition ofDividerAtIndex:i]; - } - else if ([_delegate splitView:self canCollapseSubview:_subviews[i+1]] && [_delegate splitView:self shouldCollapseSubview:_subviews[i+1] forDoubleClickOnDividerAtIndex:i]) - { - if ([self isSubviewCollapsed:_subviews[i+1]]) - [self setPosition:(minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i]; - else - [self setPosition:maxPosition ofDividerAtIndex:i]; - } - } - else - { - _currentDivider = i; - _initialOffset = startPosition - point[_originComponent]; - [self _postNotificationWillResize]; +/* + Tracks the divider. + @param anEvent the input event +*/ +- (void)trackDivider:(CPEvent)anEvent +{ + var type = [anEvent type]; + + if (type == CPLeftMouseUp) + { + if (_currentDivider != CPNotFound) + { + _currentDivider = CPNotFound; + [self _postNotificationDidResize]; + } + + return; + } + + if (type == CPLeftMouseDown) + { + var location = [anEvent locationInWindow], + point = [self convertPoint:location fromView:nil]; + + _currentDivider = CPNotFound; + for (var i = 0; i < [_subviews count] - 1; i++) + { + var frame = [_subviews[i] frame], + startPosition = frame.origin[_originComponent] + frame.size[_sizeComponent]; + + if ([self cursorAtPoint:point hitDividerAtIndex:i]) + { + if ([anEvent clickCount] == 2 && + [_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)] && + [_delegate respondsToSelector:@selector(splitView:shouldCollapseSubview:forDoubleClickOnDividerAtIndex:)]) + { + var minPosition = [self minPossiblePositionOfDividerAtIndex:i], + maxPosition = [self maxPossiblePositionOfDividerAtIndex:i]; + + if ([_delegate splitView:self canCollapseSubview:_subviews[i]] && [_delegate splitView:self shouldCollapseSubview:_subviews[i] forDoubleClickOnDividerAtIndex:i]) + { + if ([self isSubviewCollapsed:_subviews[i]]) + [self setPosition:(minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i]; + else + [self setPosition:minPosition ofDividerAtIndex:i]; + } + else if ([_delegate splitView:self canCollapseSubview:_subviews[i+1]] && [_delegate splitView:self shouldCollapseSubview:_subviews[i+1] forDoubleClickOnDividerAtIndex:i]) + { + if ([self isSubviewCollapsed:_subviews[i+1]]) + [self setPosition:(minPosition + (maxPosition - minPosition) / 2) ofDividerAtIndex:i]; + else + [self setPosition:maxPosition ofDividerAtIndex:i]; + } + } + else + { + _currentDivider = i; + _initialOffset = startPosition - point[_originComponent]; + + [self _postNotificationWillResize]; + } } - - return; } } - _currentDivider = CPNotFound; + + else if (type == CPLeftMouseDragged) + { + if (_currentDivider != CPNotFound) + { + var location = [anEvent locationInWindow], + point = [self convertPoint:location fromView:nil]; + + [self setPosition:(point[_originComponent] + _initialOffset) ofDividerAtIndex:_currentDivider]; + } + } + + [CPApp setTarget:self selector:@selector(trackDivider:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; } -- (void)mouseDragged:(CPEvent)theEvent +- (void)mouseDown:(CPEvent)anEvent { - if (_currentDivider != CPNotFound) - { - var location = [theEvent locationInWindow], - point = [self convertPoint:location fromView:nil]; - - [self setPosition:(point[_originComponent] + _initialOffset) ofDividerAtIndex:_currentDivider]; - } -} - -- (void)mouseUp:(CPEvent)theEvent -{ - if (_currentDivider != CPNotFound) - { - _currentDivider = CPNotFound; - [self _postNotificationDidResize]; - } + [self trackDivider:anEvent]; } - (float)maxPossiblePositionOfDividerAtIndex:(int)dividerIndex