Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
$B;H$o$J$$$HB;$r$9$k(BModel-View-Controller
[go: Go Back, main page]

$B;H$o$J$$$HB;$r$9$k(BModel-View-Controller

----- Smalltalk$B$N@_7W;X?K(B -----

$BIY;N%<%m%C%/%9>pJs%7%9%F%`3t<02q


1$B!!$O$8$a$K(B

$B!!(BSmalltalk$B$N(BOJT$B$rDL$7$F!"!V(BSmalltalk$B$X$N%9%`!<%:$JF3F~!W$r9T$&$?$a$K!"$$$/$D$+$NN10UE@$,$"$k$3$H$r;d$O3X$S$^$7$?!#(B

$B-!(B $B%G!<%?$H%"%k%4%j%:%`$,%Q%C%/$5$l$?%*%V%8%'%/%H(B($B>pJs1#JC(B)

$B-"(B $B%*%V%8%'%/%H4V%3%K%e%K%1!<%7%g%s(B($B%a%C%;!<%8EAAw(B)

$B-#(B $B%/%i%9$H%$%s%9%?%s%94X78(B($B%a%?%/%i%9$H%/%i%94X78(B)

$B-$(B $B%/%i%93,AX9=B$(B($B%$%s%X%j%?%s%95!G=(B)

$B-%(B $B%"%k%4%j%:%`$r%G!<%?$H$7$F07$&$3$H(B(closure/continuation)

$B-&(B Model-View-Controller(MVC)

$B-'(B $B0MB8@-(B(change&update)

$B-((B $B%W%i%,%V%k$N9M$(J}(B(pluggableMVC)

$B!!-!!A-$$^$G$O!"%*%V%8%'%/%H;X8~%W%m%0%i%_%s%0$H$$$&7A$GB?$/$N2r@b=q$,

$B!!-%$O!"(BLisp$B$d(BProlog$B$rCN$C$F$*$i$l$kJ}$K$O4JC1$K$J$8$a$^$9!#%"%k%4%j%:%`$r%G!<%?$H$7$F07$&$?$a$K!"(BSmalltalk$B$G$O%V%m%C%/$r;H$$$^$9!#(BLisp$B$G$O%/%m!<%8%c$H8F$P$l$F$$$k$b$N$KAjEv$7$^$9!#(BProlog$B$G$O%/%m!<%8%c$G=hM}$9$k$N$,EvA3$K$J$C$F$$$^$9!#(BC$B$d(BPascal$B$=$7$F(BMesa$B$J$I$K$b=hM}$X$N%(%s%H%j(B($B4X?t$X$N%]%$%s%?(B)$B$r%G!<%?$H$7$F07$&$3$H$,$G$-$^$9$,!"$3$N=hM}$X$N%(%s%H%j(B($B4X?t$X$N%]%$%s%?(B)$B$KJ,4t$7$F!"uBV(B)$B$rJ];}$9$k$3$H$,$G$-$^$;$s!#$=$N$?$a!"%"%k%4%j%:%`$r%G!<%?$H$7$F07$&$H$$$&E;@$G$OIT=l9g$K$OCm0U$,I,MW$JE@$G$9!#(B

$B!!-&!A-($O!"(BSmalltalk$B$KFHFC$J$b$N$G!V(BModel-View-Controller(MVC)$B!W$H8F$P$l$k$b$N$K4X78$7$^$9!#$3$N(BMVC$B$O(BSmalltalk$B%7%9%F%`A4BN$r4S$$$F$$$k@_7W;X?K$G$"$j!"%W%m%0%i%`:n@.$N%Q%i%@%$%`$G$9!#$H$3$m$,!"$3$N(BMVC$B$r>\:Y$K2r@b$7$?=q@R$OA4$/$"$j$^$;$s!#!V%V%k!<%V%C%/!W$d!V%*%l%s%8%V%C%/!W$K$b=q$+$l$F$$$^$;$s!#Mj$k$O(BSmalltalk$B%=!<%9%W%m%0%i%`$H$$$&$N$,8=>u$G$9!#(B

$B!!$3$N;fLL$rR2p$7$J$,$i!"(BSmalltalk$B$,L\;X$7$?(BMVC$B$K$D$$$F=q$$$F$_$?$$$H;W$$$^$9!#(B

2$B!!(BModel-View-Controller$B$N35MW(B

$B!!(BSmalltalk$B$G$O!"J#?t$N%&%#%s%I%&$,=8$^$C$F$R$H$D$N7O$r@.$9$h$&$J%W%m%0%i%`$r3+H/$9$k$?$a$K!"(BModel-View-Controller(MVC)$B$H8F$P$l$k@_7W;X?K$r@_Dj$7$F$$$^$9!#L5M}$K=>$&I;,MW$O$"$j$^$;$s$,!"(BSmalltalk$B$K$*$$$F$O!"$3$N@_7W;X?K$rMxMQ$7$J$$$HB;$r$7$^$9!#(B

$B!!%b%G%k$O!"2hLL$KI=<($7$?$$%*%V%8%'%/%H$=$N$b$N$G$9!#$H$3$m$,!"<+J,$O!V$$$D!"$I$3$K!"$I$N0L$NBg$-$5$G!"$I$N$h$&$KI=<($5$l$k$N$+!W$H$$$&>pJs$O;}$C$F$$$^$;$s!#$D$^$j!"%G!<%?4IM}$@$1$r@lLg$K9T$&$N$,%b%G%k$N;E;v$G$9!#(B

$B!!%S%e!<$O!"%b%G%k$r!V$$$D!"$I$3$K!"$I$N0L$NBg$-$5$G!"$I$N$h$&$KI=<($5$l$k$N$+!W$rCN$C$F$$$^$9!#$D$^$j!"I=<((B($B=PNO(B)$B$^$o$j$r0l

$B!!%3%s%H%m!<%i$O!"%b%G%k$d%S%e!<$rA`:n$9$k$?$a$N%f!<%6$+$i$NMW5a$r

$B!!%7%9%F%`$NCf$K$OMM!9$J(BMVC$B$,$"$j$^$9!#$=$7$F!"$3$l$i$NMM!9$J(BMVC$B$N1"$K$O!"M}A[$H$9$k(BMVC$B$X$N6lO+$NNr;K$,$"$j$^$9!#(BSmalltalk$B%7%9%F%`$NCf$NMM!9$J(BMVC$B$rJ,N`$9$k$H(B3$B$D$N%?%$%W$KBgJL$G$-$^$9!#(B

$B-!(B $B%3%s%H%m!<%i$,4hD%$k(BMVC

$B-"(B $B0MB8@-$rMxMQ$9$k(BMVC

$B-#(B $B%W%i%,%V%k$rMxMQ$9$k(BMVC

$B!V(B100$B$N@bL@$h$j!"(B1$B$D$N%W%m%0%i%`!#!W$N$?$H$($,$"$j$^$9$N$G!"$3$N(B3$B$D$N%?%$%W$N(BMVC$B$rM}2r$9$k$?$a$K%W%m%0%i%`$r:n$j$^$7$g$&!#$"$k%&%#%s%I%&$NCf1{$K%_%C%-!<%^%&%9$N3($rI=<($7!"%^%&%9$N2+%\%?%s$G3HBg(B(magnify)$B$H=L>.(B(shrink)$B$N%]%C%W%"%C%W%a%K%e!<$rA*Br$9$k$3$H$G!"%_%C%-!<%^%&%9$N3($r%&%#%s%I%&Fb;$G3HBg!&=L>.$9$k$H$$$&4JC1$J%W%m%0%i%`$r9M$($^$9!#(B

3$B!!%3%s%H%m!<%i$,4hD%$k(BMVC

(Program No.1)

$B!!$3$N(BMVC$B$O!"%b%G%k$,C1=c$=$N$b$N$G!"%S%e!<$OI=<($9$k$@$1!"$J$s$G$b$+$s$G$b%3%s%H%m!<%i$,$R$H$j$G4hD%$k$H$$$&(BMVC$B$G$9!#%]%C%W%"%C%W%a%K%e!<$r4IM}$9$k$b$N%3%s%H%m!<%i!"$=$7$F!"$=$N%]%C%W%"%C%W%a%K%e!

$B!!$3$N%?%$%W$N(BMVC$B$O!"(BSmalltalk$B%7%9%F%`$N=i4|$K:n$i$l$?$H;W$o$l$k%D!<%k72$K$_$i$l$^$9!#$^$@!"(BMVC$B$H$$$&9M$(J}$N

$B!!(BProgramNo.1$B$r;2>H$7$F2<$5$$!#%b%G%k$G$"$k(BMickey1$B$N(Bform$B$H$$$&%$%s%9%?%s%9JQ?t$O!"30It$+$i;2>H$bBeF~$b5v$5$l$k%$%s%?%U%'!<%9$K$J$C$F$$$^$9!#$3$l$G$O>pJs1#JC$N%*%V%8%'%/%H$N35G0$,5c$$$F$7$^$$$^$9!#$^$?!"%S%e!<$O%b%G%k$K?<$/4X78$7$F$$$^$9!#I=<($9$k%G!<%?$r$b$i$&:]$K!"%b%G%k$K(Bform$B$H$$$&%a%C%;!<%8$r8GDjE*$KAw$C$F$$$k$+$i$G$9!#(B

$B!!.$@$1$G$J$/!"2sE>$b2C$($?$$$H;W$C$?$i!"$$$C$?$$%W%m%0%i%`$N$I$3$rJQ99$9$k$G$7$g$&$+!#$*$=$i$/!"2+%\%?%s%a%K%e!<$r@_Dj$7$F$$$k(BMickey1Controller$B$N%/%i%9%a%=%C%I$N(Binitialize$B!"$=$7$F!"%$%s%9%?%s%9%a%=%C%I$N(Bmenu messages$B$H$$$&%W%m%H%3%k%+%F%4%j$NCf$K(Brotate$B$rDI2C$9$k$G$7$g$&!#$$$:$l$K$7$F$b%3%s%H%m!<%i$K=$@5$r2C$($^$9!#K\Mh$O%G!<%?4IM}$r$*$3$J$&%b%G%k$K4X$9$k$3$H$J$N$K!"%3%s%H%m!<%i$P$+$j$r=$@5$9$k$3$H$K$J$j$^$9!#(B

$B!!7kO@$H$7$F$$$($k$N$O!"(BMVC$B$H$7$F$O:GDc$N(BMVC$B$G$"$k$H$$$&$3$H$G$9!#$=$7$F!"(BSmalltalk$B%7%9%F%`$NCf$K$O!"$3$N%?%$%W$G%W%m%0%i%`$7$F$$$kItJ,$,0J30$KB?$$$H$$$&$3$H$G$9!#(B

4$B!!0MB8@-$rMxMQ$9$k(BMVC

(ProgramNo.2)

$B!!$3$N(BMVC$B$O!"!V%3%s%H%m!<%i$,4hD%$k(BMVC$B!W$NH?>J$H?7$7$$%$%s%?%U%'!<%9$r3+H/$9$k$?$a$K@8$^$l$?$H9M$($i$l$^$9!#?7$7$$%$%s%?%U%'!<%9$H$O!"%9%$%C%A$d%Q%M%k$J$I$G$9!#$3$l$i$O!"$R$H$D$N%b%G%k$rJ#?t$N%S%e!<$+$i4Q$F$$$k7ABV$G!"%b%G%k$NJQ2=$r!"$=$l$r4Q$F$$$k%S%e!<$K$9$Y$FO"Mm$7$J$1$l$P$J$i$J$$$H$$$&Fq;$7$5$,$"$j$^$9!#$7$?$,$C$F!"%3%s%H%m!<%i$,$R$H$j$G4hD%$C$F$$$F$b8BEY$,$"$k$o$1$G$9!#(B

$B!!$3$NLdBj$r2r7h$9$k$?$a$K9M$(=P$5$l$?$N$,!V0MB8@-!W$H8F$P$l$k$b$N$G$9!#%b%G%k$,JQ2=$9$k$H!"%b%G%k$O<+J,$K!V(Bchanged:$B!W$N%a%C%;!<%8$rAw$j!"$=$N%b%G%k$r4Q$F$$$k$9$Y$F$N%S%e!<$K!V(Bupdate:$B!W$H$$$&%a%C%;!<%8$,Aw?.$5$l$k!V%V%m!<%I%-%c%9%F%#%s%05!9=!W$G$9!#$3$l$O!"%b%G%k$r%-!<$H$7$F!"$=$l$r4Q$F$$$k%S%e!<$N=8$^$j$,CM$H$J$k$h$&$J!V0MB8@-$N<-=q!W$H$$$&$b$N$r2p$7$F

$B!!(BProgramNo.2$B$r;2>H$7$F2<$5$$!#=$@52U=j$O%\!<%k%IBN$G=q$$$F$"$j$^$9!#%b%G%k$G$"$k(BMickey2$B$O!"(Bform$B$H$$$&%$%s%9%?%s%9JQ?t$K4X$7$F!"30It$K$O;2>H$N$_$r5v$9%$%s%?%U%'!<%9$K$J$C$F$$$^$9!#$=$7$F!"<+J,<+?H$G3HBg(B/$B=L>.(B(magnify/shrink)$B$NG=NO$r;}$C$F$$$^$9!#$3$l$G!"%b%G%k%*%V%8%'%/%H$H$7$F$N>pJs1#JC$,40A4$K$J$j$^$7$?!#(B

$B!!(BMickey2Controller$B$O!"%b%G%k$KBP$7$F3HBg!&=L>.$r$9$k$-$C$+$1$@$1$rM?$($k$h$&$K$J$C$F$$$^$9!#$@$$$VH~$7$/$J$j$^$7$?!#%b%G%k$O3HBg!&=L>.$9$k$H<+J,$,JQ2=$7$?$N$G!"<+J,$rI=<($7$F$$$k%S%e!<$K:FI=<($r$5$;$k$?$a!"0MB8@-$N<-=q(B($B<+J,(B)$B$K8~$+$C$F!V(Bchanged:$B!W$N%a%C%;!<%8$rEAAw$7$^$9!#(BMickey2View$B$G$O!"%b%G%k$NJQ99$r0MB8@-$+$i$N%V%m!<%I%-%c%9%F%#%s%0%a%C%;!<%8!V(Bupdate:$B!W$K$h$C$FBP=h$7$^$9!#$=$3$K$O%S%e!<<+?H$r=q$-D>$9$h$&$K=q$$$F$"$j$^$9!#(B

$B!!$H$3$m$,!"$3$N%W%m%0%i%`$K$bLdBj$,$"$j$^$9!#!V(Bchange&update$B!W$N0MB8@-$,M}2r$7$K$/$$$3$H!#$=$7$F!"K\Mh%b%G%k$,;}$C$F$$$J$1$l$P$J$i$J$$%]%C%W%"%C%W%a%K%e!<$,$^$@%3%s%H%m!<%iB&$K$"$k$3$H$G$9!#$3$3$G!"2sE>$N5!G=$rF~$l$?$$$H;W$&$H!"%b%G%k$X$N2sE>5!G=$NDI2C$H%3%s%H%m!<%i$N%]%C%W%"%C%W%a%K%e!<@_Dj$NJQ99$r$d$i$M$P$$$1$J$$$+$i$G$9!#(B

$B!!(BSmalltalk$B%7%9%F%`$N$[$H$s$I$N%D!<%k72$O!"$3$N%?%$%W$N(BMVC$B$G

5$B!!%W%i%,%V%k$rMxMQ$9$k(BMVC

(Program No.3)

$B!!:#$N$H$3$m!"(BSmalltalk$B%7%9%F%`$NCf$G0lHVH~$7$$(BMVC$B$G$9!#%S%e!<$H%3%s%H%m!<%i$N%Z%"(B(VC)$B$O!"%b%G%k$K4X78$J$$7ABV$K$J$C$F$$$^$9!#$I$s$J%b%G%k$G$b!"$3$N(BVC$B$K:9$79~$s$G!"(BMVC$B$K$9$k$@$1$GF0$/$h$&$K$J$C$F$$$^$9!#$3$N:9$79~$s$G;H$&$H$$$&$3$H$G!V(Bpluggable($B%W%i%,%V%k(B)$B!W$NL>A0$,$"$j$^$9!#EE8;%W%i%0(B(VC)$B$K!"%3%s%;%s%H(B(M)$B$r:9$79~$`$h$&$K;H$($k$+$i$G$9!#(B

$B!!(BProgramNo.3$B$r;2>H$7$F2<$5$$!#%b%G%k$,%]%C%W%"%C%W%a%K%e!<$r(BActionMenu$B$N%$%s%9%?%s%9$H$7$FJ];}$7$F$$$^$9!#$3$l$G2sE>$N5!G=$r2C$($k:]$b%b%G%k$@$1$rD>$;$P$h$$$h$&$K$J$j$^$7$?!#%W%m%0%i%`$N%a%s%F%J%s%9@-$,8~>e$7$F$$$^$9!#(B

$B!!%^%&%9$N2+%\%?%s$,2!$5$l$k$H!"%3%s%H%m!<%i$O%S%e!<$KI=<($7$J$1$l$P$J$i$J$$%a%K%e!<$r$?$:$M$^$9!#%S%e!<$O%b%G%k$K!V(Bperform: menuSelector$B!W$rAw?.$7$F!"%b%G%k$,J];}$9$k%a%K%e!<$r%3%s%H%m!<%i$KJV$7$^$9!#$=$7$F!"%3%s%H%m!<%i$O%a%K%e!<$rA*Br$5$;!"BP1~$9$k%a%C%;!<%8(B($B3HBg(B/$B=L>.(B)$B$r%b%G%k$KDLCN$7$^$9!#$3$l$i$O!V(ByellowButtonActivity$B!W$G9T$o$l$F$$$^$9!#(B

$B!!$^$?!"%S%e!<$OI=<($9$k%G!<%?$r%b%G%k$KBP$7$F!V(Bperform: aspectSelector$B!W$K$h$C$FF@$h$&$H$7$^$9!#(BProgramNo.1/No.2$B$G$O!"(Bform$B$H$$$&8GDj%a%C%;!<%8$rAw$C$F$$$^$7$?$,!"$=$l$r%b%G%k$,<+M3$K@_Dj$G$-$k$h$&$K!"%a%C%;!<%8%;%l%/%?$N7A$GJ];}$7$F$*$/$o$1$G$9!#(B

$B!!(BaspectSelector,menuSelector$B$O!"(BMickey3View$B$r%S%e!<$H$7$F(BMVC$B$r@8@.$9$k:]$K;XDj$9$k7A<0$K$J$C$F$$$^$9!#$3$N%W%m%0%i%`$G$O%W%i%0%$%s%a%C%;!<%8$H$7$F!V(Bon:aspect:menu:$B!W$r;H$$$^$7$?!#F~=PNO$r9T$&%S%e!<$H%3%s%H%m!<%i$N%Z%"$O!"%b%G%k$+$i40A4$KJ,N%$5$l$F$$$^$9!#$3$N%S%e!<$H%3%s%H%m!<%i$N%Z%"$O!"%W%i%0%$%s$5$l$k%b%G%k$r%&%#%s%I%&$NCf1{$KI=<($7!"%b%G%k$K$h$C$F;XDj$5$l$?F0:n$r$7$^$9!#(B

$B!!(BSmalltalk$B%7%9%F%`$NKv4|$K:n$i$l$?$H;W$o$l$k%D!<%k72(B($B%V%i%&%6(B/$B%$%s%9%Z%/%?(B)$B$O!"$3$N%W%i%,%V%k$rMxMQ$9$k(BMVC$B$rB?MQ$7$F$$$^$9!#(B

6.$B:G8e$K(B

$B!!$3$3$K>R2p$7$^$7$?%W%m%0%i%`$O!"h$j1[$($J$1$l$P$J$i$J$$JI$,!"$3$N(BMVC$B$G$"$k$H;d$O9M$($F$$$^$9!#(BSmalltalk$B$O!"$3$l$+$i$b2~NI$5$l$F$$$/$H;W$$$^$9$,!"$3$3$K=R$Y$^$7$?$3$H$,3'$5$s$N$*Lr$KN)$F$P9,$$$G$9!#$*AFKv$G$7$?!#(B

($B0J9_$K%W%m%0%i%`$r:\$;$F$*$-$^$9(B) VW2.5J$BBP1~%=!<%9$O$3$A$i(B

$B%W%m%0%i%`(B1

$B!I(BProgram No.1 (M: Mickey1 V: Mickey1View C: Mickey1Controller)$B!I(B


Object subclass: #Mickey1
instanceVariableNames: 'form '
classVariableNames: ''
poolDictionaries: ''
category: 'MVC-Study'

Mickey1 methodsFor: 'accessing'

form
$B",(Bform

form: aForm
form $B"+(B aForm

Mickey1 methodsFor: 'private'

setForm
self form: (Form readFrom: 'Mickey.form')

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

Mickey1 class methodsFor: 'instance creation'

new
$B",(Bsuper new setForm

Mickey1 class methodsFor: 'examples'

example
"Mickey1 example"
| topView subView |
topView $B"+(B StandardSystemView new.
topView borderWidth: 1.
subView $B"+(B Mickey1View new.
subView model: Mickey1 new.
subView borderWidth: 1.
subView insideColor: Form white.
topView addSubView: subView.
topView controller open


View subclass: #Mickey1View
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'MVC-Study'

Mickey1View methodsFor: 'controller access'

defaultControllerClass
$B",(BMickey1Controller

Mickey1View methodsFor: 'displaying'

displayView
| mickeyForm origin offset |
mickeyForm $B"+(B model form.
origin $B"+(B self insetDisplayBox origin.
offset $B"+(B self insetDisplayBox extent - mickeyForm boundingBox extent // 2.
mickeyForm
displayOn: Display
at: origin + offset
clippingBox: self insetDisplayBox

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


MouseMenuController subclass: #Mickey1Controller
instanceVariableNames: ''
classVariableNames: 'MickeyYellowButtonMenu MickeyYellowButtonMessages '
poolDictionaries: ''
category: 'MVC-Study'

Mickey1Controller methodsFor: 'initialize-release'

initialize
super initialize.
self initializeYellowButtonMenu

initializeYellowButtonMenu
self yellowButtonMenu: MickeyYellowButtonMenu
yellowButtonMessages: MickeyYellowButtonMessages

Mickey1Controller methodsFor: 'control defaults'

isControlActive
$B",(Bsensor yellowButtonPressed

Mickey1Controller methodsFor: 'menu messages'

magnify
model form: (model form magnifyBy: 2 @ 2).
view display

shrink
model form: (model form shrinkBy: 2 @ 2).
view display

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

!Mickey1Controller class methodsFor: 'class initialization'!

initialize
"Mickey1Controller initialize"
| menuLabel |
menuLabel $B"+(B 'magnify\shrink' withCRs.
MickeyYellowButtonMenu $B"+(B PopUpMenu labels: menuLabel.
MickeyYellowButtonMessages $B"+(B #(magnify shrink )


$B%W%m%0%i%`(B2

$B!I(BProgram No.2 (M: Mickey2 V: Mickey2View C: Mickey2Controller)$B!I(B


Object subclass: #Mickey2
instanceVariableNames: 'form '
classVariableNames: ''
poolDictionaries: ''
category: 'MVC-Study'

Mickey2 methodsFor: 'accessing'

form
$B",(Bform

Mickey2 methodsFor: 'manipulation'

magnify
form $B"+(B self form magnifyBy: 2 @ 2.
self changed: #magnify!

shrink
form $B"+(B self form shrinkBy: 2 @ 2.
self changed: #shrink

Mickey2 methodsFor: 'private'

setForm
form $B"+(B Form readFrom: 'Mickey.form'

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

Mickey2 class methodsFor: 'instance creation'

new
$B",(Bsuper new setForm

Mickey2 class methodsFor: 'examples'

example
"Mickey2 example"
| topView subView |
topView $B"+(B StandardSystemView new.
topView borderWidth: 1.
subView $B"+(B Mickey2View new.
subView model: Mickey2 new.
subView borderWidth: 1.
subView insideColor: Form white.
topView addSubView: subView.
topView controller open


View subclass: #Mickey2View
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'MVC-Study'

Mickey2View methodsFor: 'controller access'

defaultControllerClass
$B",(BMickey2Controller

Mickey2View methodsFor: 'displaying'

displayView
| mickeyForm origin offset |
mickeyForm $B"+(B model form.
origin $B"+(B self insetDisplayBox origin.
offset $B"+(B self insetDisplayBox extent - mickeyForm boundingBox extent // 2.
mickeyForm
displayOn: Display
at: origin + offset
clippingBox: self insetDisplayBox

Mickey2View methodsFor: 'updating'

update: parameter
self display

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


MouseMenuController subclass: #Mickey2Controller
instanceVariableNames: ''
classVariableNames: 'MickeyYellowButtonMenu MickeyYellowButtonMessages '
poolDictionaries: ''
category: 'MVC-Study'

Mickey2Controller methodsFor: 'initialize-release'

initialize
super initialize.
self initializeYellowButtonMenu

initializeYellowButtonMenu
self yellowButtonMenu: MickeyYellowButtonMenu
yellowButtonMessages: MickeyYellowButtonMessages

Mickey2Controller methodsFor: 'control defaults'

isControlActive
$B",(Bsensor yellowButtonPressed

Mickey2Controller methodsFor: 'menu messages'

magnify
model magnify

shrink
model shrink

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

Mickey2Controller class methodsFor: 'class initialization'

initialize
"Mickey2Controller initialize"
| menuLabel |
menuLabel $B"+(B 'magnify\shrink' withCRs.
MickeyYellowButtonMenu $B"+(B PopUpMenu labels: menuLabel.
MickeyYellowButtonMessages $B"+(B #(magnify shrink )


$B%W%m%0%i%`(B3

$B!I(BProgram No.3 (M: Mickey3 V: Mickey3View C: Mickey3Controller)$B!I(B


Object subclass: #Mickey3
instanceVariableNames: 'form '
classVariableNames: 'MickeyMenu '
poolDictionaries: ''
category: 'MVC-Study'

Mickey3 methodsFor: 'accessing'

form
$B",(Bform

menu
MickeyMenu isNil ifTrue: [$B",(BActionMenu labels: 'magnify\shrink' withCRs selectors: #(magnify shrink )].
$B",(BMickeyMenu

Mickey3 methodsFor: 'manipulation'

magnify
form $B"+(B self form magnifyBy: 2 @ 2.
self changed: #magnify

shrink
form $B"+(B self form shrinkBy: 2 @ 2.
self changed: #shrink

Mickey3 methodsFor: 'private'

setForm
form $B"+(B Form readFrom: 'Mickey.form'

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

Mickey3 class methodsFor: 'class initialization'

flushMenus
"Mickey3 flushMenus"
MickeyMenu $B"+(B nil

Mickey3 class methodsFor: 'instance creation'

new
$B",(Bsuper new setForm

Mickey3 class methodsFor: 'examples'

example
"Mickey3 example"

| topView subView |
topView $B"+(B StandardSystemView new.
topView borderWidth: 1.
subView $B"+(B Mickey3View
on: Mickey3 new
aspect: #form
menu: #menu.
subView model: Mickey3 new.
subView borderWidth: 1.
subView insideColor: Form white.
topView addSubView: subView.
topView controller open


View subclass: #Mickey3View
instanceVariableNames: 'aspectSelector menuSelector '
classVariableNames: ''
poolDictionaries: ''
category: 'MVC-Study'

Mickey3View methodsFor: 'controller access'

defaultControllerClass
$B",(BMickey3Controller

Mickey3View methodsFor: 'displaying'

displayView
| mickeyForm origin offset |
mickeyForm $B"+(B model perform: aspectSelector.
origin $B"+(B self insetDisplayBox origin.
offset $B"+(B self insetDisplayBox extent - mickeyForm boundingBox extent // 2.
mickeyForm
displayOn: Display
at: origin + offset
clippingBox: self insetDisplayBox

Mickey3View methodsFor: 'updating'

update: parameter
self display

Mickey3View methodsFor: 'private'

on: aModel aspect: aspect menu: menu
self model: aModel.
aspectSelector $B"+(B aspect.
menuSelector $B"+(B menu!

yellowButtonMenu
$B",(Bmodel perform: menuSelector

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

Mickey3View class methodsFor: 'instance creation'

on: aModel aspect: aspect menu: menu
$B",(Bsuper new on: aModel aspect: aspect menu: menu


MouseMenuController subclass: #Mickey3Controller
instanceVariableNames: ''
classVariableNames: 'MickeyYellowButtonMenu MickeyYellowButtonMessages '
poolDictionaries: ''
category: 'MVC-Study'

Mickey3Controller methodsFor: 'control defaults'

isControlActive
$B",(Bsensor yellowButtonPressed

Mickey3Controller methodsFor: 'control activity'

yellowButtonActivity
| index menu selector |
menu $B"+(B view yellowButtonMenu.
index $B"+(B menu startUpYellowButton.
index ~= 0
ifTrue:
[selector $B"+(B menu selectorAt: index.
self controlTerminate.
model perform: selector.
self controlInitialize]

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