'From Squeak3.3alpha of 30 January 2002 [latest update: #4664] on 10 February 2002 at 1:13:47 pm'! !Object methodsFor: 'events-accessing' stamp: 'rw 2/10/2002 13:05'! createActionMap ^IdentityDictionary new! ! !Morph methodsFor: 'events' stamp: 'rww 10/2/2001 07:31'! actionMap | actionMap | actionMap := self valueOfProperty: #myEvents. ^actionMap == nil ifTrue: [self createActionMap] ifFalse: [actionMap] ! ! !Morph methodsFor: 'events' stamp: 'rww 10/2/2001 07:29'! releaseActionMap self removeProperty: #myEvents! ! !Morph methodsFor: 'events' stamp: 'rww 10/2/2001 07:33'! updateableActionMap | actionMap | actionMap := self valueOfProperty: #myEvents. ^actionMap == nil ifTrue: [self setProperty: #actionMap toValue: self createActionMap] ifFalse: [actionMap] ! ! !B3DSceneMorph methodsFor: 'initialize' stamp: 'rww 10/1/2001 01:18'! outOfWorld: aWorld "The receiver is leaving the given world" aWorld ifNil:[^self]. self suspendAcceleration. aWorld removeActionsWithReceiver: self. super outOfWorld: aWorld.! ! !Object class methodsFor: 'class initialization' stamp: 'rw 2/10/2002 13:09'! flushEvents "Object flushEvents" EventManager flushEvents. ! ! !Object class methodsFor: 'class initialization' stamp: 'rww 10/2/2001 07:35'! initialize "Object initialize" DependentsFields ifNil:[self initializeDependentsFields].! ! !EventManager class methodsFor: 'initialize-release' stamp: 'rw 2/10/2002 13:09'! flushEvents "Object flushEvents" | msgSet | self actionMaps keysAndValuesDo:[:rcvr :evtDict| rcvr ifNotNil:[ "make sure we don't modify evtDict while enumerating" evtDict keys do:[:evtName| msgSet _ evtDict at: evtName ifAbsent:[nil]. (msgSet == nil) ifTrue:[rcvr removeActionsForEvent: evtName]]]]. EventManager actionMaps finalizeValues. ! ! !PasteUpMorph class methodsFor: 'project' stamp: 'rww 10/1/2001 01:17'! shutDown World ifNotNil:[ World triggerEvent: #aboutToLeaveWorld. ].! ! !PasteUpMorph class methodsFor: 'project' stamp: 'rww 10/1/2001 01:17'! startUp World ifNotNil:[ World restoreMorphicDisplay. World triggerEvent: #aboutToEnterWorld. ].! ! !Project methodsFor: 'menu messages' stamp: 'rww 10/1/2001 01:17'! enter: returningFlag revert: revertFlag saveForRevert: saveForRevert "Install my ChangeSet, Transcript, and scheduled views as current globals. If returningFlag is true, we will return to the project from whence the current project was entered; don't change its previousProject link in this case. If saveForRevert is true, save the ImageSegment of the project being left. If revertFlag is true, make stubs for the world of the project being left. If revertWithoutAsking is true in the project being left, then always revert." | showZoom recorderOrNil old forceRevert response seg newProcess | (world isKindOf: StringMorph) ifTrue: [ self inform: 'This project is not all here. I will try to load a complete version.'. ^self loadFromServer: true "try to get a fresh copy" ]. self isCurrentProject ifTrue: [^ self]. "Check the guards" guards ifNotNil: [guards _ guards reject: [:obj | obj isNil]. guards do: [:obj | obj okayToEnterProject ifFalse: [^ self]]]. CurrentProject world triggerEvent: #aboutToLeaveWorld. forceRevert _ false. CurrentProject rawParameters ifNil: [revertFlag ifTrue: [^ self inform: 'nothing to revert to']] ifNotNil: [saveForRevert ifFalse: [ forceRevert _ CurrentProject projectParameters at: #revertWithoutAsking ifAbsent: [false]]]. forceRevert not & revertFlag ifTrue: [ response _ SelectionMenu confirm: 'Are you sure you want to destroy this Project\ and revert to an older version?\\(From the parent project, click on this project''s thumbnail.)' withCRs trueChoice: 'Revert to saved version' falseChoice: 'Cancel'. response ifFalse: [^ self]]. revertFlag | forceRevert ifTrue: [seg _ CurrentProject projectParameters at: #revertToMe ifAbsent: [ ^ self inform: 'nothing to revert to']] ifFalse: [ CurrentProject finalExitActions. CurrentProject makeThumbnail. returningFlag == #specialReturn ifTrue: [ProjectHistory forget: CurrentProject. "this guy is irrelevant" Project forget: CurrentProject] ifFalse: [ProjectHistory remember: CurrentProject]]. (revertFlag | saveForRevert | forceRevert) ifFalse: [(Preferences valueOfFlag: #projectsSentToDisk) ifTrue: [self storeToMakeRoom]]. CurrentProject abortResourceLoading. Smalltalk isMorphic ifTrue: [CurrentProject world triggerClosingScripts]. CurrentProject saveProjectPreferences. "Update the display depth and make a thumbnail of the current project" CurrentProject displayDepth: Display depth. old _ CurrentProject. "for later" "Show the project transition. Note: The project zoom is run in the context of the old project, so that eventual errors can be handled accordingly" displayDepth == nil ifTrue: [displayDepth _ Display depth]. self installNewDisplay: Display extent depth: displayDepth. (showZoom _ self showZoom) ifTrue: [ self displayZoom: CurrentProject parent ~~ self]. (world isMorph and: [world hasProperty: #letTheMusicPlay]) ifTrue: [world removeProperty: #letTheMusicPlay] ifFalse: [Smalltalk at: #ScorePlayer ifPresentAndInMemory: [:playerClass | playerClass allSubInstancesDo: [:player | player pause]]]. returningFlag == #specialReturn ifTrue: [ old removeChangeSetIfPossible. "keep this stuff from accumulating" nextProject _ nil ] ifFalse: [ returningFlag ifTrue: [nextProject _ CurrentProject] ifFalse: [previousProject _ CurrentProject]. ]. CurrentProject saveState. CurrentProject isolationHead == self isolationHead ifFalse: [self invokeFrom: CurrentProject]. CurrentProject _ self. self installProjectPreferences. Smalltalk newChanges: changeSet. TranscriptStream newTranscript: transcript. Sensor flushKeyboard. Smalltalk isMorphic ifTrue: [recorderOrNil _ World pauseEventRecorder]. ProjectHistory remember: CurrentProject. world isMorph ifTrue: [World _ world. "Signifies Morphic" world install. world transferRemoteServerFrom: old world. "(revertFlag | saveForRevert | forceRevert) ifFalse: [ (Preferences valueOfFlag: #projectsSentToDisk) ifTrue: [ self storeSomeSegment]]." recorderOrNil ifNotNil: [recorderOrNil resumeIn: world]. world triggerOpeningScripts] ifFalse: [World _ nil. "Signifies MVC" Smalltalk at: #ScheduledControllers put: world]. saveForRevert ifTrue: [ Smalltalk garbageCollect. "let go of pointers" old storeSegment. "result _" old world isInMemory ifTrue: ['Can''t seem to write the project.'] ifFalse: [old projectParameters at: #revertToMe put: old world xxxSegment clone]. 'Project written.']. "original is for coming back in and continuing." revertFlag | forceRevert ifTrue: [ seg clone revert]. "non-cloned one is for reverting again later" self removeParameter: #exportState. "Complete the enter: by launching a new process" world isMorph ifTrue: [ self finalEnterActions. world repairEmbeddedWorlds. world triggerEvent: #aboutToEnterWorld. Project spawnNewProcessAndTerminateOld: true ] ifFalse: [ SystemWindow clearTopWindow. "break external ref to this project" newProcess _ [ ScheduledControllers resetActiveController. "in case of walkback in #restore" showZoom ifFalse: [ScheduledControllers restore]. ScheduledControllers searchForActiveController ] fixTemps newProcess priority: Processor userSchedulingPriority. newProcess resume. "lose the current process and its referenced morphs" Processor terminateActive. ]! ! !VRMLInterpolatorNode methodsFor: 'accessing' stamp: 'rww 10/1/2001 01:16'! value: newValue value _ newValue. self triggerEvent: #'value_changed' with: newValue.! ! !VRMLWonderlandBuilder methodsFor: 'enumerating nodes' stamp: 'rww 10/2/2001 07:25'! doCoordinate: node | attr points interpolator | (attr _ node attributeValueNamed: 'point') notNil ifTrue:[ points _ self mfVec3fFrom: attr. (scene targetNodes includes: node) ifTrue:[ interpolator _ nil. scene sourceNodes do:[:n| n actionsDo:[:set| set do:[:msg| msg receiver == node ifTrue:[interpolator _ n]]]]. interpolator _ self mfVec3fFromInterpolator: interpolator. ]. ]. points == nil ifTrue:[attributes removeKey: #currentPoints] ifFalse:[attributes at: #currentPoints put: points]. interpolator == nil ifTrue:[attributes removeKey: #interpolatorPoints ifAbsent:[]] ifFalse:[attributes at: #interpolatorPoints put: interpolator]. ! ! !WonderlandCameraMorph methodsFor: 'initialization' stamp: 'rww 10/1/2001 01:18'! outOfWorld: aWorld "The receiver is leaving the given world" aWorld ifNil:[^self]. self suspendAcceleration. aWorld removeActionsWithReceiver: self. super outOfWorld: aWorld.! ! !WonderlandCameraMorph methodsFor: 'hardware acceleration' stamp: 'rww 10/1/2001 01:18'! accelerationEnabled: aBool "Enable or disable hardware acceleration" | aWorld | "no dangling renderers please" myRenderer ifNotNil:[myRenderer destroy]. myRenderer _ nil. aBool ifTrue:[self setProperty: #accelerationEnabled toValue: aBool] ifFalse:[self removeProperty: #accelerationEnabled]. "For now make sure we're registered with the world in case this guy came from the disk" (aWorld _ self world) ifNotNil:[ aWorld removeActionsWithReceiver: self. aWorld when: #aboutToLeaveWorld send: #suspendAcceleration to: self. aWorld when: #aboutToEnterWorld send: #restoreAcceleration to: self. ].! ! Object initialize! Object class removeSelector: #initializeEventsFields! Object class removeSelector: #reInitializeEventsFields! Morph removeSelector: #myEvents! Morph removeSelector: #myEvents:! Object removeSelector: #myEvents! Object removeSelector: #myEvents:! Object removeSelector: #noEventsDo:! Object removeSelector: #removeAllEventsTriggered! Object removeSelector: #removeEvent:! Object removeSelector: #removeEventsTriggeredFor:! Object removeSelector: #trigger:! Object removeSelector: #trigger:with:! Object removeSelector: #trigger:withArguments:! Object removeSelector: #when:perform:! Object removeSelector: #when:sendTo:! Smalltalk removeClassNamed: #EventMessageSet! Smalltalk removeClassNamed: #EventModel! ProtoObject subclass: #Object instanceVariableNames: '' classVariableNames: 'DependentsFields ' module: #(Squeak Language Core Objects)!