'10/26/99 5:59:38 pm'! View subclass: #TemplateWithMenuView instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmalltalkLecture-MVC'! ApplicationModel subclass: #TemplateWithMenuModel instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmalltalkLecture-MVC'! ControllerWithMenu subclass: #TemplateWithMenuController instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmalltalkLecture-MVC'! View subclass: #TemplateWithMenuView instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmalltalkLecture-MVC'! !TemplateWithMenuView methodsFor: 'controller accessing'! defaultControllerClass ^TemplateWithMenuController! ! !TemplateWithMenuView methodsFor: 'displaying'! displayOn: graphicsContext Transcript cr; show: thisContext selector printString! ! !TemplateWithMenuView methodsFor: 'updating'! update: aspectSymbol Transcript cr; show: thisContext selector printString! ! ApplicationModel subclass: #TemplateWithMenuModel instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmalltalkLecture-MVC'! !TemplateWithMenuModel methodsFor: 'interface opening'! createView | aView | aView := TemplateWithMenuView model: self. aView controller menuHolder: [self yellowButtonMenu]. aView controller performer: self. ^aView! ! !TemplateWithMenuModel methodsFor: 'menu messages'! yellowButtonMenu ^self class yellowButtonMenu! ! !TemplateWithMenuModel methodsFor: 'menu actions'! doMenu1 Transcript cr; show: thisContext selector printString! doMenu2 Transcript cr; show: thisContext selector printString! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! TemplateWithMenuModel class instanceVariableNames: ''! !TemplateWithMenuModel class methodsFor: 'interface specs'! windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" ^#(#FullSpec #window: #(#WindowSpec #label: 'Template MVC' #min: #(#Point 180 150 ) #bounds: #(#Rectangle 100 100 300 270 ) ) #component: #(#SpecCollection #collection: #( #(#ArbitraryComponentSpec #layout: #(#LayoutFrame 1 0 1 0 -1 1 -1 1 ) #name: #view #component: #createView ) ) ) )! ! !TemplateWithMenuModel class methodsFor: 'resources'! yellowButtonMenu "MenuEditor new openOnClass: self andSelector: #yellowButtonMenu" ^#(#Menu #( #(#MenuItem #rawLabel: 'doMenu1' #value: #doMenu1 ) #(#MenuItem #rawLabel: 'doMenu2' #value: #doMenu2 ) ) #(2 ) nil ) decodeAsLiteralArray! ! !TemplateWithMenuModel class methodsFor: 'saving'! save "TemplateWithMenuModel save." | encodingName fileName classCollection aStream | encodingName := #default. fileName := 'template.st'. classCollection := self saveClasses. aStream := (fileName asFilename withEncoding: encodingName) writeStream. [Cursor write showWhile: [| timeStamp | timeStamp := Date today shortPrintString , ' ' , Time now shortPrintString. aStream cr. aStream nextChunkPut: timeStamp printString. aStream cr; cr. (self comment isNil or: [self comment isEmpty]) ifFalse: [aStream nextChunkPut: self comment printString. aStream cr; cr]. classCollection do: [:aClass | aStream nextChunkPut: aClass definition. aStream cr; cr]. classCollection do: [:aClass | | sourceCodeStream | aStream nextPut: Character newPage. aStream cr. sourceCodeStream := SourceCodeStream on: aStream. aClass fileOutSourceOn: sourceCodeStream. aStream cr]]] valueNowOrOnUnwindDo: [aStream close]. ^classCollection! saveClasses "TemplateWithMenuModel saveClasses." | patternCollection classCollection | patternCollection := #('*Template*'). classCollection := Smalltalk organization superclassOrder: self category. classCollection := classCollection select: [:aClass | | string something | string := aClass name asString. something := patternCollection detect: [:it | it match: string] ifNone: [nil]. something notNil]. ^classCollection! ! !TemplateWithMenuModel class methodsFor: 'examples'! example "TemplateWithMenuModel example." | aModel | aModel := TemplateWithMenuModel new. aModel open. ^aModel! ! ControllerWithMenu subclass: #TemplateWithMenuController instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmalltalkLecture-MVC'! !TemplateWithMenuController methodsFor: 'control defaults'! controlActivity (self sensor redButtonPressed and: [self viewHasCursor]) ifTrue: [^self redButtonActivity]. (self sensor yellowButtonPressed and: [self viewHasCursor]) ifTrue: [^self yellowButtonActivity]. super controlActivity! redButtonActivity Transcript cr; show: thisContext selector printString. super redButtonActivity! yellowButtonActivity Transcript cr; show: thisContext selector printString. super yellowButtonActivity! ! !TemplateWithMenuController methodsFor: 'events'! redButtonPressedEvent: event self controlActivity. ^nil! yellowButtonPressedEvent: event self controlActivity. ^nil! !