'From Squeak3.1alpha of 4 February 2001 [latest update: #3542] on 7 February 2001 at 6:09:03 pm'! "Change Set: EtoyCleanup-ar Date: 7 February 2001 Author: Andreas Raab Cleans up the tile brightening stuff and some minor other things I just ran across. In effect, the CS adds 4 methods and removes about 30. Various others were slightly simplified."! !Morph methodsFor: 'e-toy support' stamp: 'ar 2/7/2001 18:00'! enclosingEditor "Return the next editor around the receiver" | tested | tested _ owner. [tested == nil] whileFalse:[ tested isTileEditor ifTrue:[^tested]. tested _ tested owner]. ^nil! ! !Morph methodsFor: 'e-toy support' stamp: 'ar 2/7/2001 17:58'! isTileEditor "No, I'm not" ^false! ! !Morph methodsFor: 'e-toy support' stamp: 'ar 2/7/2001 17:59'! topEditor "Return the top-most editor around the receiver" | found tested | tested _ self. [tested == nil] whileFalse:[ tested isTileEditor ifTrue:[found _ tested]. tested _ tested owner]. ^found! ! !CompoundTileMorph methodsFor: 'testing' stamp: 'ar 2/7/2001 17:57'! isTileEditor "Yes I am" ^true! ! !PhraseTileMorph methodsFor: 'mouse' stamp: 'ar 2/7/2001 17:48'! mouseDown: evt "Pretend we picked up the tile and then put it down for a trial positioning." "The essence of ScriptEditor mouseEnter:" | ed ss guyToTake | self isPartsDonor ifTrue:[^self duplicateMorph: evt]. submorphs isEmpty ifTrue: [^ self]. (ed _ self enclosingEditor) ifNil: [^evt hand grabMorph: self]. guyToTake _ self. owner class == TilePadMorph ifTrue: ["picking me out of another phrase" (ss _ submorphs first) class == TilePadMorph ifTrue: [ss _ ss submorphs first]. guyToTake _ ss fullCopy]. evt hand grabMorph: guyToTake. ed startStepping. ed mouseEnterDragging: evt. ed setProperty: #justPickedUpPhrase toValue: true. ! ! !ScriptEditorMorph methodsFor: 'dropping/grabbing' stamp: 'ar 2/7/2001 17:51'! acceptDroppingMorph: aMorph event: evt "Allow the user to add tiles and program fragments just by dropping them on this morph." | i slideMorph p1 p2 | self prepareToUndoDropOf: aMorph. "Find where it will go, and prepare to animate the move..." i _ self rowInsertionIndexFor: aMorph fullBounds center. slideMorph _ aMorph imageForm offset: 0@0. p1 _ aMorph screenRectangle topLeft. aMorph delete. self stopStepping. self world displayWorld. "Clear old image prior to animation" (aMorph isKindOf: PhraseTileMorph) ifTrue: [aMorph justGrabbedFromViewer: false]. aMorph tileRows do: [:tileList | self insertTileRow: (Array with: (tileList first rowOfRightTypeFor: owner forActor: aMorph associatedPlayer)) after: i. i _ i + 1]. self removeSpaces. self enforceTileColorPolicy. self layoutChanged. self fullBounds. "force layout" "Now animate the move, before next Morphic update. NOTE: This probably should use ZoomMorph instead" p2 _ (self submorphs atPin: (i-1 max: firstTileRow)) screenRectangle topLeft. slideMorph slideFrom: p1 to: p2 nSteps: 5 delay: 50 andStay: true. self playSoundNamed: 'scritch'. self topEditor install "Keep me for editing, a copy goes into lastAcceptedScript"! ! !ScriptEditorMorph methodsFor: 'dropping/grabbing' stamp: 'ar 2/7/2001 17:46'! mouseEnter: evt | hand tile | self flag: #bob. "needed renderedMorph due to transformations" hand _ evt hand. hand submorphs size = 1 ifFalse: [^self]. evt "hand lastEvent" redButtonPressed ifFalse: [^self]. tile _ hand firstSubmorph renderedMorph. (self wantsDroppedMorph: tile event: evt) ifFalse: [^self]. handWithTile _ hand. self startStepping! ! !ScriptEditorMorph methodsFor: 'dropping/grabbing' stamp: 'ar 2/7/2001 17:51'! mouseLeave: evt owner ifNil: [^ self]. "left by being removed, not by mouse movement" (self hasProperty: #justPickedUpPhrase) ifTrue:[ self removeProperty: #justPickedUpPhrase. ^self]. self stopStepping. handWithTile _ nil. self removeSpaces.! ! !ScriptEditorMorph methodsFor: 'dropping/grabbing' stamp: 'ar 2/7/2001 18:02'! step | hand insertion i space1 d space2 insHt nxtHt prevBot ht2 c1 c2 ii where | hand _ handWithTile ifNil: [self primaryHand]. (hand lastEvent redButtonPressed and: [(self hasOwner: hand) not]) ifTrue: [ hand submorphCount > 0 ifTrue: [ insertion _ hand firstSubmorph renderedMorph. insHt _ insertion height. self removeSpaces. where _ self globalPointToLocal: hand position"insertion fullBounds topLeft". i _ (ii _ self indexOfMorphAbove: where) min: submorphs size-1. prevBot _ i <= 0 ifTrue: [(self innerBounds) top] ifFalse: [(self submorphs at: i) bottom]. nxtHt _ (submorphs isEmpty ifTrue: [insertion] ifFalse: [self submorphs at: i+1]) height. d _ ii > i ifTrue: [nxtHt "for consistent behavior at bottom"] ifFalse: [0 max: (where y - prevBot min: nxtHt)]. "Top and bottom spacer heights cause continuous motion..." c1 _ Color green. c2 _ Color transparent. ht2 _ d*insHt//nxtHt. space1 _ Morph newBounds: (0@0 extent: 30@(insHt-ht2)) color: ((insHt-ht2) > (insHt//2+1) ifTrue: [c1] ifFalse: [c2]). self privateAddMorph: space1 atIndex: (i+1 max: 1). space2 _ Morph newBounds: (0@0 extent: 30@ht2) color: (ht2 > (insHt//2+1) ifTrue: [c1] ifFalse: [c2]). self privateAddMorph: space2 atIndex: (i+3 min: submorphs size+1). ] ] ifFalse: [ self stopStepping. self removeSpaces. ]! ! !ScriptEditorMorph methodsFor: 'testing' stamp: 'ar 2/7/2001 17:57'! isTileEditor "Yes I am" ^true! ! !TilePadMorph methodsFor: 'mouse' stamp: 'ar 2/7/2001 17:55'! prepareToUndoDropOf: aMorph | m | m _ self owner. [m == nil] whileFalse: [ (m isKindOf: ScriptEditorMorph) ifTrue: [^ m prepareToUndoDropOf: aMorph]. m _ m owner]. ! ! TrashCanMorph removeSelector: #handlesDragOver:! TilePadMorph removeSelector: #handlesDragOver:! TilePadMorph removeSelector: #handlesMouseOver:! TilePadMorph removeSelector: #handlesMouseOverDragging:! TilePadMorph removeSelector: #mouseEnter:! TilePadMorph removeSelector: #mouseEnterDragging:! TilePadMorph removeSelector: #mouseLeave:! TilePadMorph removeSelector: #mouseLeaveDragging:! StandardScriptingSystem removeSelector: #brightColorFor:! StandardScriptingSystem removeSelector: #brightColorForType:! StandardScriptingSystem removeSelector: #unbrightColorFor:! SketchEditorMorph removeSelector: #handlesDragOver:! ScriptEditorMorph removeSelector: #enclosingEditor! ScriptEditorMorph removeSelector: #handlesDragOver:! ScriptEditorMorph removeSelector: #nextEditor! ScriptEditorMorph removeSelector: #topEditor! PhraseTileMorph removeSelector: #acceptDroppingMorph:event:! PhraseTileMorph removeSelector: #brightenTiles! PhraseTileMorph removeSelector: #canAccept:! PhraseTileMorph removeSelector: #enclosingEditor! PhraseTileMorph removeSelector: #handlesDragOver:! PhraseTileMorph removeSelector: #handlesMouseOver:! PhraseTileMorph removeSelector: #handlesMouseOverDragging:! PhraseTileMorph removeSelector: #mouseEnter:! PhraseTileMorph removeSelector: #mouseEnterDragging:! PhraseTileMorph removeSelector: #mouseLeaveDragging:! PhraseTileMorph removeSelector: #prepareToUndoDropOf:! PhraseTileMorph removeSelector: #unbrightenTiles! PhraseTileMorph removeSelector: #wantsDroppedMorph:event:! CompoundTileMorph removeSelector: #enclosingEditor! CompoundTileMorph removeSelector: #handlesDragOver:! CompoundTileMorph removeSelector: #nextEditor! CompoundTileMorph removeSelector: #topEditor! Morph removeSelector: #nextEditor!