[squeak-dev] ActiveWorld and World globals
David T. Lewis
lewis at mail.msen.com
Thu Nov 16 01:29:23 UTC 2017
Bob's changes are in the inbox as System-dtl.977 and Morphic-dtl.1365.
Try the ENTER ACTIVE menu selection in a project view morph to test.
It is quite easy to find your way to an emergency evaluator, so I put
in into inbox rather than trunk for the time being.
Dave
On Wed, Nov 15, 2017 at 03:39:49PM +0100, H. Hirzel wrote:
> Bob's changes involve 4 methods
>
> PasteUpMorph>>installAsActiveSubprojectIn: enclosingWorld at:
> newBounds titled: aString
> PasteUpMorph>>installAsActiveSubprojectIn: enclosingWorld titled: aString
> Project>>enterAsActiveSubprojectWithin: enclosingWorld
> ProjectViewMorph>>enterAsActiveSubproject
>
>
> BTW this involves the mysterious 'AlignmentMorphBob1'.....
>
> Hannes
>
>
>
> Here is the code (unpacked fixProjectView.14Nov0811.cs.gz) to make it
> easier for people to have a look at it.
>
>
>
> 'From Squeak5.1 of 23 August 2016 [latest update: #16548] on 14
> November 2017 at 8:11:28 am'!
> "Change Set: fixProjectView
> Date: 14 November 2017
> Author: Bob Arning
>
> squeak 5.1...
>
> reinstate 'ENTER ACTIVE' option in menu for ProjectViewMorph "!
>
>
> !PasteUpMorph methodsFor: 'WiW support' stamp: 'raa 11/14/2017 07:47'!
> installAsActiveSubprojectIn: enclosingWorld at: newBounds titled: aString
> | window howToOpen tm boundsForWorld |
> howToOpen := self embeddedProjectDisplayMode.
> "#scaled may be the only one that works at the moment"
> submorphs do: [:ss | ss owner isNil ifTrue: [ss privateOwner: self]].
> "Transcript that was in outPointers and then got deleted."
> boundsForWorld := howToOpen == #naked ifTrue: [newBounds] ifFalse: [bounds].
> worldState canvas: nil.
> worldState viewBox: boundsForWorld.
> self bounds: boundsForWorld.
>
> "self viewBox: Display boundingBox."
> "worldState handsDo: [:h | h initForEvents]."
> self installFlaps.
>
> "SystemWindow noteTopWindowIn: self."
> "self displayWorldSafely."
> howToOpen == #naked ifTrue: [enclosingWorld addMorphFront: self].
> howToOpen == #window
> ifTrue:
> [window := (SystemWindow labelled: aString) model: self.
> window addMorph: self frame: (0 @ 0 extent: 1.0 @ 1.0).
> window openInWorld: enclosingWorld].
> howToOpen == #frame
> ifTrue:
> [window := (AlignmentMorphBob1 new)
> minWidth: 100;
> minHeight: 100;
> borderWidth: 8;
> borderColor: Color green;
> bounds: newBounds.
> window addMorph: self.
> window openInWorld: enclosingWorld].
> howToOpen == #scaled
> ifTrue:
> [self position: 0 @ 0.
> window := (EmbeddedWorldBorderMorph new)
> minWidth: 100;
> minHeight: 100;
> borderWidth: 8;
> borderColor: Color green;
> bounds: newBounds.
> tm := BOBTransformationMorph new.
> window addMorph: tm.
> tm addMorph: self.
> window openInWorld: enclosingWorld.
> tm changeWorldBoundsToShow: bounds.
> self arrangeToStartSteppingIn: enclosingWorld
> "tm scale: (tm width / self width min: tm height / self
> height) asFloat."]! !
>
> !PasteUpMorph methodsFor: 'WiW support' stamp: 'raa 11/14/2017 07:47'!
> installAsActiveSubprojectIn: enclosingWorld titled: aString
>
> | opt newWidth |
>
> opt := self optimumExtentFromAuthor.
> (opt x > (enclosingWorld width * 0.7) or:
> [opt y > (enclosingWorld height * 0.7)]) ifTrue: [
> newWidth := enclosingWorld width // 2.
> opt := newWidth @ (opt y * newWidth / opt x) truncated
> ].
> ^self
> installAsActiveSubprojectIn: enclosingWorld
> at: (enclosingWorld topLeft + (enclosingWorld extent - opt //
> 2) extent: opt)
> titled: aString! !
>
>
> !Project methodsFor: 'enter' stamp: 'raa 11/14/2017 06:45'!
> enterAsActiveSubprojectWithin: enclosingWorld
>
> "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."
>
> "Experimental mods for initial multi-project work:
> 1. assume in morphic (this eliminated need for <showZoom>)
> 2. assume <saveForRevert> is false (usual case) - removed <old>
> 3. assume <revertFlag> is false
> 4. assume <revertWithoutAsking> is false - <forceRevert> now
> auto false <seg> n.u.
> 5. no zooming
> 6. assume <projectsSentToDisk> false - could be dangerous here
> 7. assume no isolation problems (isolationHead ==)
> 8. no closing scripts
> "
>
> self isCurrentProject ifTrue: [^ self].
>
> "guards ifNotNil: [
> guards := guards reject: [:obj | obj isNil].
> guards do: [:obj | obj okayToEnterProject ifFalse: [^ self]]
> ]."
>
> "CurrentProject makeThumbnail."
> "--> Display bestGuessOfCurrentWorld triggerClosingScripts."
> CurrentProject displayDepth: Display depth.
>
> displayDepth == nil ifTrue: [displayDepth := Display depth].
> "Display newDepthNoRestore: displayDepth."
>
> "(world hasProperty: #letTheMusicPlay)
> ifTrue: [world removeProperty: #letTheMusicPlay]
> ifFalse: [Smalltalk at: #ScorePlayer ifPresent: [:playerClass |
> playerClass allSubInstancesDo: [:player |
> player pause]]]."
>
> "returningFlag
> ifTrue: [nextProject := CurrentProject]
> ifFalse: [previousProject := CurrentProject]."
>
> "CurrentProject saveState."
> "CurrentProject := self."
> "Smalltalk newChanges: changeSet."
> "TranscriptStream newTranscript: transcript."
> "Sensor flushKeyboard."
> "recorderOrNil := Display pauseMorphicEventRecorder."
>
> "Display changeMorphicWorldTo: world." "Signifies Morphic"
> world
> installAsActiveSubprojectIn: enclosingWorld
> titled: self name.
>
> "recorderOrNil ifNotNil: [recorderOrNil resumeIn: world]."
> world triggerOpeningScripts.
> self removeParameter: #exportState.
> "self spawnNewProcessAndTerminateOld: true"! !
>
>
> !ProjectViewMorph methodsFor: 'events' stamp: 'raa 11/14/2017 06:46'!
> enterAsActiveSubproject
> "Enter my project."
>
> project class == DiskProxy
> ifTrue:
> ["When target is not in yet"
>
> [self enterWhenNotPresent "will bring it in"] on:
> ProjectEntryNotification
> do: [:ex | ^ex projectToEnter
> enterAsActiveSubprojectWithin: self world].
> project class == DiskProxy ifTrue: [self error: 'Could not
> find view']].
> (owner isSystemWindow) ifTrue: [project setViewSize: self extent].
> self showMouseState: 3.
> project enterAsActiveSubprojectWithin: self world! !
>
> !ProjectViewMorph methodsFor: 'events' stamp: 'raa 11/14/2017 06:43'!
> showMenuForProjectView
> | menu |
> (menu := MenuMorph new)
> add: 'enter this project' translated
> action: [^ self enter];
>
> add: 'ENTER ACTIVE' translated
> action: [self setProperty: #wasOpenedAsSubproject toValue: true.
> ^ self enterAsActiveSubproject];
>
> add: 'PUBLISH (also saves a local copy)' translated
> action: [^ project storeOnServerShowProgressOn: self forgetURL: false];
>
> add: 'PUBLISH to a different server' translated
> action: [project forgetExistingURL.
> ^ project storeOnServerShowProgressOn: self forgetURL: true];
>
> add: 'see if server version is more recent' translated
> action: [^ self checkForNewerVersionAndLoad];
>
> addLine;
> add: 'expunge this project' translated
> action: [^ self expungeProject].
>
> menu title: ('Project Named \"{1}"' translated withCRs format: {project name}).
> menu invokeModal.! !
>
> Project removeSelector: #installAsActiveSubprojectIn:titled:!
>
> On 11/15/17, David T. Lewis <lewis at mail.msen.com> wrote:
> > I hope someone can take a look at Bob's change set. I'm going to be away for
> > a day or two and I'm out of time for playing with Squeak, but this is
> > certainly
> > on my personal to-do list when I get back :-)
> >
> > Dave
> >
> >
> > On Tue, Nov 14, 2017 at 08:14:07AM -0500, Bob Arning wrote:
> >> Here is a start (squeak 5.1). Not extensively tested, but a FileList in
> >> a world in the World was operational.
> >>
> >>
> >> On 11/14/17 5:13 AM, H. Hirzel wrote:
> >> >And it would be good to get "worlds in worlds" working again.
> >
> >
> >
> >
>
More information about the Squeak-dev
mailing list
|