Discussion:
OmniWeb 3.x labels in the upper-righthand corner of the scrollview
(too old to reply)
Mark Onyschuk
1998-05-25 23:34:34 UTC
Permalink
I'm wondering what magic the Omni folks are using to get advisory messages
to reliably appear in the top-righthand corner of browser document
scrollviews?

I'm implementing similar behavior in a custom app for one of our clients and
have most features down (including the slick semi-transparent drop-shadow),
but I find that the scrollview frequently erases the view despite my best
efforts at keeping it drawn in the correct place.

Regards,
Mark
Greg Titus
1998-05-26 19:46:05 UTC
Permalink
<fontfamily><param>Helvetica</param>Mark Onyschuk <<***@OAAI.COM>
wrote:
<nofill>
Post by Mark Onyschuk
I'm wondering what magic the Omni folks are using to get advisory
messages to reliably appear in the top-righthand corner of browser
document scrollviews?
</nofill>

It's tricky... We'll have to talk here about maybe giving out the
code, since it seems like something that might be useful for a lot
of apps, and it seems like it could become a standard interface
element since ProjectBuilder uses it as well.
Post by Mark Onyschuk
I'm implementing similar behavior in a custom app for one of our
clients and have most features down (including the slick semi-transparent
drop-shadow), but I find that the scrollview frequently erases
the view despite
Post by Mark Onyschuk
my best efforts at keeping it drawn in the correct place.
We ran into the same problem when we were trying to implement it as
a normal view. In ProjectBuilder, notice, they remove the status
view whenever the view underneath it changes, so they don't run into
this problem. What we ended up doing is creating a subclass of
NSWindow (OATwoLayerWindow) which adds delegate messages for
-windowWillFlush: and -windowDidFlush:.


The status view is actually on its own off-screen window. It watches
for these notifications and on -windowWillFlush: it (a) copies the
rect of the visible window where the status view will go onto a
second off-screen buffer window. Then (b) it composites its
off-screen window onto the content view of the visible window in the
correct place to display the status view. The visible window flushes
itself, and the status view shows up. Voila.


However, scrollviews do this neat trick when you scroll where they
just copy and move whatever part of the display is still valid
instead of redrawing the entire view, so doing the above causes the
status view to be slid down and around when you play with the
scrollbar. Ugly. To avoid this effect the status view catches
-windowDidFlush: and restores whatever was under the status view
back into the visible window (using the second buffer window in step
(a) above). So the status view is only on the visible window's
backing store during the instant that the window is being flushed.
At all other times it isn't there at all, and the rest of the view
hierarchy draws as normal.


Quite a lot of bother to figure out (although not that much code
once you figure out the right way to do it).


Hope this helps,

--Greg


---------------------

Greg Titus

Omni Development Inc.

***@omnigroup.com

</fontfamily>
s***@easynet.fr
1998-05-28 13:30:14 UTC
Permalink
begin 600 .tar.474.Re__OmniWeb_3_x_labe.attach
M'YV0+EX`&$BPH,&#"!,J7,BPH4.$(&C`N%&C!@@`(#*"D$'CHL:,,#Q^'!D2
MA(T:,V;(L)&***@V-%&7`P%CCH<V;.'/J!%!G#ITP<C("\`ETS4Z$=]"4*</F
MJ-.G4*-*G4KUH9$I3,*(86HE39D[+NB<T5.UK-08,&#8H-$1HT:.(C6&=/M1
MY0V)&4^F7)E6QDL0,638Q3C3K.'#!'O^#'J1J!RC4I,N;8JXLN7+F*M^6(0`
MP`4P;6H(&,".1Q\V&Z[U.;)$***@MM<CCL2-*IE1<OG>S8FI`I1(I$DM+1BL1B
MVR((?]"8DL8*D:!V>/A0>.7#6XP[1Y****@12,B1-N7P88$&9"E*@N,ZX84$2B
MU29J2.0=,7#`4Z0,VR`0\`4@@"`-",@"`A:`.`,#-"%@\\,2]^S3RSWNX'%$
M%++,@D,Z-L"3@#3Q>'/,._NLTXDC[T!A#BR<E*+-'57H<`\@])***@PP8?."!
M!B)($(@E')!SA0077!''$%(,,<``R8023CA4*`()$6+`@4,)***@I*+6-)
M$T*0P`LG6)3A#1>!2-&$/G]<XT`!]/P!Q2?14+$*!-,H84H\***@QP_Z/'**
M`4#\,***@R>,@RRC_?O.+/`"/$T$4S_I0SP!>%^#/%,,/`DT,,#'***@S[_?&'*
M/YRPL4P,14S2PB):?++`$2)X\$0##KC"RC^AA$(&%O\D0X0*.9`0B82AZK%-
M#&***@8TL::&A0PQV0O#')*:*@`DDL\:22R!A'S(#'/_3X((***@0QWX@$/!
M.E*TL<(HX$A`0P/H0#''/@C0TT0T>6R2!1.B-/&%%/3D`8X,CSCA`0\^^($'
M"X-`\(@9CI3QRQ,5;&",)]Y<T$T$,/!@A!28:`)`"'!<(\`!UX`@P0?(C*&*
M)S/X<`,&OB@!@)G+^.!$*Y*$<@XAC/AP``F/Q`#C'][\TX`***@S0MT(,K
M,4#(@4LU_QPB22J._/-'!:WL,***@9FU#***@C:52-!,%?^***@R"SIH&&&
M&#_<TLT`$-1S2P[.Z/&,):44HL,G,#@@R0R*\#+'/2F<T0P*+A"2!GY4U),)
M,BF<(,<?WT3##!:ID)**(***@76Z"20P3U>&,`$XMXT`P'H>B1AS"F%(/(
M'S<X44,[=AR3#1XTS/(+&]L8XL@]>V33#R:"K%,,/EH`T<`G'A!`B2KZ,$)/
M%J1L(8<N1X22PS,]W.).&*I4(D8L6#03QCP.!,'&+***@AC@ZX(1GC",9N)`'
M$1X`CVTLX!<P2(,EM`&$"O#!#B+(1R.<0(1(6$($2Y"&-+2A#6$(``A-&,`C
M&+$$<)@#$0Q@!S-^@`X<]`(0ECB$,KK!`!OHHP!\T`8<:#".`QP@'53H0QBB
M(`<;B"`&>8B&!4!1!%)DX@`EP$<K7@"/#YQB"***@1!12(((6X&`+[JA"*$HQ
MC31P8A7B$$8T/N`/=]RA"Q'`***@WF<`@2]&`0&A"'.'P@!***@Q5&.`83IN`*
M)-S-`:00A@\\H05VJ&('/^!'`***@CDU(8QX@&(0O$M"#-T`B"5DXA0:4((Y\
M%*(0LV#$)V;@A%>4H0EPX$`UEB&-;@!@#S,``0;Z4025L4(2:EC`,X;!"BU@
MP!JF2,(DS)&*)-2A$%H(`QC.T3U>D,`2+Q`%.JX1"E;08``$D`4U#IF,<XP@
M$MK(Q3D*,(]:S&$9D3B"!R2`C6?0@`#Z<(,A_#`.7)@!"Y2`!QRX001W\(,"
MY>"'`"[0AGJ\@@00<($_ZD&,?8A`"?8HP1,8`0-Q+$`>9VA"%N)`@$U$P1#Z
M8$`)5.$$!V0"%-***@23FL8(X8$``L"@'(E2Q"EETP0;5^``+3C$//NS`"HOP
M!"B^D(I.;*$+*)B#&,R1#T/``@#PB$0*M,""-,BB"<$(AQ[FD8<",`,!M<C'
M#:10CW6L`1!KP$(M?#"$9F2A`M2HPB`V40L^1*$%)(!%$B!0#%+0@@E8D(`"
M%G`,'D0A"4'0!Q#0\8=_K*(!U?A%(T"Q#`!8H`,2V$49IB&%=@@!`?:(11X2
MX(=+!,,+BX#%(PI`#5C8@`7%<`,-LN""&YQA$***@4"@09WS",-Q-B$HK0`
MCG),X`6<R`(JOL"*:KR@$(2PAP30@`!RT"(;"V`"."IAA&Q0`0A2:``#&``!
M:"A"'@PH0BK8``XI!*`:@Y`%,,:***@1+:Z`,,3J&`)>#@$?A8Q0+H*HLC
M!&`#"YA##Q(@ADUP@@O&J,,-)H$&0*S#'3#0A"OB(0=@>,,5M)A!(/*AA1V,
M8AT>N($2*K$!5E!!&***@1R8H$80UW``+.MB&'=)`@R'4`!'T(`,3IN$&6'C!
M`NL8ACVF884P_(,`TOC#*0H0#1VXPPA6@$(`P`".*XP@`J8`P!_P(8Q\5`$0
M?L"&`&B1#@L(0!T;6`$+^#"**ECC`:O(!2"`X8):C`$7T/#"$OZ@!2NTH\=\
MD$4K4`$.?XS"&)6X`S3:<0,]F(,9TFA&-G0Q!TMDHP,8F,(3.O&`&RPA'OMP
MAC5>T0(!"&(26_`".")1,6O$H0DM"`<:],&&?MC-%\FPPA&(((%C"*`;BTA!
M#*PQB#GTPQ.SJ,<W%(`(-*0#`F;X0P=2X85&Z.$:^GA#(9HQ#R@,`A9J0,`M
MGO$,*V"!!***@01=D\8136&`5VL#%+/P1!VQ\XQ0@^,`F[."#0]0`"1?@ARL"
M\04ZQ`(;.L#'#.IQABG$``.\^$!U>N",?;RC`N,(1#B:(0I"Y*$&TF#!&8AQ
MC$EH@!G_B$</I'"*.FBAZ$<W.M*7KO2F)_WI3(>ZTT_1AVRT(Q5IF(8SCG&*
M,G1#"I_0A#,VH(LVG*$6:4`',C9AA"A8(QF4T`(IK.&)<>`C#]^@@P]BT(E;
MI$(*(,B$$F*P!C1`(Q*<<,86YJ"*,D3@'W7P11^BD0Y^`(,.OD`#.5"1BDG$
M811L4`4UN'$/.M!!%R381"[2<8):L+X.?*C"$JPABI<:0PF.2T,)/G`"?/B@
M$:EP!@78,)H$R.,5.&""!/9P#P=,@@V%`,<&&$$!4U!@"6C31#_(((0KB($`
M7QA$"(X1AT04P1%36(0F9D&#"VS"$4Y8`!<TH0D,,*$86XB""4XQ"T#0`07)
M$`F&X`V-P`G&$`=K0`).P`.PQ0]@(`,9<`!`P`Z2<`7W0`*',`FE%5-,@`X%
MH`:J``3+$`(0T`6Z<`FQ<`EEP`&.``G`L`#LT0Z_(`G,$`$F<`5%@`.XL#)-
M$`OID`?#P`):0`;*@`6&,`?<@`RI$%/94`'`X`M[4`!<$`0<(`0RP`E&P`4M
MX`TO4`*W(`C>,`!4$`UD,$U`H(7T(`@FX`%1T`X'(`0JD`@5X`:2P`5_$`-[
M<`Z1\`MXD`!KT`]NP`?U4`ZPH`J?@`4^(`AOL`H>$`EUD`>&H`FAX`])@`XY
MP`)7P`BRT`C=L`HRX`UJ$`$#$`?.L`;3(`&3$`^50`PR(`Y/T`5M(`/#T`$$
MD`;/\`#LT`&)L`=T``QE``<$D`Q)P`#%<`4V``W)(`M9(`,LH`T$$`.2P`2M
M0`N<9P$NX`4]P`XJ0`B_<`A.H`A,``?+A00A<`-'<`=:``***@H`Z$X`Q2T`TF
MH`EAD%#=X`0Y<`E3D`U:L`***@8`IX$`/0(`)EL`!L$``\P`4&\`4V(`_$X`+(
M8`<+@`+O$&IAX`>)$`G_D`@0(`Q&@`-IH`JZ(`J60`:-P`C98`NI8`8A@`I8
MT`2@<)$X(`1+4`(9P`[4``&[0`*&(`&#<`,IP`K7H`</``6-X`S(8`/MT`>M
M<`***@W(@`T<\`=CX`!H\`=+&0%:$`'W``/A@`!*H`C?$`O!,`"3D`&B``0<
M8`KS8`^M,`9XP`VD(`+$D`>`(`4#P`@=8`<!<`P=P`$9P`L1L`638`K!@'F_
MP`IJ``%)``FXP`*Y\`\DP`^-,`&K``@^T`$P``E>8`@10`]K<`&H@`$-H`H5
MP`[!(`MET`6Z<@V,8`9D$`01,`NRD`KBL`UJP`W.8`??H`1M,`3:@`(:H`M6
M$`*/(`JMT`&A8`?!@`R\U0,\P`R\``A=``02D`KD(`^D$`D(L`1B\`#+T`0G
M\`30H`!_\`"R<`\X4`BIH`-S,`#OL`@K``;B4`*P(`=P```,$`PH4`@3X`O6
M,`:,<`N$8$1]4`[S```J8`,M8`2(D`P'4`;2D`&P<`-JH`=OH`7BL`.VD`&J
M<`ZFH`(EH`:ET`0&T`E_X`[-0`FH(`KF4`50$`U36`B<X`:)4`($0`<%H`W0
M0`T<$`C$(``(4`4K@`JY8`':T`RRX`?$@`S)H`TA,`SD0`ZFL`>/<`F1$`!2
M0`SN``8(``[0``P:0`#BP`G/(`9LD`5\T`4E(`8FX`8RP*92X`T\\`(&8`/K
M(`"<\``T10S;4`J2$`?\8`<=0`XIL`0Q4`T2,`-=***@B#$`18$0L8$`Y90`[`
MT`S&8`BI(`!MD`BDP`[+P`>D0`8:,`MJX`3XL`@"(`.#4`XD\`;*4`0Z<`:8
M<`*8P`***@4`&9T`*A$`G.,`6EP`RT(`0.X(ZS(`%R$`MBD`$B\`1!X`FE``--
M8`5L``M_,`2GT`3',`B80`$F0`87``Z0D`C))0>*H`7'$`PET(T4``"E,`-`
M\!E'\`]'L`7<4`N;4`P`(`DOL`[LT`=Q``]W,`JL(%3"(`0`<`L1UP*$H`=5
M\`DUX`1X8`R,``264`0/X`"/,`U10`;^H`$C,`90H`>:D):W8`M=H`3J<`^A
MX`I&H`EF@`RY8`<"4`:N4`JKD`45&`(4D`QZX`"A$`PJL`4VT`8&@`-@\`S`
MD`!X4`9N4`-B``2>@`0)@`,)<`(#H`9I<%)EP`A,0`X1L`LG$`+P8`***@H`V2
M@`"T``1*L`3,T`[G(`Q<$`D[@`'C``)SX`G%0`R84`RM@`N`4`K;8`$D(`"$
M4`2R``%,``R5$`A/4`"R,`/RD`(W<`7J``::D`-%2PSX$`DF8`E^D$>`@`)O
M4`&`$`"AD`I%4`%*``0L,`!0X`9Y,`33P`"(8`8SD`YVX`<\0@:ZRP$5:0,P
M@`GDX`4W@`P3``"_P`YET`G#$`<V,`=X@`A=8`3XT`T(\`O;L`$E9P\.$`M+
M$"M!$@>?``'WP`Q_$`R-<`\N<`<Q!P0^D`DU0`U<L`&N4`4PP`#9P`E1H`^)
M(`#VP`3N,`C/,`N/\`,!4`7S,`73$`T>,@SF$`O,(`Z?@`W'<`+ML*\Y``L\
M0`O/,`IJ8`\HH``YT`.Z,`I8$`0,L`.($`.G,`4ST``FL`Y-<``(@`9=@`<[
MT`_T<`$+,`7A@`%U,`END``VH``UT`$DL`@?@`C04`-I@`5V8`@%X`1"4`]9
M4`TT0`\BH`,,H`<20`$UH`,6(`?<\`Y$@`'QP`I`0`XZP`Q;``:!(`SQ@`S_
MI0)I(`<E@`"5T`;S<#J;``3J<`FD``H(D`5ED`-(,`'%<`$6<`G<<`2+?`&X
M$`YC<`4P(`9"T`)J4`\3L`***@H`HP_`I#8`Z%(`X0P`,>@`ZI``_B0`FV0`P+
MX`^JX`/48`JK@`RS!P%BL`B<H`U6T`.><`Q@@`8`H`5X$`HL@`18X`%BP`N0
MH`LJ(`=6<`\***@SW@`@(0`RG0`1(T``@P`XCH`*/<`0L(`-30`:_@`:8@`A3
M8`X3H`^QL`#\8`L$``Q,$`6BP`H8,`^8@`91(`@Y$@3U(`.KH`%EL`2K0`R"
MX`$>4`]VD`ICL`PC``>)\`Y4``-T``,9@`)4T`D5$`L7(`@)P`:O<`6PD`D<
M@`Z;<`GS@`/!<`,N``LU``%!``<3X``:,`[.,`!Y8`6W0`,6X`YD\`;#X+]C
M``\*8*N[\``D<%KCH`X<@`^6<`P_\`EBBPSYP`-,P``48`-BD`:,T`.I``CZ
M\`)K``Q28`1I$`U`4``+X`AFP`"@P`&X0`P<T`)`D`\0``S7D%]E(`B<,`6N
M-0,)$`>?H0^E,`\*T`)YL`4K8`DAP`RR8`RD<`IR,`K%H``8@*P)H`KW$P!Y
M@``!(`)#(`/VX`X!0`4>L`^&(`J4T`1K\`&F\`$&L`21T`(SH0SJL`"?P`J"
MP`P$8`:4H`2&D`:V10HJ(`9;<`CR4`^8``%Z9PS00`@JH`6F``4K@`)D8`I5
M$`X%``8\T`1-8,PK``"*T`H@(`F&\`!:8`;QL`OO4`"5H`FS20$J$`OE8`RU
M(`6U4`91@`5=X`(1D`ML,`B=L`84@`,D4`+#``TL(`O+,`\JL`S0BP7?P`DU
MD`"3@`.,T`TD<`7&\`[88`OZ,`&*D`%@``0M<`U2\`*\,`+JX`7,4`J5X`>F
MP`3!8`"Z\`)"$`X>L`AE@`W*X`"]L`DA@`8IH`+88`@F8`0RP`.Q(`)T8`M-
M``[]T`Q0<`&4,`PC``)4@`V0,`/_(`^SX``$A0RH,!R*``85$`***@8`;"\`P@
MT`&OX`2R@`DI(`SD4`X+$`@%T`<G``92``***@8`F*$`C.@`+;X`MPP`(%P`_2
M,`DSH`T.@`(7T`$]P`HR0`;8<`+1<`868`<QX`DH,`P/\`'\(`_%,`,6H`"2
M8`#O<`C0H`JUP(XP<`714`?&$*Z5X`C/X`E8P`RH=@:44`('8`X44`:KP`PG
***@UBP`]A@`@!X`Z*$`/R``LQ<`BN(`WO4`C4P`E!0`=*D`E+``K'\`$K$`4]
M,`:G&`%G@`=X8`?X%@T*8`1"4`L\@`4&,`:%6P8`<`QJ@`6?0`.D\`TV0`12
***@.U@0`N4\`[]P`B<``=IX`B2L`;1D`%)E`>,T`]EL`S3@`M'D`I?T`![,`U9
M@`;%4`(LX`@`0`^=``LN<`";P`@8$`CM``)/$`(JL`<ZD`PH``#A$`6ZH`E+
M$`'?,`1$X`<3(`51$``<@`:?<`\>(`_W0`3'T`MO4`3#P`@XD`A]$`GJ<`QV
MTBK8T`KR<,*4D`09$`M3(`0Y4`M[X`@L(`Q0H`X6P`X:\`B#\`&!$`N!H*L.
MT`-[(`^4@`048`_M0`P6<`OQ8`-R``O9@(P,4`C"X';`<`5`\`LVX`:D``:O
M$'SH(`+#H`444%Y[4`/0<`O!P`T3(`@&T`)FT`@<X`,***@WX`?-(`<>,`X^
M\`270`0O<`&SX!F\D`60,`Y]LP>4L`_U7@),H`[A$`;V@`O!,`J5H`AM<`XQ
M$`DV4`RSH`$F\0KJ0`$#L`(G4`H%0`#6H`99H`*J<`D<<`]9@`W)8`&QP`Z#
M@/"2T`8%T`%'0`TG`!W$`0A0",#`!W("P>`-W((QX`VJ0"Z``ID``@R`7%`!
MR``;B`?$0!V\`T:P!90!#*!P=>`)O``Q\`*>01(H!KQ`&>`]50#,/$`>"`,G
MP!8`-!XP"A`7"%``N(`:C#AIX`"@@2Q8`#.`!,R!7N`'O$$MF``E0!@P#A&@
M!P:`'3`&H$`,U`%+4`;F`#;@`^#`!^P`3M`(6H$,H`25P`,***@2@@#NY'(7`!
M"B`63`!U,`(F02%@`(P`!$`"`H`"5H`VB`88@`_P`&'3#9J`/R(!\Z`9N(%B
M<`(,0#_P`LD`$6P#<E`-%`$5V`8((!54`B.Q!^C!*.@"L$`'*`"Q`0K*P`GH
M!KJ@%+R!77`(#`$[.$P[C`/`@^/7"M"`#^``Q@`7*()LD`***@P#[(`AR`#70#
M&?`,4@$84`/E0`***@WD0"BK`$,@!W&<8$`,&,`BJ`3S``&Y@%-`!=O``*D$R
M$`++@`WL`&FP?VQ!*]``5D`5*`!(YPT`0:A2!,1@#>0#=4`&D@`,A`;>0`),
M`3XP#;J`(?`!1L`7R`,@L`A\`3KH`5'@'%0#0!`&]D$:&!?U(!***@SV`!IX`
M)M``+<`"B(!R8`HF`"$8!X/@&[0`#M`("H$4*`2:`!?L`S:@#VY!WTL%(&`(
M^`-[P`\&@`JH`:,`'52#'L`$+H`O^`*B8!,H`RYP"P+`.F`"0R`3D((/(`A8
MP">P``_`"I"!=4`$L,$."``QP!D$@P,@$1H`"U@"YZ`6"`(`T`W&30P8!LH`
M$*0`-6`!J@`D&`0/X`H,`UV``P@`#C@";<`&)`(Q(`DN@`/(`/:``T2!*``$
M^$$EB`=!P`'<@%%P`I:!*N@`6Z`4\`-KD`\,@`H`!GP`&1R#:.`+>H`$$`,K
M@!UD@'S@"S2`+4@$M^X!:`!NA&':P0H(`84`&92!9N``FD`98&_Q(`P(`PS@
M#MY!+S@&!V"?Y8,I0`]<R`3X!)U`#Q2!1L"2A@$6B`02P!^\`A;@!+S`,A@'
M02`8G(`K0`36%PM8!A^`#)""%F`'1,$@"`-W(A!H`4TP`2*!/1@&(N`:%`-%
M0`DFP<#Q`'I`%"R#5;`*0,$?8`3S(!'***@6<@`=;`)O@!T.`8Q`(B,`;*`0?C
M`5>`%!P#'W`%K``F&`.(@`7`@D4`#^9!(2@'V\`?R`)2$`S401#0`2]@'%"!
M%Z`+:L$TX``K@`38(`A0"8H!!V@`%(`,Y($FD`1H0`80`V@@&$R`4\`-9$$0
M0`"L@!<$`W;0!4+`(N`##$``W(,0@`!&@14(![#@%H@`%-`#8D$^0``L``>`
M`G-@!3+!+]@%)4`&<`-F8`/R0";@`O%@P)V`6I8/X($20`7%X!%L`TCP"1S`
M"2``-T<:Y`,N8`F(P!#P`C_@!(P"'9`+X$%;>0#6``"***@TI0"%!!K-`"].`6
MH`-/T`#***@3[P!&"`,"D`%,`,6``#L`8)H`/8`G_`!)Y`*U`!TI$8D!1@(`Y6
M@"NH``'`"9[(6K`-``$80`$.(`GH`%PP`K)`,C@#O@`;F`(2@`F,HB.P!O``
M%#@"_>('W$$Y4`?5``***@V*``+R`)\@!R\,)J((7P`**`#%X!+***@6P8#0?`%
M>,`%.`/AP!G4`#[@"DA`//A#.@``Y`,*\`<***@2>(!E&@"$0!3O`%7$`KJ`.Z
M`!]$@RVP!F9`!8`#W2!6P((Y<`F$P0-0!MK@!***@_,\`$2$`EZ`49(`H,@G30
M!5[`#]@')N4>]``*D`JJ`3Z(!UI@'*P6&<`,ML$3Z`7<H!]\@CIP#C[!!O@'
***@N`<7(%PD`W&@-J0!Z%`"S2`9*`*DH`4(`4FP`'0@'!0'Z#`6BH!?@`4"",[
M\)((`0%X!5E@%A2"2+`+BL$(L`8[P!&<`C_0#=*!,C@'TT`:S(([4`INP1]0
M'OC@'.2`83`()($9``?KP!***@S(`#/R`)3P&M@`)2(,QL`4T`2`@`3?*VK$#
M?-`%S,$0^`>`0`*,`2F@#K+`%.@'CT!:<@`ED`BZP#JX!F#`!G@"1B`-IL`7
M>`9/``D$`6Z@!FB`(C@&`*`%!`!5\`?.P3&@!4B@%_@`5:`.V@#8^P)'0!5\
M``8!`"``/E@&0``8/`!/P`5H`<IP`%^@#02"!!`&!L`/6`/E`!(***@5K`#;K!
M$A``VN`&8(,(T`*JP1#J!;&@"D@"1M`*/``#(`<?P!IP`PN`!08!U^D#^X"J
MY0$S0`]F07B*!R-@&,@`"O`!QD`$6`0=H!***@3G@#]Q`/'`$,Z`=.(`E8!#I
M0"K(`U!``_P`:/(,TD%:.P(C``TD@`O@`US7%H@'Y2`06(%B\`E603X8![T`
M!W@`&'``H,$::`!L8!IPJDAP"YI`&#`#OF`#9(%;<`J>@"2P!_2@$&"";,`,
M'D`V"`.GX+X-@$&``^I!&B`%>V`#-#0;@`P>@;&@`*3`#SP#/S`$ED$!P`&0
M@`\X`%O0#T8!.9@"M^"_N8`3``74@"3H!5F``3"!?$`-_L#0]`4,@`C\`P-0
M`S!`.F@%_B!!ZH,50`,$@!VH!PY@$*B"&&`'?$$Z6`/Z8%***@VU0`M+`/K`'
M58`&\(%6$`^<P39H!,O@#=0`;]`+I`$X.`=9(!Z<@$L0"";!+]`'5*`6Y`$N
MP`ED01IH`O7@`DB!.J`#A($***@7YX!<`@1SP`5(!'M!#H4`0#(%CH!6>P`T8
M!G:@#80`<4`'1@`+``7[H!&X`]'3`.1`#N@&>"`<,(%AD`9`0!F(!N8@'(`"
M((`-TH$Q.`:70`.\`D_P!KA`*_T62F`<G(,SH`&BP1IH!`_`!=0`'\`/0$$<
M,`=R`(:N@$9P#9[!#=`'KF"5$IHXT`:.P#C@!X>@$3P"A>H#<@$UP`/[0`J,
***@6U0"XQ!/3BH3^`5P+0NP`:X``]`I^M`&HB!)S`.1(`G2`:$X!]@`3%P#B;!
MPQH%["`6*`-"(`_``0;P-*G`&F"#8&`&$,$MX`!JH!$\@0N@`7;`'4@$(^`1
M$(-P(`0R@!HX&_<`"!`!0/``3@$G0`9$@!3X@@'`!M#!&5@$?0`'O`,'P`!&
MP#CP!#H@&_R"/\``IH`8.`03(!84P3BP#U+!`G@'XB`),(%NH`***@1,8!$:@
M$Q"#0G`/X($O.`(Q0`E4@&@0#WR`'6`%R2899`%1<`Y4@#T@`GD@']``4Y`&
M1,$]F`#D0`***@7U0"%J`P\,`>V`/*`!8T`\B`)T;!^*@%8B#?R`"`L$X&`?$
M`!ZL`!S`#4Z`(<@&^>`.B`%P4`7H6A,P!P?`&C0!=,`.<($.L`'DX(***@SC0
M",K`!E`#Z,`$K()DL`!.P1T0!0R@%S"[*?``O``VR`,=(!@<`D<`!RK``-@&
M6&,><(`K`)"***@0Z`!&3`!>P"3``'K`$C4`4I0!PX`&\P#HS!/T`&78`?Z((]
M4`<&P3XP!A;@#M"#1]`-KH`[@`.%L!M<`'=@!XZ`+P@'[@`73(,>\`\.@#O8
M`]W`'52".N`.1L`0<`=O0`HXRQ]`![[`/]`$&Z`1Y()WX`W*@2^8!N?`%^0"
M:]`/)D$/<`/?8`"***@UI0`P+8/=`%WR`?6()]$`5>P2Y(-NZ`%WR#[3,+]D`?
MN`7[(!A,LTW*#9[`.Y@#7Z`=Q($?P`W,@2FX`[C@`.B#;C`#NH`[.`8;H!O<
***@VNP"RZ!&[@#?\`#U($7<&F?P!'@!K?`!N2"?0`6',`(](>T8!***@1O0!_S!
M.K@`..`!^(-Y\`G^P2O\`/'&'K@"=W`+&L$*V`5G(!8T@:$WM'1!"]`'O:`8
M4`(IL`*D005(`5'@"W@#;%`$(H`B(`5,"P5(`A"0"K"!-K`%8"`%R`$2,"3D
M``)P`&F@""``;7`+[,$#0`"P@`#(`S5`#]+`)A`!KB`<%`,!$`FDR"(`!@T`
M`H"`Y`D"8,!6]`]@(!(<@!&@9]*!/0@%#Z`=Y(!SX`><`3P8!I9@!:R!7N`,
M;L@$4`/FP!O,@#O0<>\!)Y@#SR`'W(,;L`H,P#_8!_%``W0-0V!K$X`_N`$W
MLQS@`W4@#Q1!,/@'/6`1B`%X\`L:@#^X!X.@%<S<FNL/;@&O6`'ST0S(S"(0
M`_#!-W"YVP`<_($-P`_>P"#X!VV`Z!I=U?</;(#5-0680`***@A2`=M4NVTV[
M:[?MQEVX^W;=KMRMN\H@"?C<LFMUL:[6Y;I>%^R*W:;[<\WNU?T'67?K=MVO
M&W:++N'ENX<W\0)>QCMXR:[A];N*-_`VWK%;>/LNXOV[_.`=G`(:$'I/P2?@
M`*%W!7P!UO9S_4$Q``;_P!]D`S_[``*`&R"ZOT`$6-T?L`/N`1(``0#WZ*:#
M2Y`,\,$KR`7TH!K(@53`"5P`%***@AU$J[D@!X,`&T[BMX!:T@!+A:::`/I$$>
M^+K]`!>$C200"8#!$P`$_Z`9'(,_4`)\@2VXO7_@&8@"#+!X_T$?D`;UX`](
M@>E;??_`(J@'OX`6V`%O<"MF`0IX`A;@***@X#+M`'F`$P^`7]`!0@@WM0`/Z!
M`P`$)>`;'`!^L`](`!)0!AJ+%`P"%+`,)@$\&`7]``N8`S\`"]I!/X@#4&`;
M3(,PD`S>`"<P`2Q`@VR"`"`!;H$Q"`'S0`E0`GR0#-H!'8`"\B`!(`)S\`;2
M`3C`!O^`'X1(8!`+O@$O<`+MX`OL`C\P`P#`NEP'(2`2J()O@`D8`17H!R;`
M#H@!DJD/FL$T")Z^8`[,@S`@A@$G'X`!I$`="-OS2P5Z@"WH!41`%?B!)?`!
M6N8X,`#LX`L$@GWP!IY`$5`%9F``-(XEU`QF0`!@!;]@'P"!.?`'5``8Z`?=
M8!-,`P"P#CX``=`$?X`%%()A,`FLY#!(!]B@&TB"#@8)[L$;\`$D`!***@T%0
M5_`&-``'U^`-7%8#\`>ZP!]`!LT@!4`!8'P`/@$WZ`"\8`^<`7B0#NI!,#@#
M==(8@`$^L`X@`#BX!UY@`PR"".`/"$`?Z`+R8`***@R[@`SR`]L(`=L4/E&)8
M8`_BP9?A`^KW'^"#>K`%_,`7F`=_H`<@@UM@`EXN'>@#S>!EU@-*P`XZP3>X
M!DR@`U""6!`!HL`9H`;M@!_\`GQ@`&Y!+/@'O6(?O`).L`R^`1\P![[`&92#
M?:`/5,$)$`3'X!OL`00`#_#!&4@%@V`"#!B'!0[BP=W]R707*-O=H$R4Y4$5
MH%,\H!Q"6GB`!P:`!W@#`Z8!X`%>$``>P0WHR08@*0."I=R4GW)4GLI5^2K'
***@ZRLE#<`4W;*4'D<2&6J;)6QLE;FRFCY*[-EL4R6M[)9Q@>3(!`<@U]0!Q9`
M+-@!_N"2W@(/D)7]@0>``'G``?R#!,"4`X`<D`$)0*-D`@!@!/A!"R`&B.`?
MJ+Y?\`GZJC_P!C2`$>`#GE>9>\$^"`/$X!]$`P00`Q)!!/@#3^`8(()?<`\^
M@&?N!.D`C2$`0"`/6L$U8`,&@!"(@V&0F8<NT]Q[WB`/\H$+$`9FP3O@!3T`
M%_2#/D``GH$_0`?N`!***@T,P"#(!G7H'W2`#<`,\<-3\02<(!D_`!VP`7A`/
M!D$PN``_X`)P`***@0#!Z!&V``GF`7W``$T`?^`#R@!A<`$5P!/S`/C`$XT`?M
M8"I>@P/P!?Q`U>4#$D`0X(-'\`H>@!^``_V@'IR"`S`/PD$PX,0?0'-Y@$$@
M`/S`-D"L_@`%$-U'\`WBP3CX`Q_@%VP`V-LP7D!F[@/\P!_@@-`[#J[!,0@'
M,#K3TFA_@`=4P-&5I1-@1?\`'9`"CC3]?0?C(!***@7$0#W[!(ZB9><_^\H!_
M4`Y([SNX!I]@","#=_`)>,`,X`/N@!O`@W[P!3*`-^`'O2`<G(!?4`-***@1X
M!OM@&F0`8C`/?`$$$`+,X!U\@'X0#N!!-_@"&L`9L(('\#%-@##8`W-F%PR#
M1^`)/(`WZ`>$NA%4Z#3;!@@``M#'=\`0O`'>RPTPP0?P!OF@#!``Q1P*:@`O
MZ`<M@`A8@%_@#S8`-O,'"=`!_`(NP`%\03PX`(C`!/B`?W`&AL$G,`80H!TX
MB#<``HSG(_@#?0`?Y(-7X`#\\QH8!GL@$H2#*1`/PL$"^`-***@.@^`2E`!_C!
M%6@'=Z``W("^9PW2`0\8!WX`'SR#>%`#B$$QAAU:X`***@2^0!;;`,%@`2Z"G
M?%T]8`'*@`5@`14`!L0#=O`#SD$^&`3LX`_$@D'P"V`!"V`$"^`6"(``(`9@
M@`_0`X$`!L2`(&`$9D'***@0'8PT<@CHP`BY`,)`$,&`!N(,8X`7^02%H!!C@
M"80#'-`-S@`W.`/]X`6\@%;@"I(`/S@'\R`.0(("H(JJ03TH`0OG&9"`1N`)
M`H`ON``*0`',`BZP!80!!V@%/:`63((EP`;*@"2H!&3`!U0"5\`&3,$<@`)M
MX`1T`7%P`UY`&9`%'C0'Q()(T`26`#]X&,"O$5``L&@`&$$M$`&\H`+4`A9@
M`FR!-+@"JNX"I()&Q@-DP!U@`T%@&Z`"5+`*],`^6`850`_8`7`0`0Z`'J@$
M3,`5-%\OH`1(0!9H!?DJ%WB!&/`%?$'SM0*R(!-***@T6`1$"!"K@&A6`4U((E
MD`_:@***@X!;R@"E2=$)`4#T`PH`5W8&""`!<@\F(`'>@`\&`7M`(L\`@VP&ZS
M!X'`,GN"$``&R%PB*+1J>`+D@&40#+)!,6@$?$`&1()FL)***@0O(!/!`#8"#
M>M!?P($B$`;?8#?Q`DQ@#!X:$X@`JJ`0F`-A@`***@1=(`>9@'I0#9"`&'``[
MX`7#QQ)L`DS`!V`!"M`![X`[VH%`,`'XP2.``*=@!`0!NFT+9H![R0&?X!D(
M@%Q0#+J!$=@#<>`7=(-CH`V"@1Y(!7Q`#NR!%=``1H$<J`6<P`"***@DH0#-#!
M(1@!P4`-H#0FL%^L@!UX!W+`#ZR`#A`$NK0^(`>M@`B8@$N0#:VN);@"*H`4
MR(-*T`ZX@#E0!:]@#\P!>=`%!L`K4`3=P!KH`RZ``LS!+Y@$3L`2A`%U<`J.
MP00X`_=@&>R``L`+?H`N4`/XH!]<`FE0!/C`$T`%LH`#;(%S<`M<`1E8OGY1
M&@R".K`"FD`RD`2X@$K3`W>0`#3`-,@!*D`-Y`,,H`MP01T@!*R``5"!3$`,
MD(#PSKWZX`LD`U(P`[A&/"@%M:`>`()^\`#^01>H`:""!2@#;L`).D$;H`4=
MX!&4`@4P"JZ!)9`%M>!@&`([L`U<@!FH!'G`"=R"(Q`$V($',`>$@`/8@$=`
M!62!"U`'`F`!J(!+4`\(`19@!*Q`#_0"(_`*G@$W$`9(`!***@5:P`RX`*!`!
MUJ`3#(%B,`B&J3-P`!0@!GZ``2`#W,#`***@570`F0`R4@!71!,T@#]0`56`!$
M0`,@@2S(!^+`&7`#'*`&%D$OL`('@!AT`6>0`PA`(C@"]:`&Q`*;H06^P16H
M!;2@%\0`7V`#JD`AN`/>@`YT`ST0`/"!!>A)1F`:9`(MT`8F>3%(!J_`P;("
M7ML)7,`ZB(\\0`O,'G[@!&I!!V@$'O49_(!?H`@X(`\X!;2$`0`#=Q`)_`$/
MN`4M``***@BU`"UA`+*@%"Z`)@`$R8*O(0!9X`4C@"=2`>8``+OD"J`"YH1N@
M`$%P`K2`/T!U?(`<_()>P`$>P2-`!O\`%^0#?_`,,D`R`,F'@`QD@'%``_1`
M*`@$*ZD7J(%FD`E0P"^H!CE`#*R#*K``6,$2&`%:P`-,`HOR!D3!,Y`&_V`"
M_(`/<`'\P2>8!ZM@#:P"6)!(@P`%P`3YUP(4@%GM`]B!/I`')\`1@`-E\`(^
M`#UH!^7@#1R!6Z`*C@`:@-_[P`^(@#<7!^*`$8@&%"`?I(`PT$'K03;(`^H@
M%?PK1.`"A``-D`&Z@!I@@F!P!"A!"H@`&^`=2`$=T`,8P0/`!IG@$#B`<A`!
MG`LC@`9F8!0,@61@#RPL(G@$J8!CS0%?``*H+3JX!:!`&Q"#"A`*2@`.$`45
M@!$D`RK@!1H``:@`90`#X((]``N.@`7X`,<`%I@!#5`'>BP$>`&.@`MH`5^`
M`@I`)R@`3R`1>`(Q$`88P`L8`W+@!OR`1M`%SL`I>`0\0`D<`5%`2W>`,P@!
M3R`?K0%[T`.4``Q(`%/`">"".4`,O$$$L*5A($***@5^P#JA!'Q@$X&`1)(!I
M@`-@P2?@`QQ``O`#1B`!SH$&D`7;8!:8`7[P#5C`"#`#2R`(C(,0,`-$@1W`
M`!VL"-@#7D`$>H$+>`-=``',@DF0!.Q!+D`"E:`!+`)5<`7H@!9P!S5@++@H
M&M`._,`R2`=68`^***@0O@!MA!*C@$JN#5?H!\@`.001XX`P/@!>R":C`$F``I
M&`"6(`%8`!>]`MB`/)`&48`!/`$.4`?D@#H8`SC@!9@`#1`/O(`S8!_]0`)0
***@W_P#B15W,H"M0`;O(%EP`!F@">(F(_`'L""5'`#U)(L&`?4(!U<@3!`#K+`
M,6@$ZJ`/L`-Z\`***@0#WP!/9@!KB#5?`/:L$[^`.>X`LX`A3\"W@!+Q`#5B,+
M4((LL`:***@3<@!4/``G"!=3`%NN0<J`4<@`E4@$>0!?3()7@!I^`%8(,4<`'^
M``KHVWD`#F`K1V`$CH`$8`;5(!58`5C@`!`!$0@%WV`"@(*Q(@]XP`\P!$8@
M"X@#=L`%T$T=$`'LH`C``%D@`$@`##@"0P05'-84<`F>03N`!2.@$16`+]`#
M+($Z\`9HX!***@CY@"9B`-Q`&[@`+C`)OT`>***@08X![C@`ER`=^$._,`:H`%*
M8`***@4Q`!CP`'8@$^``*P`,F0`T&@"F`!QR@'BB!`M#<,T`***@4_8!M@@W9@
M!7;!$5@$$***@9;`$&8`R$@04H!C=`!/0`JRD&\D`MT`(/0`;4@%O0`=9!#;`'
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
M`6Y`,S`,Q``:0"@@!&`!@D"***@78`JO`/H`.%`++U!@P#T`#C=($X`80`YP`
M-B`(M``0@"T@!Y0#"``D(`I$`GP`/A`',`-L0"@`!L`F6@`30`'<`=@`)A`-
M[`!K$A?P`/@-=@"?80T@`%T`(Q(-P`)E`-14"G``5H`](`O,'^W`M]8`7`(-
M0$#Q`7P"L4`KD``8`8;`)!``T`'J0#^@`2@#0<`#,`_P`&J`#2``/``U@"N0
M`[19@:$C,`GH$2(`-A`&-`.*@!.P"/0`,P`;4`<L`_2C-7``,`!(@""`"5`!
M4$`,@`RL`"X`'&`/:`#X@!L@!`P#(,`.@`***@0.G`"Z`,]`!M`#,@"M`#8H\G
MP`'H=:N`%)`+S&)?@1&0`Q0`4@`&@`T0`X!'+D`"W(X50`Z@*ZT".,`2(`\(
M`VF`G$8"=%?3@""@!F@!*$`E`&E5`EU`#H`/5`$;``U@"!P!1X`QD`XL`/;`
M`B`']`.S0#P@!L"+;44,L`V@`3U``C<,Y#AG0*X3`.0P2``[\`2H`W]``A![
M:0+^P`@0#8@#_(`JL`A$`H/`%4`)M&$XF2\@#N0`Q\`FD`YP`;H``K`(J`!L
M8AS@`C`"GH!K=0-`#WV`*<`-!`)[`"+`#J0!@X`^<`1$#\G`'S`(I0%\0#0`
M(2P`XD`M@`/(`1"`!$`$5`)_0!-`#NP!+0`<L`XT`$W`"R`+&`"TP"A`#[Q)
MT\`0D$O,`W2`/K`0"@`[`#S0`\@`9@`HH`](`=N`/2D%I`-"@`YP"8@#IL`R
M8`#4`_@`!S`#$`#.0`HP!A0!R0`/\`9$`AN`),`),`%C7.4@`60#2L`&R0TP
M`9=`/@`'R`).`#J@[_4`DP`3$`.,`N%`+X`*\`,;@!X@".R*J0!F!@LD`]A`
M*8`,4`#10#ZP`7`#@P`V4`N8`E-`&_`,;`.<`#-@!H@"U`]/V44=<?`-/#`%
M*`/$P!#@!I`#Z(`B@`7X`@I`+I`)T`$LS]^C`R@#SX`(4`>,9\5`%8`-B`*-
M0"4`"81?YTL=<`V,@^.>`X``M`-J0"M@"%`MKP`,,`-$`RH`)=!(;`!SP!'@
M#R@#RL`7@`.H`](+R@`%I`%F@#J@!,P!XD\,@`<0`Z9`"X$#X`/&`#>@")@`
MHT``T`#L`,;`!:`)!`$0FB1@`H0#QD`!L`T4`("`!9`.&`%3C"/P"7P!C8`M
MX`,P`WYA)@">R`$5$"*@!#`#4X`%$&4ACCD`.,`,Q`.-P`V0!C@`M,`PL`KT
M`4_`D$0J!@`8`#9(`#P"K$`,0`KD`.X`^=)7X`)-`!;0`^0`M\`Y@`0@`C+`
M$\`#$`*OP'[P`0@!X6,3``Q,`D)`*>`''`%8`"1P":``AX`?0`<L`5J&%4`(
MQ`&$``Y@`,0`5P`3<*8Y`'8)%[<%6``.@(\7#N0"ZD`HX`,\,=U`,1`-@`/1
M%M+$"NP`*0`3D`8$`\:`%N`-^`+^``/V"R@`MP`<X`-$`@(9,]`+6`*U0!6@
M#5`#E@`2P/Q)`YL`5,(*P`&]0!J@`O0!J<,MD`"R`BD`"G`$=`)4`#G@#]`"
MMH`,X`NX`;R`#)`*/`#U2!OP`00#P``M$#P(`9+`#5`)S`-(0)$8`:`!7X`R
M0`\8`IB`.T0+3`("`!C0"#``.L`U,`N4>]P`"-`"I`.XP`/0"`0"]$`B``L$
M`V#`'(`.(`$.P`'@`C@`C@`=@`3H`RV`.1`"6`(-@!***@TS0``D`)T`[0`)2`
MIV%6C0/(`!V`!D@`<0`70`@,`D=++/`+>`!^0#P@#`P!:@`\>00P`YJ`$;`#
M(`&*`+=@:6@!!\`>4`3\<RKD/&`*B`&N0"S0"/P`X8`L$`)P`W%`(0`$&7_"
M@!/`#N0!+@#_40#0`N!%*"`,@`*10!1`"D`#R``X8`VP`BY`#+`+(`)1@`*P
M&]8`]`S8X@:``[-8"``+L`$Y`#80"Z@!H0`O$`1``[-`,A`/"`#IP#00#FP"
M4@"#!%Q\`BZ`.6`$\&:L@#7@!5@"@(`C``6,`26`+2`*\`%4@!XS![0"(=L2
M(`'``DA`?T4/<`&@P`%`:V(##0`CL#M*`^X`*Z``)`&&`![`P0D#]<`V``],
M`[,+'T`+<``:0!=``&`_.P`?P`+0`+>``0`-B`',P`E0`P`"O``^0#@9`]X`
M(G`,]`"N`"*@`;0#\8`+P`",`QS`/Z`,@`K%0)9T,WF=^H`$8`[\`RY`)R#S
MO0(O0`N`D?P!.8`;L%P]`9G9%W!C/@%.``#P/=X!9L`+``<<`38`$N`/N`!2
MP#I`!6P"B``5D`$P`..%H\8+W``V@!(`"NP`Q8#(XP\``<$`/X`[!0/5I2OP
M!JQ"&L`44`*0`\F`%P`/K`'I@&]9!U``=^4ML`>L`T+`%)`*M``>@"0@#8`!
M+4`9(`]$B(F`$O`#N@"C@#RP"EP[A``PT`&H!L3`$<`!]`/2G25P6($!HQ$M
MD`>4A,8`&H8.S`!F0!78+PP`B<`)0`L<`L)`,[`!7`$***@P`".`!=,`#\`)`
M`:,@,>`!5`!]0!!@!U`#1@`GL`<$`**"'=`/``%```YP"FB,IX`2X`4P4MD`
M(/`$S`!DP",P"4P!*(`:<`J0`3.`+%`.8`%#``S`#^0!VH!1U`P\"NO`($`!
M+(=R@"%0#_0`"``#,`#H`1L`.C`%*`#5@!G0"CP#B]$N4`7P`6&`.X`)E`/V
M`""`!C@#G``0T`/@`4E-)<`#M`'K@`]@#$`!Q<`9L!P4`\S`$H!$E`)4`!/@
M"-`#`<X3H`*%`SL`[G,&``#-0!SP#52?LT`4L`5,;0;`,,`$T`"20"T`!_``
M8L`U$`O4`4]?'E`.^`/'0!9@`PP!2<`.$`78`[X`(B`)B#)W@")0#*`".T`1
MD`](`N3`%O`-9`,90"8`"TP`]DHU`#4*`]M`.'`)I`&(0#V@"Z0`CT`*4`O8
M<`]`%*`$H$>DCSB0`O@`H0`"(%F0`=L``-`#A`//P#1@`'P"1<`CH`UP(GD`
M$?`!K`$A@!H`!A``^T`+,`H8`C/`)I`-\`,+)R20<J$"$4`]L0"0`2I`$5`*
M,!BR7#'0"?`!IP`<`&-(`$/``\`&\``6P!&`!`B.J\!7E`8D`-\`/E4+4`"U
M0#5P"M@!S@(=\`<D`EC``_"^P0'3`"(@!&`#D4#/T09H`!Q`).`%0!0?`"F0
M`'``,,`D8`'D`C``+Q`*)`#/``_POVD!UX`(4`#X`SK`%B`*.`#;P!80"U`!
M<,!/8`+T`]O`*%4!.`/T`"GP"V0#](`R@`Y0`.%`-3`&=``E0A7`#14`JX`M
M4`I<`VM`$Z`*H`*[0`H@"B`"NP`KT,L$`!^>#%'`N0#%`!(@!Q`#<,`;H`;4
M`94`'E`">`&M@#-4JDP`YL`L,`[P>5O`)N`"C`-:@!P`"@P`Z``E<-'1`]D`
M+0#=8`)]P`SPB%D!SL`,@`WH`C``-7`%:`!GP!IG!+0#[``BL`14`I1`"]`$
M1``H'!&0`/P"F(\L<`B0`H@`,^`(Z`&@0(AQ!MP"O\`KH`FL`CR`*G``J`$-
MP"O0!%@`A`!)TPOT`=[`#U`#T``GP"P@![@#A<`J8#NJ`Y$`<T8.1`-!@""P
M3Z$`WPP`L`UT`XU`!#`.@)***@P#U@`-`!A,V9T0BP`)J-`R!/#`-)0"O0!D0`
MIX`T<"'.`E3`#(`&3`%VP`Y@!T"BM$`W(`=X;-T`/*`%*`-N@`2@#'@"9P`N
MD`"$`TC`'P`-R`%70!I`$DT#R4````ST`1$`0P$!N`(&`!1@"\P#D`XO0`8D
M>.M`'\`-(``G0!8`"W0"BT`7(`.@`Y!F*>`L<0-4P,RP"YA(]8`!L`UP``-`
M!%`.9`$7@#BP#V@!M4`V<`+4&_=`.E`,T`$V)C8PRL$`+H`!A0Y$`I/`-[`%
M@`.N0/&P"&`!14#+***@ZP``Y`#<`(A`!%(@:P"Z0!=\`_(`%,`##H#D``R``2
M@`"0['`?C.<=,`O,`=5`"M4/1`+<@`M@`4P#N8`<8`><`I(``)``]`,EG2@@
M`8PA`X`R,`^<`'D`):#?#`&Y0&3T`>P#04`/H``(`7C`+1`$P`/G0#]H`Q0"
M>\`^*038`+_`%#!%I@!?@`5``:P`/,`*8`.$`GYH$.`*\`.2B1W0"JP#L``V
M(&])`II$(B`$&`*G`!*`!\`"3(!:L`F@`&>`#2`#9`-,0!YP!!@"->8E,`[D
MC+W`-U`'/`")@`PP#@P#.(`FP`G$)9V`!#`""`&?0`P``>P!A@`$H`H`AXL`
M/`<&H`,(XS2`#D``ND`L,&***@G`#=`!=`*JP#6@/$4",<`WX`30(@R`,V`#
MH$B&@)$R!`P#`>$S@`I@`^1`XV$`7`+;0"(@#8@#A$`TL`Q<`,I`)M`*,`-W
MP`2`"FP!F4`'0`BD`)]`'D`._``*`#$@#>@:1H`/L`5(`7<`6Y(-K`!SD0,P
M!TP`9$#@>4XN`"D>&B`,B`)G@#I@!B@"+L`68(")`%'`</@.=*RA@*Z6!`0"
M"``9L`-D`O(`"Q`)$`(/S#7P#D`"[T`D(`9T`9V``_`)I`),``)0"=4#7$`<
MX`>4`JU`&N`',`!YP!Z@!%@!P(`*,--)`DN`(Q`*;`/"``50#*``5D`JP`4P
M`_8-,"``N`![``00!Z``/X`+T`48``.`!3!N,@!-`!&P#F`!B4``***@TH`X]B
M*:`%H`*X0!Y`"!@">@`7(`RL`M,",S`'&#V5@!=0!.P#!)`E$`!0`*O`EJD/
MC`")ZCSP#=0`6``IP`!@`[W``*``S`=C`#Z@#0`"!H`(@`H<`:U`++`'+`/^
MP#E@#_`!KV44X`QX`@J`P8H#[`(`6B"@"NP"G@""]0K\`\"`/L`#0`%$&"V0
M#X@!WT`TU0QX`X(`*&`-0`(A`"_`!VP`]D`!X`HL-SM`-&0,^`([@-WX`)0`
MJ4`?D`"X`PA`#L`+V`!Z``.0!?`":,`%\`BH/F!B%Z`"6`!\0!80"0P`K0`-
M4`00`F*`'H`(.`/I0`=``^@`3(`1$`*0`Z7`.1`+T`"@0`^0!C``"4`Q$`,(
MB(C`T2!:\0!E``/P`*0#NH`;\`28`8+`,P!0\@+G)AP`"W0`]D`]``.(+*]`
M-V`&Q`"_0!<`"!@"Y$`F$`UH`89`/+`)F``PP`KP"/`!P0`,8`?8`(#`$'`)
M'`&H7R%`!\0!*\`4(`X``SF`!I`!8`!)`!J`X]4#O8`=,)^N`_+`.E`(D`$J
MVO49#Y`"(T`4P`N,BM"`-5``W`.K`!K@""0#!$`(P`\8`EN+('`$7`#L`!J0
M"%0#]``VH`]H`Z<`+F`";`&/QC)@"#0`GH`>(`E0`D0`&]`%"`!;0#JP#!P!
M>T`_X`+L`SJF!N`#1`-7`!MP"?0!P`#EDP"P`SN`JR0-G`!40"K0#L@`V@`_
MP`D0`L>`/G$'X`%H`+)DQ8`"P(`60`N0`<V`%*``8`/(0!50"8P`X,`O$`I@
M`X?`&_`!K`**`!$P`#P`)X`%$*)N`MX`$8`/_`!P@!<0#SP#KX`JP`O0`.L`
M#=`%+`#HP`)P!O@`$8`2X`ZH`SD`#Z`!O``\P/7Z!;2=71`H4`I$`,K`.]`.
MU`#PP`"0`80`[H`6``4$`A4L+?<'!`*X0!_@"!P`>4`A<`P4`E]`P1`&&`-=
MP`Z`"MP!<8`*P`Z@`K#`->D#B`,'`!LP%YX)3$`!8`4,`<4/`C`#5`+&BR``
M">P#\@"2:`J@`1V`&N`-K!N>`"4@/!!L6<`W8`<4`[<`'[!)\`'70'V6!`@#
M*H`Z,`ND`<V`-``'J#%B`""`#HP#OL`R\``L`-$`"W``1`"T0!5P4=8`"X`V
M(`X$`C\`,J`&B`!-@`#`#MP#V,`I<`-P`<$`#\`/N`":@(T#!E@"3P`%P`[X
M'UX%,Z`%Q`-D`"/`#C@#A<`T<`***@IVV`$$`*K`*DP"M@"8P`PD`_$`!0`FP*
M*A`#%`/_P"OP"5``PD`#L""L`940/O`!P`'HK#_P!K0!?4`;T`W@`__`,T`&
M\`-G`#T0!1P`D4`H`'0-`'_`%M`9C0!W0#.@`.@!(D`\\`,<'?D`(Y`.K`,_
M@&!T#90`=*@.,`SH8[^`KM4VM5,(P">0A84!Z,"%407P0[@`*2`.``%;@`H@
M`-`#H8`)4#V6`X-`$F`#@`$!0!)0`9P`"D`$(`[\`C/`-\`,L`/:P#J`"[0`
MW0P7P`Y,`;*`A\`.N`/L`#MP"SP`?\`L\%9&8;+6(_#R-0.>(*T6"Z`#?0#$
MA0>\`%<`+]`.J`.)***@M@#L!<K@`<L"FIBP]`0!D%!`'+0#$P!`@#8D`_@`HP
M`U>`-?`!A`+>P`1P`PRGSDL(H#%&`2S`(@?KE`/"P#"@4PH"*L`JH`ST`J&`
M!8`";`">@"P0`@H"I\`OP`),`KH`&F`/@`(+@.*9`\P#L8`6D`S``@6`.I``
MW`+K@"N0!B@`A,`4<`Q<`:V$(E`_\@(#`"X@"R@#+$XDP`7D`#>`*L`-G$57
M0"7@#L$#&4`%,P)<`M&`(B"%9`$1`"@0$!$-NP`D```<`"H`P+8.!`/$0`>0
M!.`"HX`HH'Y^`9Q``W!B[@#JP`=P"(0#X\`A,+U%`W.`+!`%>`&\)B3@"+`#
MA(`6L`R,`O$`*%`(J`"!P`O0#9R1M<`?X`,\`M0`K'0"%`%V0"\`!SP`9T`-
M,`[$`#4`.K`!*`%WP(O9`N!/68`!4`$0`>#`#,`-7`-(0$1'#518:X`1D`>,
M0?J`,Q`$;`+/``H@!.`#T@`?\`MH`:Q`)_`*8`)90#D@!]0`A(`KT`VPDJD"
M/;#MA`,<82,P)DD!$\`^X`A<`<!`$"`%I+;4@)+9`E`!-(`XT`F4``R`)L`-
M>``/0`I@#60"6<!CTL'0`$W`)A`)@`.I@!HPD>T#M,!8)PXTN0C`(#`<!`#!
M0#TP#@R)B8`6(`.<+)J`'F#["`+O0#DPO2P"R8`*8`88`[E`/A`)+`'***@P
M#MP#_(`H(`OH`(E9G0L!=`)0`/5V#"P"HX"***@0T`-+`!?`"2`"7@#L`N/P#
MDP`=L`]D`S9`"F`':`(Y31K0Q#8`J0`#H`L4``:`$;`%L+@>`+*"`[P!'D`+
M(`E$`17`NE<*Y&F\`#^@#2P"^`@NH`9,`MT`1U$(S`-5P`Q0!=R9^4`.``1\
M`0_`-7`%F`#1P!V`#S0`*X`98`[T`O@`)&`-H`,)@!U0^+P#TH`<D`C,`_J`
M#9`%[$W8``M0!\P"!``YT`BTFE@`'P"D;@!N'QSP!,@"S@`XX`"``"^`*8`$
MA`*.0```!%@`PT`_,`><`^O.,;`.8`/P`#@`!"P`^(`48`T<`H@`+=`(&`'-
M@"VP`D`#S0`Q8`1L`G*`+#`'?'\BR3J0X[D"=,`M``UXHC4`"2`!(`(;3PQ`
MF$0!_D`CT&Q8`L4`\ZD$G``2@!5`-B"IW$"U(`*X`4<`$Y#0<@%W0".P!K0`
MUJTV,`8H`P]D!V#$A0#[@`>`#Y@!;T`RX`.@@6*`#\#7'@$I``PP",@`>$`6
M(`P(?N)`&,"N,`)2`#L@!.``F%\:PPY86Z9`)R<-"'4]P#0P#C`!0("J8Z'.
M`:F`'?`%1&;40#Z`"7@`&```L(*N`T2KE5(`8`)$0#S0"U`"N<`G<%_,B^)`
M+*``3`)1@"OP`PP`O\`SP```%ZU`P$<`6`$!0"U`!7@"50`I@`*T`G4E#Y`)
M$'HWP&F5`'@"IP`X$`/L`[$`!%`!%`(D`'HF`*@"$X`L$`;4`;0`!4``!`-&
M0#'@``@#12T:`$.-`!-`/-#/F0/%@"00FY8"F<`YL`+8`J>`"T`.3`#(0`Z@
M#+`"$<`;D`.T`N<`+#``R,$F#CRP#%0#2@`8$`M0%6"*MH#JK`/?P!/@!C@"
M:0`KT`7\`H6`+\`&'*_F(S=0`(RZ/\#7D`5T`L_`(O`,%`"9"3/0!^"_"D`B
M``]<`]@``N`#(`"J%C5I#=P"%P`/T`.@`<^`('`&@`!1`"2@`_@!(0`G4`Z(
M`@B`)@`%N`(R0``0`5P#*<`$8`D<`,:`#+"A=$\3``?P#'P#6,`78'7HAAO`
M$.!X&`"F@`2@;:(`+8`!H`"(`=R`*<`*U`/V@"[0!=,`C0#OHP>L`@J`/(`+
MU`(00!/0#E"3BB>EI`^``&C`-+`),"",0!L0!\2"],`40`F```N`!T#-Z`)2
M+2K@#"0`-4`7(`G``O]P$J`*C`*+0`E0#9R5RX`K4`L4`>?;@;L.4`*BISOP
M"1@!,\`M@,FV`U(`"^`+&`-W0!Z0"V``N413M0WH`C[6"C"@6`-8P$>;#J0#
MI0`OD`,$`"F`#=`,%`-<0#G@`DP"ZX`1L`V@@\U`!L`!+``FP#RP!/PL!``_
M(`9\`8E`-*`-@`.BP`#P#S@#`(`U$`;``39``_`-%`.`@!=0#GP#KH`O0`[$
M`?3`;:KR90.+0`#@!/`"9T`9$`!<`ZD`%/"&T`'%`#TP!'``Y8">M`M(`/!`
M-+``X`%?`"-P`7P!SHQZ<`PD`E[`X=$,N%@80"C@!:``44`#T`I0`***@L'0)
M(`.NW1]0`Q0!8T`/8``\`94-(;`&$*-1P`A``Z`F"$`A$`/,`C,`/F`("`!N
MP)3$"[@"P0`S(#]U`8X`!Q`-]`-K`-M&`ZP"&7(NL`?H`J?`B%PBD\@F\A[@
M#M@#^<#0I`,(*P``)!``'`9I@!M`!I0!>(`+(`?0`69`9N`C-***@5K`%L0%
M&T%;0!(0R1K!#!`#/'AY`4J@$K`$,X!+D!'$`#'`#``#T`"$P8^L)>,$B@%0
M(!0X!I!!5"`9,`5;<IEL)I_)AL$>P`7LR&8`#,`%A`%NP!R0!JC)-+`;8'J8
M*5Q`FYPGSP%W0!HP!\P!(``2P!38`64`'9`&C`%AP`[0!R@`7$`;`!2<`6Q`
M8``#,,J.LAQP!L@!DC*C#`<`!60`%T`'X`%.LJ?\CZ@%?^VG'`,`+S&`J"P#
M5,EUVJ>\$M@`.("HK!+``#*`K'P#S``\XJ?\X-T`;K*NC`/HE:*RD_S7ZLD=
M&Q?@]W(!=0`;X`:\`6Y`&;`G<P1Y\AC@)H\!;7*@G`:P`%P`HZP`;`$W<ME&
M!Y0!9(`[A0?``6P`G!P&&,K,,@CP!I@!3/$;<`?@/&V`&Y`&7`%E@!@``@PU
M51`((&J6`?JR'``GSP$JY!B0!H3+Y?)6P`;,`5U`MIPM)P'W\L#L!IP`=``(
M8#![!82ROHP&G,L6LY\,`HP!;T"R'"[?`6_`8P`HPP%E@!Q@!I0!8P`=P`;D
M`2R`W<*L,<Q#S1W@!K`!;T`8<".'RT]`O#POU\***@0#!!!S!K8X!2,`:L`2Z`
MEZ,4J,MBP)+1,8_,<L`;8*:4`6T`"*`QBYKG<LL<!@#*^S((4#`S!8`R4,`O
M+\L1<XUL,?/+4I`9<#++`2USUMPGV\CN\L8,)X/-$C._["C7R#]!***@P!U
M`!S0`OS,]_*YS"^GRW,`FK<4$(1]LJC9,4?,6;-2P`;``>HRNYPUW\;D\J%\
M+J<!S'+1'`38R&.S',`O>\UN\QR0+TL&FO/8#`)`SFR`Y(PN$X0:,]P<!MP!
MG#/5C#@?***@P!F@`HY!R@%6//1O#;'S!LSL_PMV\DN0/"<+2^*+?/6
M?#`WS'/`;5P&>,F2`4'8!KP!2X8;<!"KS35RS-PRA\***@0/-\+_O+9\`94",?
MQ'"RU,PQ$X2B2U`0!F3/U;.[G`*HRP3AS\PXK\NB\^[L+KL`"O/+21`RR_PR
MR"P'D`$M,\S,+$/,&;,;L`98S!BSJ*DQ3\U'\QGP!KP!X3+DW#2'`4%ST;PH
MUG],,02]!MS-Y[.<W`:0R_PRCAP&;-!E6^.L-6L%7#,!'3%[SE`SH/P\A\Y1
MZ1U0,IL!R3(;T#)7?Q+S&R!JJLN$LAP@!PS,WS/M;#NC`?4IV_PNP\GA\AA0
M.L,!7<%7<`(`RH%ST\P&L`%4P!L`!;P!=+,.``(<8%/`@U<T.P$VM+Y<!7W+
MX7*ZG`4(`2^`$T`%J,M!@11P,<,!<P`#S3*[S/?R_QPQFRD?M-S,+S.6&3.@
MC"_/`0]SQ*P_$\TI0+:L*7/*P;),("JC!<#+(0V\],IXP*IL2+O*-D`B_2G/
MRHST#'`#/-+,`U\@*M,`OS(CC1(8TF:`M,P%4,LA0;;L/_B`'/.-+#4#RF(S
M_GQ%W\XA,QVP/IL!]FD94#0+RF]T&D`'+-&C,***@0!]0!A_(`?3$/S?1SUL8%
M;,K[<["<$AS2I+(B+;*IRJRRJAQ)Q\J3M$Q0*T_2MW*NG$GSRIOTKSP#*-.6
M=+0\+5?+IC0K'38#RLSRRMQ+5\D@`'<R.IL>$#0:T`8P+71`_ZPO+]`#=-9L
M!FC.X/)M>T]+S6Z`$5T'J-*Z=-&<!#C.:,`!W36#`'!`T_PTMP$M,P=]-<O-
M88!]V@+,TW"T_]Q'Q]%Y].A\!E34;D`QO3#WSAYS!5TQTP'U7K,<+AO0K+2=
MS*R=SV,T"-`$U,CI%A[P07/0,W0=<$+7R&,`OYPUX\^`,L,<!K`!FK/-G`=D
MSTWSMVQ2D\V#,***@.3_/A'*XO$_[TS[!+](G>\[!<]&L`]2"]7,6T#&[S01A
M3^!3'\VI-+],`P<%28'?G$.#`'G`5\TZ`\_U'[O<5M<!XO+OW$!CSIHS&>`G
MTP$[M!2D5.O2+;,NG3UWS&Q`N+P5@`#R<D_]3WO/%7/(G`9XSV[`4+TQY]6Z
M]!***@4BL`0X!24#+/`=BRMMP"P#YY=?VL``17;S(\'33/TW9R8(`77`59@<&<
M1(,%8H$>H`#T`8LRFFQ;W]:X=6ZM6^_6O'5O[5O_UL!U<"U<#]?$=7%M7!_7
MR'5RK5POU\QU<^U</]?0=70M74_7U'5U;5U?U]AU=JU=;]?<=7?M77_7X'5X
*+5Z/U^1U>8T0`.U<
`
end
s***@easynet.fr
1998-05-28 13:43:25 UTC
Permalink
[ Ooops, apparently I sent in in NeXTmail. Here again in mime. Sorry, folks.
UI design tip of the day: avoid three states buttons :-)
]

Hi,

[deleted explanation of how OmniWeb does the translucid labels]

I didn't believe that this could works perfectly, so I downloaded OmniWeb 3
to check. The obvious problem is that, as the labels are not in the buffer,
the window cannot be maintained up-to date on screen without the help of the
application. And there are cases where the application is not aware that the
server flushes the window content...
So, labels disapear when moving the window, or when dragging an icon (or a
window) on top of the window.

In one word, I don't think that this is the good approach. So I hacked a
simple example of labels that seems more powerfull, by both overriding
flushWindow and clipView's scrollToPoint: (OS42. Not tested on YB/NT or
Rhapsody, so don't blame me if this doesn't work.)

All code is in one (short) file. Hey, it's a quick hack.

As it is only a 13 Kb attachment, I took the freedom to include it. If this
is a problem, please mail-me so I don't do this again.

I could have turned this into a YB MiniExample, but since the ones I already
wrote have been removed from stepwise... :-(

You can use the code for whatever you want. If you extend and redistribute
it, it would be nice to give original credits.

Cheers,

--fred

[An attachment was originally included here]

Robert A. Decker
1998-05-27 06:12:02 UTC
Permalink
Is there a way to define a class in Obj-C that can't be instantiated, but
only subclassed?


rob
--
<mailto: "Robert A. Decker" ***@umich.edu>
<http://hmrl.cancer.med.umich.edu/Rob/index.ssi>
Programmer Analyst - Health Media Research Lab
University of Michigan Comprehensive Cancer Center

"Get A Life" quote #2: "Has anyone seen Chris? I have some last minute
instructions for the scene where he wrestles the evil monkey." -Get a Life
Richard Frith-Macdonald
1998-05-27 07:14:21 UTC
Permalink
Post by Robert A. Decker
Is there a way to define a class in Obj-C that can't be instantiated, but
only subclassed?
There's no language support for it - but you could get a runtime check by
implementing +allocWithZone: to raise an exception.

Af course, your subclasses would then all need to implement +allocWithZone:
themselves :-(
Donald A. Yacktman
1998-05-27 07:25:30 UTC
Permalink
Post by Richard Frith-Macdonald
Post by Robert A. Decker
Is there a way to define a class in Obj-C that can't be instantiated, but
only subclassed?
There's no language support for it - but you could get a runtime check by
implementing +allocWithZone: to raise an exception.
themselves :-(
No you don't--just use the runtime! Here's the pseudo-code:


if ([self class] == [<the_abstract_class> class]) {
raise an exception
} else {
call super
}


Subclasses will fail the test because they aren't the exact same abstract
class. They're a subclass. So they'll be instantiated. There's probably an
easy way you could abstract this mechanism so that you don't have to write
ad hoc code for every abstract class you wish to create, but I'm too tired
right now to think of how that would look. So when you figure it out, feel
free to pass it on to the MiscKit and we'll pass it on to the world. :-)

--
Later,

-Don Yacktman
***@misckit.com
<a href="http://www.misckit.com/don.html">My home page</a>
Axel Terfloth
1998-05-27 07:53:25 UTC
Permalink
Post by Richard Frith-Macdonald
Post by Robert A. Decker
Is there a way to define a class in Obj-C that can't be instantiated, but
only subclassed?
There's no language support for it - but you could get a runtime check by
implementing +allocWithZone: to raise an exception.
themselves :-(
Thats not necessary... :-)

@implementation AbstractClass

+ (id) allocWithZone:(NSZone *)zone
{
if(self == [AbstractClass class])
{
[NSException raise.......];
}

return [super allocWithZone:zone];
}

........

@end


- Axel Terfloth

</nofill>
Bill Bumgarner
1998-05-27 12:51:27 UTC
Permalink
Generally, using == to compare objects is not recommended... in this case,
it'll work fine, but there is a more "objective-c friendly" way:

if ([self isMemberOfClass: [<the_abstract_class> class]] == YES) {
... raise ...
} else {
[super ...];
}

Ooops... nope, i'm totally wrong:

#import <Foundation/Foundation.h>

@interface Foo:NSObject
@end
@implementation Foo
+ test {
NSLog(@"Self %@", self);
NSLog(@"Class: %@", [Foo class]);
if ([self isMemberOfClass: [Foo class]])
NSLog(@"Is Member");
else
NSLog(@"Is not Member");
}
@end

void main() {
[Foo test];
}

Which outputs:

$ ./a.out
May 27 08:43:51 a.out[24843] Self Foo
May 27 08:43:51 a.out[24843] Class: Foo
May 27 08:43:51 a.out[24843] Is not Member

Why?

Subtlety time... -isMemberOfClass: is an instance method in the NSObject
protocol. Class objects are really instances of the meta class class.
So, invoking -isMemberOfClass: on a class object is really testing to see
if the meta class is a member of the given class.

Example-- I added the following to the end of the above code:

if ([self isMemberOfClass: objc_getMetaClass("Foo")])
NSLog(@"Is Member of Meta (%@)", objc_getMetaClass("Foo"));
else
NSLog(@"Is not Member of Meta");

Which outputs:

May 27 08:52:16 a.out[24937] Self Foo
May 27 08:52:16 a.out[24937] Class: Foo
May 27 08:52:16 a.out[24937] Is not Member
May 27 08:52:16 a.out[24937] Is Member of Meta (Foo)

So, in reality, Don's way is about as clean as it gets... or you can
diddle Meta classes. Or you can move the test to the designated
initializer and do the -isMemberOfClass: test there.

b.bum
Post by Donald A. Yacktman
Post by Richard Frith-Macdonald
Post by Robert A. Decker
Is there a way to define a class in Obj-C that can't be instantiated, but
only subclassed?
There's no language support for it - but you could get a runtime check by
implementing +allocWithZone: to raise an exception.
themselves :-(
if ([self class] == [<the_abstract_class> class]) {
raise an exception
} else {
call super
}
Subclasses will fail the test because they aren't the exact same abstract
class. They're a subclass. So they'll be instantiated. There's probably an
easy way you could abstract this mechanism so that you don't have to write
ad hoc code for every abstract class you wish to create, but I'm too tired
right now to think of how that would look. So when you figure it out, feel
free to pass it on to the MiscKit and we'll pass it on to the world. :-)
--
Later,
-Don Yacktman
<a href="http://www.misckit.com/don.html">My home page</a>
Loading...