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!" $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$r 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!" 	($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]
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --