Etoys: Etoys-kfr.99.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Etoys: Etoys-kfr.99.mcz

commits-2
Spam detection software, running on the system "europa.mgmt.inetu.net", has
identified this incoming email as possible spam.  The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email.  If you have any questions, see
the administrator of that system for details.

Content preview:  Karl Ramberg uploaded a new version of Etoys to project Etoys:
   http://source.squeak.org/etoys/Etoys-kfr.99.mcz ==================== Summary
   ==================== Name: Etoys-kfr.99 Author: kfr Time: 3 February 2012,
   11:41:17 pm UUID: 1b86a282-0433-9448-b74e-579b32ca4e32 Ancestors: Etoys-kfr.98
   [...]

Content analysis details:   (5.6 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
                            [score: 1.0000]
 0.0 MISSING_MID            Missing Message-Id: header
 1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
 1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
 3.8 TVD_STOCK1             BODY: TVD_STOCK1
 0.1 RDNS_NONE              Delivered to trusted network by a host with no rDNS
-3.9 AWL                    AWL: From: address is in the auto white-list



Karl Ramberg uploaded a new version of Etoys to project Etoys:
http://source.squeak.org/etoys/Etoys-kfr.99.mcz

==================== Summary ====================

Name: Etoys-kfr.99
Author: kfr
Time: 3 February 2012, 11:41:17 pm
UUID: 1b86a282-0433-9448-b74e-579b32ca4e32
Ancestors: Etoys-kfr.98

This is Ricardo Moran's implementation of a step-next-phrase feature in etoy Scriptors, with minor curating by Scott Wallace.

=============== Diff against Etoys-kfr.98 ===============

Item was changed:
  SystemOrganization addCategory: #'EToys-Kedama'!
  SystemOrganization addCategory: #'Etoys-Buttons'!
  SystemOrganization addCategory: #'Etoys-CustomEvents'!
  SystemOrganization addCategory: #'Etoys-Experimental'!
  SystemOrganization addCategory: #'Etoys-Help'!
  SystemOrganization addCategory: #'Etoys-Outliner'!
  SystemOrganization addCategory: #'Etoys-Protocols'!
  SystemOrganization addCategory: #'Etoys-Protocols-Type Vocabularies'!
  SystemOrganization addCategory: #'Etoys-Scratch'!
  SystemOrganization addCategory: #'Etoys-Scripting'!
  SystemOrganization addCategory: #'Etoys-Scripting Support'!
  SystemOrganization addCategory: #'Etoys-Scripting Tiles'!
  SystemOrganization addCategory: #'Etoys-Stacks'!
  SystemOrganization addCategory: #'Etoys-StarSqueak'!
  SystemOrganization addCategory: #'Etoys-Tile Scriptors'!
  SystemOrganization addCategory: #'Etoys-Widgets'!
  SystemOrganization addCategory: #'Etoys-SpeechBubbles'!
+ SystemOrganization addCategory: #'Etoys-Debugger'!

Item was added:
+ ----- Method: CompoundTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+ ^ anEtoysDebugger evaluateTest: self!

Item was added:
+ ----- Method: CompoundTileMorph>>evaluateTestPart (in category '*etoys-debugger') -----
+ evaluateTestPart
+ | condition |
+ condition := testPart tiles at: 1 ifAbsent: [^ true].
+ ^ Compiler evaluate: condition codeString
+ for: condition associatedPlayer
+ logged: false!

Item was added:
+ ----- Method: CompoundTileMorph>>noPart (in category '*etoys-debugger') -----
+ noPart
+ ^ noPart!

Item was added:
+ ----- Method: CompoundTileMorph>>testPart (in category '*etoys-debugger') -----
+ testPart
+ ^ testPart!

Item was added:
+ ----- Method: CompoundTileMorph>>yesPart (in category '*etoys-debugger') -----
+ yesPart
+ ^ yesPart!

Item was added:
+ Object subclass: #EtoysDebugger
+ instanceVariableNames: 'scriptEditor next timesToRepeat highlighter'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Etoys-Debugger'!

Item was added:
+ ----- Method: EtoysDebugger class>>initialize (in category 'class initialization') -----
+ initialize
+ "
+ self initialize
+ "
+ | buttonForm buttonPressedForm |
+ buttonForm := (Form
+ extent: 30@30
+ depth: 16
+ fromArray: #( 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 65537 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0)
+ offset: 0@0).
+ buttonPressedForm := (Form
+ extent: 30@30
+ depth: 16
+ fromArray: #( 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 65537 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0)
+ offset: 0@0).
+ ScriptingSystem saveForm: buttonForm atKey: #StepMe.
+ ScriptingSystem saveForm: buttonPressedForm atKey: #StepMePressed!

Item was added:
+ ----- Method: EtoysDebugger class>>on: (in category 'instance creation') -----
+ on: aScriptEditorMorph
+ ^ self basicNew initializeWith: aScriptEditorMorph!

Item was added:
+ ----- Method: EtoysDebugger>>delete (in category 'as yet unclassified') -----
+ delete
+ highlighter ifNotNil: [:h | h delete]!

Item was added:
+ ----- Method: EtoysDebugger>>evaluateNextTile (in category 'evaluating') -----
+ evaluateNextTile
+ [next evaluateOn: self]
+ on: Error do: [:err || newNext |
+ newNext := scriptEditor tiles at: 1 ifAbsent: [^ self].
+ newNext = next
+ ifTrue: [err pass]
+ ifFalse: [next := newNext].
+ self evaluateNextTile]!

Item was added:
+ ----- Method: EtoysDebugger>>evaluatePhrase: (in category 'evaluating') -----
+ evaluatePhrase: tile
+ self highlight: tile.
+ tile try.
+ next := tile nextTile!

Item was added:
+ ----- Method: EtoysDebugger>>evaluateRepeat: (in category 'evaluating') -----
+ evaluateRepeat: tile
+ self highlight: tile numberOfTimesToRepeatPart;
+ timesToRepeat: tile calculateTimesToRepeat.
+ next := tile nextTile!

Item was added:
+ ----- Method: EtoysDebugger>>evaluateTest: (in category 'evaluating') -----
+ evaluateTest: test
+ | tile |
+ test testPart tiles isEmpty
+ ifTrue: [next := test yesPart tiles at: 1 ifAbsent: [test nextTile].
+ ^ self evaluateNextTile].
+ self highlight: test testPart.
+ tile := test evaluateTestPart
+ ifTrue: [test yesPart]
+ ifFalse: [test noPart].
+ next := tile tiles at: 1 ifAbsent: [test nextTile]!

Item was added:
+ ----- Method: EtoysDebugger>>highlight: (in category 'highlighting') -----
+ highlight: aMorph
+ "| rect |
+ rect := BorderedMorph newBounds: aMorph bounds color: Color transparent.
+ rect openInWorld.
+ World addAlarm: #delete
+ withArguments: #()
+ for: rect
+ at: (Time millisecondClockValue + 200)."
+ highlighter ifNotNil: [highlighter delete].
+ highlighter := HighlightMorph on: aMorph.
+ highlighter openInWorld!

Item was added:
+ ----- Method: EtoysDebugger>>initializeWith: (in category 'initialization') -----
+ initializeWith: aScriptEditorMorph
+ scriptEditor := aScriptEditorMorph.
+ next := scriptEditor tiles at: 1 ifAbsent: nil.
+ self initialize!

Item was added:
+ ----- Method: EtoysDebugger>>timesToRepeat (in category 'accessing') -----
+ timesToRepeat
+ ^ timesToRepeat!

Item was added:
+ ----- Method: EtoysDebugger>>timesToRepeat: (in category 'accessing') -----
+ timesToRepeat: aNumber
+ timesToRepeat := aNumber!

Item was added:
+ Morph subclass: #HighlightMorph
+ instanceVariableNames: 'target lastHash stepTime'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Etoys-Debugger'!

Item was added:
+ ----- Method: HighlightMorph class>>on: (in category 'as yet unclassified') -----
+ on: targetMorph
+ ^ self basicNew initializeWith: targetMorph!

Item was added:
+ ----- Method: HighlightMorph>>containsPoint: (in category 'testing') -----
+ containsPoint: aPoint
+ ^ (self bounds containsPoint: aPoint) and:
+  [(self imageForm isTransparentAt: aPoint - bounds origin) not]!

Item was added:
+ ----- Method: HighlightMorph>>incrementStepTime (in category 'stepping') -----
+ incrementStepTime
+ stepTime := (stepTime + 1) min: self maximumStepTime!

Item was added:
+ ----- Method: HighlightMorph>>initialize (in category 'initialize-release') -----
+ initialize
+ super initialize.
+ stepTime := self minimumStepTime.
+ self color: Color transparent;
+ borderWidth: 2;
+ borderColor: Color red muchDarker muchDarker!

Item was added:
+ ----- Method: HighlightMorph>>initializeWith: (in category 'initialize-release') -----
+ initializeWith: targetMorph
+ target := targetMorph.
+ self initialize!

Item was added:
+ ----- Method: HighlightMorph>>maximumStepTime (in category 'stepping') -----
+ maximumStepTime
+ ^500!

Item was added:
+ ----- Method: HighlightMorph>>minimumStepTime (in category 'stepping') -----
+ minimumStepTime
+ ^20!

Item was added:
+ ----- Method: HighlightMorph>>step (in category 'stepping') -----
+ step
+ (target isNil or: [lastHash = (lastHash := target boundsSignatureHash)])
+ ifTrue: [self incrementStepTime]
+ ifFalse: [stepTime := self minimumStepTime].
+
+ target notNil ifTrue: [
+ target isInWorld ifFalse: [^self delete].
+ self bounds: target bounds]!

Item was added:
+ ----- Method: HighlightMorph>>stepTime (in category 'stepping') -----
+ stepTime
+ ^ stepTime!

Item was changed:
  ----- Method: Morph class>>helpContributions (in category '*eToys-scripting') -----
  helpContributions
  "Answer a list of pairs of the form (<symbol> <help message> ) to contribute to the system help dictionary"
 
  "NB: Many of the items here are not needed any more since they're specified as part of command definitions now.  Someone needs to take the time to go through the list and remove items no longer needed.  But who's got that kind of time?"
 
  ^ #(
  (acceptScript:for:
  'submit the contents of the given script editor as the code defining the given selector')
  (actorState
  'return the ActorState object for the receiver, creating it if necessary')
  (addInstanceVariable
  'start the interaction for adding a new variable to the object')
  (addPlayerMenuItemsTo:hand:
  'add player-specific menu items to the given menu, on behalf of the given hand.  At present, these are only commands relating to the turtle')
  (addYesNoToHand
  'Press here to tear off a TEST/YES/NO unit which you can drop into your script')
  (allScriptEditors
  'answer a list off the extant ScriptEditors for the receiver')
  (amount
  'The amount of displacement')
  (angle
  'The angular displacement')
  (anonymousScriptEditorFor:
  'answer a new ScriptEditor object to serve as the place for scripting an anonymous (unnamed, unsaved) script for the receiver')
  (append:
  'add an object to this container')
  (prepend:
  'add an object to this container')
  (assignDecrGetter:setter:amt:
  'evaluate the decrement variant of assignment')
  (assignGetter:setter:amt:
  'evaluate the vanilla variant of assignment')
  (assignIncrGetter:setter:amt:
  'evalute the increment version of assignment')
  (assignMultGetter:setter:amt:
  'evaluate the multiplicative version of assignment')
  (assureEventHandlerRepresentsStatus
  'make certain that the event handler associated with my current costume is set up to conform to my current script-status')
  (assureExternalName
  'If I do not currently have an external name assigned, get one now')
  (assureUniClass
  'make certain that I am a member a uniclass (i.e. a unique subclass); if I am not, create one now and become me into an instance of it')
  (availableCostumeNames
  'answer a list of strings representing the names of all costumes currently available for me')
  (availableCostumesForArrows
  'answer a list of actual, instantiated costumes for me, which can be cycled through as the user hits a next-costume or previous-costume button in a viewer')
  (beep:
  'make the specified sound')
  (borderColor
  'The color of the object''s border')
  (borderWidth
  'The width of the object''s border')
  (bottom
  'My bottom edge, measured downward from the top edge of the world')
  (bounce:
  'If object strayed beyond the boundaries of its container, make it reflect back into it, making the specified noise while doing so.')
  (bounce
  'If object strayed beyond the boundaries of its container, make it reflect back into it')
  (chooseTrigger
  'When this script should run.
  "normal" means "only when called"')
  (clearTurtleTrails
  'Clear all the pen trails in the interior.')
  (clearOwnersPenTrails
  'Clear all the pen trails in my container.')
  (color
  'The object''s interior color')
  (colorSees
  'Whether a given color in the object is over another given color')
  (colorUnder
  'The color under the center of the object')
  (copy
  'Return a new object that is very much like this one')
  (cursor
  'The index of the chosen element')
  (deleteCard
  'Delete the current card.')
  (dismiss
  'Click here to dismiss me')
  (doMenuItem:
  'Do a menu item, the same way as if it were chosen manually')
  (doScript:
  'Perform the given script once, on the next tick.')
  (elementNumber
  'My element number as seen by my owner')
  (fire
  'Run any and all button-firing scripts of this object')
  (firstPage
  'Go to first page of book')
  (followPath
  'Retrace the path the object has memorized, if any.')
  (forward:
  'Moves the object forward in the direction it is heading')
  (goto:
  'Go to the specfied book page')
  (goToNextCardInStack
  'Go to the next card')
  (goToPreviousCardInStack
  'Go to the previous card.')
  (goToRightOf:
  'Align the object just to the right of any specified object.')
  (heading
  'Which direction the object is facing.  0 is straight up')
  (height
  'The distance between the top and bottom edges of the object')
  (hide
  'Make the object so that it does not display and cannot handle input')
  (initiatePainting
  'Initiate painting of a new object in the standard playfield.')
  (initiatePaintingIn:
  'Initiate painting of a new object in the given place.')
  (isOverColor
  'Whether any part of this object is directly over the specified color')
  (isUnderMouse
  'Whether any part of this object is beneath the current mouse-cursor position')
  (lastPage
  'Go to the last page of the book.')
  (left
  'My left edge, measured from the left edge of the World')
  (leftRight
  'The horizontal displacement')
  (liftAllPens
  'Lift the pens on all the objects in my interior.')
  (lowerAllPens
  'Lower the pens on all the objects in my interior.')
  (mouseX
  'The x coordinate of the mouse pointer')
  (mouseY
  'The y coordinate of the mouse pointer')
  (moveToward:
  'Move in the direction of another object.')
  (insertCard
  'Create a new card.')
  (nextPage
  'Go to next page.')
  (numberAtCursor
  'The number held by the object at the chosen element')
  (objectNameInHalo
  'Object''s name -- To change: click here, edit, hit ENTER')
  (obtrudes
  'Whether any part of the object sticks out beyond its container''s borders')
  (offerScriptorMenu
  'The Scriptee.
  Press here to get a menu')
  (pauseScript:
  'Make a running script become paused.')
  (penDown
  'Whether the object''s pen is down (true) or up (false)')
  (penColor
  'The color of the object''s pen')
  (penSize
  'The size of the object''s pen')
  (clearPenTrails
  'Clear all pen trails in the current playfield')
  (playerSeeingColorPhrase
  'The player who "sees" a given color')
  (previousPage
  'Go to previous page')
 
  (show
  'If object was hidden, make it show itself again.')
  (startScript:
  'Make a script start running.')
  (stopScript:
  'Make a script stop running.')
  (top
  'My top edge, measured downward from the top edge of the world')
  (right
  'My right edge, measured from the left edge of the world')
  (roundUpStrays
  'Bring all out-of-container subparts back into view.')
  (scaleFactor
  'The amount by which the object is scaled')
+ (stepMe
+ 'Run the next phrase in the script.')
  (stopScript:
  'make the specified script stop running')
  (tellAllSiblings:
  'send a message to all of my sibling instances')
  (try
  'Run this command once.' translatedNoop)
  (tryMe
  'Click here to run this script once; hold button down to run repeatedly'  translatedNoop)
  (turn:
  'Change the heading of the object by the specified amount')
  (unhideHiddenObjects
  'Unhide all hidden objects.')
  (upDown
  'The vertical displacement')
  (userScript
  'This is a script defined by you.')
  (userSlot
  'This is a variable defined by you.  Click here to change its type')
  (valueAtCursor
  'The chosen element')
  (wearCostumeOf:
  'Make this object''s appearance be the same as that of another object')
  (width
  'The distance between the left and right edges of the object')
  (wrap
  'If object has strayed beond the boundaries of its container, make it reappear from the opposite edge.')
  (x
  'The x coordinate, measured from the left of the container')
  (y
  'The y-coordinate, measured upward from the bottom of the container')
 
  )
  !

Item was added:
+ ----- Method: PhraseTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+ ^ anEtoysDebugger evaluatePhrase: self!

Item was changed:
  ----- Method: PhraseTileMorph>>try (in category 'miscellaneous') -----
  try
  "Evaluate the given phrase once"
 
  | aPlayer |
  (userScriptSelector notNil and: [userScriptSelector numArgs = 0])
  ifTrue:
  [aPlayer _ self objectViewed player.
  aPlayer triggerScript: userScriptSelector]
  ifFalse:
  [[Compiler evaluate:
  self codeString
+ for: (self topEditor
+ ifNil: [self associatedPlayer]
+ ifNotNil: [:editor | editor playerScripted])
- for: self associatedPlayer
  logged: false] ifError: [self inform: 'evaluation error' translated]]!

Item was changed:
  ----- Method: ScriptEditorMorph>>buttonRowForEditor (in category 'buttons') -----
  buttonRowForEditor
  "Answer a row of buttons that comprise the header at the top of the Scriptor"
 
  | aRow aString aStatusMorph aButton aTile aMorph goldBoxButton aBox |
  aRow _ AlignmentMorph newRow color: ScriptingSystem baseColor; layoutInset: 1.
  aRow hResizing: #spaceFill.
  aRow vResizing: #shrinkWrap.
  self addDismissButtonTo: aRow.
  aRow addTransparentSpacerOfSize: 9.
 
  "Player's name"
  aString _ playerScripted externalName.
  aMorph _ StringMorph contents: aString font: ScriptingSystem fontForTiles.
  aMorph setNameTo: 'title'.
  aRow addMorphBack: aMorph.
  aRow addTransparentSpacerOfSize: 6.
 
  "Script's name"
  aBox := AlignmentMorph newRow.
  aBox hResizing: #shrinkWrap; vResizing: #shrinkWrap.
  aBox color: (Color r: 0.839 g: 1.0 b: 0.806).
  aBox borderWidth: 1.
  aBox  borderColor: (Color r: 0.645 g: 0.774 b: 0.613).
  aButton _ UpdatingStringMorph new.
  aButton useStringFormat;
  target:  self;
  getSelector: #scriptTitle;
  setNameTo: 'script name';
  font: ScriptingSystem fontForNameEditingInScriptor;
  putSelector: #setScriptNameTo:;
  setProperty: #okToTextEdit toValue: true;
  step;
  yourself.
  aBox addMorph: aButton.
  aRow addMorphBack: aBox.
  aBox setBalloonText: 'Click here to edit the name of the script.' translated.
  "aRow addTransparentSpacerOfSize: 9."
  aRow addVariableTransparentSpacer.
 
  "Try It button"
  self hasParameter ifFalse:
  [aRow addMorphBack:
  ((ThreePhaseButtonMorph
  labelSymbol: #TryIt
  target: self
  actionSelector: #tryMe
  arguments: EmptyArray)
  actWhen: #whilePressed;
  balloonTextSelector: #tryMe).
  aRow addTransparentSpacerOfSize: 3].
 
+ "Step button"
+ self hasParameter ifFalse:
+ [aRow addMorphBack: (aButton := ThreePhaseButtonMorph
+ labelSymbol: #StepMe
+ target: self
+ actionSelector: #stepMe
+ arguments: EmptyArray).
+ aButton balloonTextSelector: #stepMe.
+ aRow addTransparentSpacerOfSize: 3].
+
  "Status controller"
  self hasParameter
  ifTrue:
  [aTile _ TypeListTile new choices: Vocabulary typeChoices dataType: nil.
  aTile addArrows.
  aTile setLiteral: self typeForParameter.
  aRow addMorphBack: aTile.
  aTile borderColor: Color red.
  aTile color: ScriptingSystem uniformTileInteriorColor.
  aTile setBalloonText: 'Drag from here to get a parameter tile' translated.
  aTile addCaretsAsAppropriate: true]
  ifFalse:
  [aRow addMorphBack: (aStatusMorph _ self scriptInstantiation statusControlMorph)].
 
  "aRow addTransparentSpacerOfSize: 3."
  aRow addVariableTransparentSpacer.
 
  "Gold-box"
  aRow addMorphBack: (goldBoxButton _ IconicButton new).
  goldBoxButton borderWidth: 0;
  labelGraphic: (ScriptingSystem formAtKey: 'RoundGoldBox'); color: Color transparent;
  actWhen: #buttonDown;
  target: self;
  actionSelector: #offerGoldBoxMenu;
  shedSelvedge;
  setBalloonText: 'click here to get a palette of useful tiles to use in your script.' translated.
  aRow addTransparentSpacerOfSize: 6@1.
 
  "Menu Button"
  aButton _ self menuButton.
  aButton actionSelector: #offerScriptorMenu.
  aRow addMorphBack: aButton.
 
  (playerScripted existingScriptInstantiationForSelector: scriptName)
  ifNotNilDo:
  [:inst | inst updateStatusMorph: aStatusMorph].
  ^ aRow!

Item was added:
+ ----- Method: ScriptEditorMorph>>deleteEtoysDebugger (in category '*etoys-debugger') -----
+ deleteEtoysDebugger
+ (self valueOfProperty: #etoysDebugger ifAbsent: [^ self])
+ delete.
+ self removeProperty: #etoysDebugger!

Item was added:
+ ----- Method: ScriptEditorMorph>>etoysDebugger (in category '*etoys-debugger') -----
+ etoysDebugger
+ ^ self valueOfProperty: #etoysDebugger ifAbsentPut: [EtoysDebugger on: self]!

Item was added:
+ ----- Method: ScriptEditorMorph>>nextTile (in category '*etoys-debugger') -----
+ nextTile
+ ^ (self ownerThatIsA: TileLikeMorph orA: ScriptEditorMorph)
+ nextTile
+ !

Item was added:
+ ----- Method: ScriptEditorMorph>>nextTileTo: (in category '*etoys-debugger') -----
+ nextTileTo: aTileMorph
+ | tiles index |
+ tiles := self tiles.
+ index := (tiles indexOf: aTileMorph) + 1.
+ index > tiles size
+ ifTrue: [self = self topEditor
+ ifTrue: [^ tiles at: 1]
+ ifFalse: [^ self nextTile]].
+ ^ tiles at: index!

Item was added:
+ ----- Method: ScriptEditorMorph>>stepMe (in category '*etoys-debugger') -----
+ stepMe
+ self etoysDebugger evaluateNextTile !

Item was added:
+ ----- Method: ScriptEditorMorph>>tiles (in category '*etoys-debugger') -----
+ tiles
+ ^ self tileRows collect: [:each | each first]!

Item was changed:
  ----- Method: ScriptEditorMorph>>tryMe (in category 'buttons') -----
  tryMe
  "Evaluate the given script on behalf of the scripted object"
 
  scriptName numArgs = 0
  ifTrue:
+ [self deleteEtoysDebugger.
+ self playerScripted performScriptIfCan: scriptName ]
- [self playerScripted performScriptIfCan: scriptName ]
 
  !

Item was changed:
  ----- Method: ScriptEditorMorph>>updateStatus (in category 'buttons') -----
  updateStatus
  "Update that status in the receiver's header.  "
 
  (self topEditor == self and: [firstTileRow ~~ 1]) ifTrue:
  [(submorphs size == 0 or: [(self firstSubmorph findA: ScriptStatusControl) isNil])
  ifTrue:
  [self replaceRow1].
  self updateStatusMorph: (self firstSubmorph findA: ScriptStatusControl)]!

Item was changed:
  ----- Method: ScriptStatusControl>>mouseUpTick:onItem: (in category 'mouse gestures') -----
  mouseUpTick: evt onItem: aMorph
  self removeAlarm: #offerTickingMenu:.
+ (self ownerThatIsA: ScriptEditorMorph) deleteEtoysDebugger.
  aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
  (scriptInstantiation status == #ticking) ifTrue:[
  scriptInstantiation status: #paused.
  aMorph color: (Color r: 1.0 g: 0.774 b: 0.774).
  aMorph isTicking: false.
  ] ifFalse:[
  scriptInstantiation status: #ticking.
  aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
  aMorph isTicking: true.
  ].
  scriptInstantiation updateAllStatusMorphs.!

Item was added:
+ ----- Method: TileLikeMorph>>nextTile (in category '*etoys-debugger') -----
+ nextTile
+ ^ (self ownerThatIsA: ScriptEditorMorph)
+ nextTileTo: self!

Item was added:
+ ----- Method: TimesRepeatMorph>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+ ^ anEtoysDebugger evaluateRepeat: self!

Item was added:
+ ----- Method: TimesRepeatTile>>calculateTimesToRepeat (in category '*etoys-debugger') -----
+ calculateTimesToRepeat
+ ^ (Compiler evaluate: (String streamContents: [:stream |
+ self numberOfTimesToRepeatPart submorphs
+ ifEmpty: [stream nextPutAll: '0']
+ ifNotEmpty: [self numberOfTimesToRepeatPart storeCodeOn: stream indent: 0]])
+ for: self topEditor playerScripted
+ logged: false)!

Item was added:
+ ----- Method: TimesRepeatTile>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+ ^ anEtoysDebugger evaluateRepeat: self!

Item was added:
+ ----- Method: TimesRepeatTile>>nextTile (in category '*etoys-debugger') -----
+ nextTile
+ "Instead of just returning my next tile I return my first tile if I haven't been evaluated enough times"
+ self timesToRepeat <= 0
+ ifTrue: [^ super nextTile].
+ self timesToRepeat: self timesToRepeat - 1.
+ ^ self whatToRepeatPart tiles at: 1 ifAbsent: [super nextTile]!

Item was added:
+ ----- Method: TimesRepeatTile>>timesToRepeat (in category '*etoys-debugger') -----
+ timesToRepeat
+ ^ self topEditor etoysDebugger timesToRepeat!

Item was added:
+ ----- Method: TimesRepeatTile>>timesToRepeat: (in category '*etoys-debugger') -----
+ timesToRepeat: aNumber
+ ^ self topEditor etoysDebugger timesToRepeat: aNumber!

Item was added:
+ ----- Method: TimesRepeatTile>>whatToRepeatPart (in category '*etoys-debugger') -----
+ whatToRepeatPart
+ ^ whatToRepeatPart!


_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev
Reply | Threaded
Open this post in threaded view
|

Re: Etoys: Etoys-kfr.99.mcz

Karl Ramberg
Why was this marked as spam ?

Karl

On Fri, Feb 3, 2012 at 11:41 PM,  <[hidden email]> wrote:

> Spam detection software, running on the system "europa.mgmt.inetu.net", has
> identified this incoming email as possible spam.  The original message
> has been attached to this so you can view it (if it isn't spam) or label
> similar future email.  If you have any questions, see
> the administrator of that system for details.
>
> Content preview:  Karl Ramberg uploaded a new version of Etoys to project Etoys:
>   http://source.squeak.org/etoys/Etoys-kfr.99.mcz ==================== Summary
>   ==================== Name: Etoys-kfr.99 Author: kfr Time: 3 February 2012,
>   11:41:17 pm UUID: 1b86a282-0433-9448-b74e-579b32ca4e32 Ancestors: Etoys-kfr.98
>   [...]
>
> Content analysis details:   (5.6 points, 5.0 required)
>
>  pts rule name              description
> ---- ---------------------- --------------------------------------------------
>  3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
>                            [score: 1.0000]
>  0.0 MISSING_MID            Missing Message-Id: header
>  1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
>  1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
>  3.8 TVD_STOCK1             BODY: TVD_STOCK1
>  0.1 RDNS_NONE              Delivered to trusted network by a host with no rDNS
> -3.9 AWL                    AWL: From: address is in the auto white-list
>
>
>
>
> ---------- Forwarded message ----------
> From: [hidden email]
> To: [hidden email]
> Cc:
> Date: Fri, 3 Feb 2012 22:41:56.469 0000
> Subject: Etoys: Etoys-kfr.99.mcz
> Karl Ramberg uploaded a new version of Etoys to project Etoys:
> http://source.squeak.org/etoys/Etoys-kfr.99.mcz
>
> ==================== Summary ====================
>
> Name: Etoys-kfr.99
> Author: kfr
> Time: 3 February 2012, 11:41:17 pm
> UUID: 1b86a282-0433-9448-b74e-579b32ca4e32
> Ancestors: Etoys-kfr.98
>
> This is Ricardo Moran's implementation of a step-next-phrase feature in etoy Scriptors, with minor curating by Scott Wallace.
>
> =============== Diff against Etoys-kfr.98 ===============
>
> Item was changed:
>  SystemOrganization addCategory: #'EToys-Kedama'!
>  SystemOrganization addCategory: #'Etoys-Buttons'!
>  SystemOrganization addCategory: #'Etoys-CustomEvents'!
>  SystemOrganization addCategory: #'Etoys-Experimental'!
>  SystemOrganization addCategory: #'Etoys-Help'!
>  SystemOrganization addCategory: #'Etoys-Outliner'!
>  SystemOrganization addCategory: #'Etoys-Protocols'!
>  SystemOrganization addCategory: #'Etoys-Protocols-Type Vocabularies'!
>  SystemOrganization addCategory: #'Etoys-Scratch'!
>  SystemOrganization addCategory: #'Etoys-Scripting'!
>  SystemOrganization addCategory: #'Etoys-Scripting Support'!
>  SystemOrganization addCategory: #'Etoys-Scripting Tiles'!
>  SystemOrganization addCategory: #'Etoys-Stacks'!
>  SystemOrganization addCategory: #'Etoys-StarSqueak'!
>  SystemOrganization addCategory: #'Etoys-Tile Scriptors'!
>  SystemOrganization addCategory: #'Etoys-Widgets'!
>  SystemOrganization addCategory: #'Etoys-SpeechBubbles'!
> + SystemOrganization addCategory: #'Etoys-Debugger'!
>
> Item was added:
> + ----- Method: CompoundTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
> + evaluateOn: anEtoysDebugger
> +       ^ anEtoysDebugger evaluateTest: self!
>
> Item was added:
> + ----- Method: CompoundTileMorph>>evaluateTestPart (in category '*etoys-debugger') -----
> + evaluateTestPart
> +       | condition |
> +       condition := testPart tiles at: 1 ifAbsent: [^ true].
> +       ^ Compiler evaluate: condition codeString
> +                               for: condition associatedPlayer
> +                               logged: false!
>
> Item was added:
> + ----- Method: CompoundTileMorph>>noPart (in category '*etoys-debugger') -----
> + noPart
> +       ^ noPart!
>
> Item was added:
> + ----- Method: CompoundTileMorph>>testPart (in category '*etoys-debugger') -----
> + testPart
> +       ^ testPart!
>
> Item was added:
> + ----- Method: CompoundTileMorph>>yesPart (in category '*etoys-debugger') -----
> + yesPart
> +       ^ yesPart!
>
> Item was added:
> + Object subclass: #EtoysDebugger
> +       instanceVariableNames: 'scriptEditor next timesToRepeat highlighter'
> +       classVariableNames: ''
> +       poolDictionaries: ''
> +       category: 'Etoys-Debugger'!
>
> Item was added:
> + ----- Method: EtoysDebugger class>>initialize (in category 'class initialization') -----
> + initialize
> + "
> +       self initialize
> + "
> + | buttonForm buttonPressedForm |
> + buttonForm := (Form
> +       extent: 30@30
> +       depth: 16
> +       fromArray: #( 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 65537 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0)
> +       offset: 0@0).
> + buttonPressedForm := (Form
> +       extent: 30@30
> +       depth: 16
> +       fromArray: #( 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 65537 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0)
> +       offset: 0@0).
> + ScriptingSystem saveForm: buttonForm atKey: #StepMe.
> + ScriptingSystem saveForm: buttonPressedForm atKey: #StepMePressed!
>
> Item was added:
> + ----- Method: EtoysDebugger class>>on: (in category 'instance creation') -----
> + on: aScriptEditorMorph
> +       ^ self basicNew initializeWith: aScriptEditorMorph!
>
> Item was added:
> + ----- Method: EtoysDebugger>>delete (in category 'as yet unclassified') -----
> + delete
> +       highlighter ifNotNil: [:h | h delete]!
>
> Item was added:
> + ----- Method: EtoysDebugger>>evaluateNextTile (in category 'evaluating') -----
> + evaluateNextTile
> +       [next evaluateOn: self]
> +               on: Error do: [:err || newNext |
> +                       newNext := scriptEditor tiles at: 1 ifAbsent: [^ self].
> +                       newNext = next
> +                               ifTrue: [err pass]
> +                               ifFalse: [next := newNext].
> +                       self evaluateNextTile]!
>
> Item was added:
> + ----- Method: EtoysDebugger>>evaluatePhrase: (in category 'evaluating') -----
> + evaluatePhrase: tile
> +       self highlight: tile.
> +       tile try.
> +       next := tile nextTile!
>
> Item was added:
> + ----- Method: EtoysDebugger>>evaluateRepeat: (in category 'evaluating') -----
> + evaluateRepeat: tile
> +       self highlight: tile numberOfTimesToRepeatPart;
> +               timesToRepeat: tile calculateTimesToRepeat.
> +       next := tile nextTile!
>
> Item was added:
> + ----- Method: EtoysDebugger>>evaluateTest: (in category 'evaluating') -----
> + evaluateTest: test
> +       | tile |
> +       test testPart tiles isEmpty
> +               ifTrue: [next := test yesPart tiles at: 1 ifAbsent: [test nextTile].
> +                       ^ self evaluateNextTile].
> +       self highlight: test testPart.
> +       tile := test evaluateTestPart
> +               ifTrue: [test yesPart]
> +               ifFalse: [test noPart].
> +       next := tile tiles at: 1 ifAbsent: [test nextTile]!
>
> Item was added:
> + ----- Method: EtoysDebugger>>highlight: (in category 'highlighting') -----
> + highlight: aMorph
> +       "| rect |
> +       rect := BorderedMorph newBounds: aMorph bounds color: Color transparent.
> +       rect openInWorld.
> +       World addAlarm: #delete
> +               withArguments: #()
> +               for: rect
> +               at: (Time millisecondClockValue + 200)."
> +       highlighter ifNotNil: [highlighter delete].
> +       highlighter := HighlightMorph on: aMorph.
> +       highlighter openInWorld!
>
> Item was added:
> + ----- Method: EtoysDebugger>>initializeWith: (in category 'initialization') -----
> + initializeWith: aScriptEditorMorph
> +       scriptEditor := aScriptEditorMorph.
> +       next := scriptEditor tiles at: 1 ifAbsent: nil.
> +       self initialize!
>
> Item was added:
> + ----- Method: EtoysDebugger>>timesToRepeat (in category 'accessing') -----
> + timesToRepeat
> +       ^ timesToRepeat!
>
> Item was added:
> + ----- Method: EtoysDebugger>>timesToRepeat: (in category 'accessing') -----
> + timesToRepeat: aNumber
> +       timesToRepeat := aNumber!
>
> Item was added:
> + Morph subclass: #HighlightMorph
> +       instanceVariableNames: 'target lastHash stepTime'
> +       classVariableNames: ''
> +       poolDictionaries: ''
> +       category: 'Etoys-Debugger'!
>
> Item was added:
> + ----- Method: HighlightMorph class>>on: (in category 'as yet unclassified') -----
> + on: targetMorph
> +       ^ self basicNew initializeWith: targetMorph!
>
> Item was added:
> + ----- Method: HighlightMorph>>containsPoint: (in category 'testing') -----
> + containsPoint: aPoint
> + ^ (self bounds containsPoint: aPoint) and:
> +         [(self imageForm isTransparentAt: aPoint - bounds origin) not]!
>
> Item was added:
> + ----- Method: HighlightMorph>>incrementStepTime (in category 'stepping') -----
> + incrementStepTime
> +       stepTime := (stepTime + 1) min: self maximumStepTime!
>
> Item was added:
> + ----- Method: HighlightMorph>>initialize (in category 'initialize-release') -----
> + initialize
> +       super initialize.
> +       stepTime := self minimumStepTime.
> +       self color: Color transparent;
> +               borderWidth: 2;
> +               borderColor: Color red muchDarker muchDarker!
>
> Item was added:
> + ----- Method: HighlightMorph>>initializeWith: (in category 'initialize-release') -----
> + initializeWith: targetMorph
> +       target := targetMorph.
> +       self initialize!
>
> Item was added:
> + ----- Method: HighlightMorph>>maximumStepTime (in category 'stepping') -----
> + maximumStepTime
> +       ^500!
>
> Item was added:
> + ----- Method: HighlightMorph>>minimumStepTime (in category 'stepping') -----
> + minimumStepTime
> +       ^20!
>
> Item was added:
> + ----- Method: HighlightMorph>>step (in category 'stepping') -----
> + step
> +       (target isNil or: [lastHash = (lastHash := target boundsSignatureHash)])
> +               ifTrue: [self incrementStepTime]
> +               ifFalse: [stepTime := self minimumStepTime].
> +
> +       target notNil ifTrue: [
> +               target isInWorld ifFalse: [^self delete].
> +               self bounds: target bounds]!
>
> Item was added:
> + ----- Method: HighlightMorph>>stepTime (in category 'stepping') -----
> + stepTime
> +       ^ stepTime!
>
> Item was changed:
>  ----- Method: Morph class>>helpContributions (in category '*eToys-scripting') -----
>  helpContributions
>        "Answer a list of pairs of the form (<symbol> <help message> ) to contribute to the system help dictionary"
>
>  "NB: Many of the items here are not needed any more since they're specified as part of command definitions now.  Someone needs to take the time to go through the list and remove items no longer needed.  But who's got that kind of time?"
>
>        ^ #(
>                (acceptScript:for:
>                        'submit the contents of the given script editor as the code defining the given selector')
>                (actorState
>                        'return the ActorState object for the receiver, creating it if necessary')
>                (addInstanceVariable
>                        'start the interaction for adding a new variable to the object')
>                (addPlayerMenuItemsTo:hand:
>                        'add player-specific menu items to the given menu, on behalf of the given hand.  At present, these are only commands relating to the turtle')
>                (addYesNoToHand
>                        'Press here to tear off a TEST/YES/NO unit which you can drop into your script')
>                (allScriptEditors
>                        'answer a list off the extant ScriptEditors for the receiver')
>                (amount
>                        'The amount of displacement')
>                (angle
>                        'The angular displacement')
>                (anonymousScriptEditorFor:
>                        'answer a new ScriptEditor object to serve as the place for scripting an anonymous (unnamed, unsaved) script for the receiver')
>                (append:
>                        'add an object to this container')
>                (prepend:
>                        'add an object to this container')
>                (assignDecrGetter:setter:amt:
>                        'evaluate the decrement variant of assignment')
>                (assignGetter:setter:amt:
>                        'evaluate the vanilla variant of assignment')
>                (assignIncrGetter:setter:amt:
>                        'evalute the increment version of assignment')
>                (assignMultGetter:setter:amt:
>                        'evaluate the multiplicative version of assignment')
>                (assureEventHandlerRepresentsStatus
>                        'make certain that the event handler associated with my current costume is set up to conform to my current script-status')
>                (assureExternalName
>                        'If I do not currently have an external name assigned, get one now')
>                (assureUniClass
>                        'make certain that I am a member a uniclass (i.e. a unique subclass); if I am not, create one now and become me into an instance of it')
>                (availableCostumeNames
>                        'answer a list of strings representing the names of all costumes currently available for me')
>                (availableCostumesForArrows
>                        'answer a list of actual, instantiated costumes for me, which can be cycled through as the user hits a next-costume or previous-costume button in a viewer')
>                (beep:
>                        'make the specified sound')
>                (borderColor
>                        'The color of the object''s border')
>                (borderWidth
>                        'The width of the object''s border')
>                (bottom
>                        'My bottom edge, measured downward from the top edge of the world')
>                (bounce:
>                        'If object strayed beyond the boundaries of its container, make it reflect back into it, making the specified noise while doing so.')
>                (bounce
>                        'If object strayed beyond the boundaries of its container, make it reflect back into it')
>                (chooseTrigger
>  'When this script should run.
>  "normal" means "only when called"')
>                (clearTurtleTrails
>                        'Clear all the pen trails in the interior.')
>                (clearOwnersPenTrails
>                        'Clear all the pen trails in my container.')
>                (color
>                        'The object''s interior color')
>                (colorSees
>                        'Whether a given color in the object is over another given color')
>                (colorUnder
>                        'The color under the center of the object')
>                (copy
>                        'Return a new object that is very much like this one')
>                (cursor
>                        'The index of the chosen element')
>                (deleteCard
>                        'Delete the current card.')
>                (dismiss
>                        'Click here to dismiss me')
>                (doMenuItem:
>                        'Do a menu item, the same way as if it were chosen manually')
>                (doScript:
>                        'Perform the given script once, on the next tick.')
>                (elementNumber
>                        'My element number as seen by my owner')
>                (fire
>                        'Run any and all button-firing scripts of this object')
>                (firstPage
>                        'Go to first page of book')
>                (followPath
>                                'Retrace the path the object has memorized, if any.')
>                (forward:
>                        'Moves the object forward in the direction it is heading')
>                (goto:
>                        'Go to the specfied book page')
>                (goToNextCardInStack
>                        'Go to the next card')
>                (goToPreviousCardInStack
>                        'Go to the previous card.')
>                (goToRightOf:
>                        'Align the object just to the right of any specified object.')
>                (heading
>                        'Which direction the object is facing.  0 is straight up')
>                (height
>                        'The distance between the top and bottom edges of the object')
>                (hide
>                        'Make the object so that it does not display and cannot handle input')
>                (initiatePainting
>                        'Initiate painting of a new object in the standard playfield.')
>                (initiatePaintingIn:
>                        'Initiate painting of a new object in the given place.')
>                (isOverColor
>                        'Whether any part of this object is directly over the specified color')
>                (isUnderMouse
>                        'Whether any part of this object is beneath the current mouse-cursor position')
>                (lastPage
>                        'Go to the last page of the book.')
>                (left
>                        'My left edge, measured from the left edge of the World')
>                (leftRight
>                        'The horizontal displacement')
>                (liftAllPens
>                        'Lift the pens on all the objects in my interior.')
>                (lowerAllPens
>                        'Lower the pens on all the objects in my interior.')
>                (mouseX
>                        'The x coordinate of the mouse pointer')
>                (mouseY
>                        'The y coordinate of the mouse pointer')
>                (moveToward:
>                        'Move in the direction of another object.')
>                (insertCard
>                        'Create a new card.')
>                (nextPage
>                        'Go to next page.')
>                (numberAtCursor
>                        'The number held by the object at the chosen element')
>                (objectNameInHalo
>                        'Object''s name -- To change: click here, edit, hit ENTER')
>                (obtrudes
>                        'Whether any part of the object sticks out beyond its container''s borders')
>                (offerScriptorMenu
>                        'The Scriptee.
>  Press here to get a menu')
>                (pauseScript:
>                        'Make a running script become paused.')
>                (penDown
>                        'Whether the object''s pen is down (true) or up (false)')
>                (penColor
>                        'The color of the object''s pen')
>                (penSize
>                        'The size of the object''s pen')
>                (clearPenTrails
>                        'Clear all pen trails in the current playfield')
>                (playerSeeingColorPhrase
>                        'The player who "sees" a given color')
>                (previousPage
>                        'Go to previous page')
>
>                (show
>                        'If object was hidden, make it show itself again.')
>                (startScript:
>                        'Make a script start running.')
>                (stopScript:
>                        'Make a script stop running.')
>                (top
>                        'My top edge, measured downward from the top edge of the world')
>                (right
>                        'My right edge, measured from the left edge of the world')
>                (roundUpStrays
>                        'Bring all out-of-container subparts back into view.')
>                (scaleFactor
>                        'The amount by which the object is scaled')
> +               (stepMe
> +                       'Run the next phrase in the script.')
>                (stopScript:
>                        'make the specified script stop running')
>                (tellAllSiblings:
>                        'send a message to all of my sibling instances')
>                (try
>                        'Run this command once.' translatedNoop)
>                (tryMe
>                        'Click here to run this script once; hold button down to run repeatedly'  translatedNoop)
>                (turn:
>                        'Change the heading of the object by the specified amount')
>                (unhideHiddenObjects
>                        'Unhide all hidden objects.')
>                (upDown
>                        'The vertical displacement')
>                (userScript
>                        'This is a script defined by you.')
>                (userSlot
>                        'This is a variable defined by you.  Click here to change its type')
>                (valueAtCursor
>                        'The chosen element')
>                (wearCostumeOf:
>                        'Make this object''s appearance be the same as that of another object')
>                (width
>                        'The distance between the left and right edges of the object')
>                (wrap
>                        'If object has strayed beond the boundaries of its container, make it reappear from the opposite edge.')
>                (x
>                        'The x coordinate, measured from the left of the container')
>                (y
>                        'The y-coordinate, measured upward from the bottom of the container')
>
>                )
>  !
>
> Item was added:
> + ----- Method: PhraseTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
> + evaluateOn: anEtoysDebugger
> +       ^ anEtoysDebugger evaluatePhrase: self!
>
> Item was changed:
>  ----- Method: PhraseTileMorph>>try (in category 'miscellaneous') -----
>  try
>        "Evaluate the given phrase once"
>
>        | aPlayer |
>        (userScriptSelector notNil and: [userScriptSelector numArgs = 0])
>                ifTrue:
>                        [aPlayer _ self objectViewed player.
>                        aPlayer triggerScript: userScriptSelector]
>                ifFalse:
>                        [[Compiler evaluate:
>                                self codeString
> +                               for: (self topEditor
> +                                       ifNil: [self associatedPlayer]
> +                                       ifNotNil: [:editor | editor playerScripted])
> -                               for: self associatedPlayer
>                                logged: false] ifError: [self inform: 'evaluation error' translated]]!
>
> Item was changed:
>  ----- Method: ScriptEditorMorph>>buttonRowForEditor (in category 'buttons') -----
>  buttonRowForEditor
>        "Answer a row of buttons that comprise the header at the top of the Scriptor"
>
>        | aRow aString aStatusMorph aButton aTile aMorph goldBoxButton aBox |
>        aRow _ AlignmentMorph newRow color: ScriptingSystem baseColor; layoutInset: 1.
>        aRow hResizing: #spaceFill.
>        aRow vResizing: #shrinkWrap.
>        self addDismissButtonTo: aRow.
>        aRow addTransparentSpacerOfSize: 9.
>
>        "Player's name"
>        aString _ playerScripted externalName.
>        aMorph _ StringMorph contents: aString font: ScriptingSystem fontForTiles.
>        aMorph setNameTo: 'title'.
>        aRow addMorphBack: aMorph.
>        aRow addTransparentSpacerOfSize: 6.
>
>        "Script's name"
>        aBox := AlignmentMorph newRow.
>        aBox hResizing: #shrinkWrap; vResizing: #shrinkWrap.
>        aBox color: (Color r: 0.839 g: 1.0 b: 0.806).
>        aBox borderWidth: 1.
>        aBox  borderColor: (Color r: 0.645 g: 0.774 b: 0.613).
>        aButton _ UpdatingStringMorph new.
>        aButton useStringFormat;
>                target:  self;
>                getSelector: #scriptTitle;
>                setNameTo: 'script name';
>                font: ScriptingSystem fontForNameEditingInScriptor;
>                putSelector: #setScriptNameTo:;
>                setProperty: #okToTextEdit toValue: true;
>                step;
>                yourself.
>        aBox addMorph: aButton.
>        aRow addMorphBack: aBox.
>        aBox setBalloonText: 'Click here to edit the name of the script.' translated.
>        "aRow addTransparentSpacerOfSize: 9."
>        aRow addVariableTransparentSpacer.
>
>        "Try It button"
>        self hasParameter ifFalse:
>                [aRow addMorphBack:
>                        ((ThreePhaseButtonMorph
>                                labelSymbol: #TryIt
>                                target: self
>                                actionSelector: #tryMe
>                                arguments: EmptyArray)
>                                actWhen: #whilePressed;
>                                balloonTextSelector: #tryMe).
>                aRow addTransparentSpacerOfSize: 3].
>
> +       "Step button"
> +       self hasParameter ifFalse:
> +               [aRow addMorphBack: (aButton := ThreePhaseButtonMorph
> +                               labelSymbol: #StepMe
> +                               target: self
> +                               actionSelector: #stepMe
> +                               arguments: EmptyArray).
> +               aButton balloonTextSelector: #stepMe.
> +               aRow addTransparentSpacerOfSize: 3].
> +
>        "Status controller"
>        self hasParameter
>                ifTrue:
>                        [aTile _ TypeListTile new choices: Vocabulary typeChoices dataType: nil.
>                        aTile addArrows.
>                        aTile setLiteral: self typeForParameter.
>                        aRow addMorphBack: aTile.
>                        aTile borderColor: Color red.
>                        aTile color: ScriptingSystem uniformTileInteriorColor.
>                        aTile setBalloonText: 'Drag from here to get a parameter tile' translated.
>                        aTile addCaretsAsAppropriate: true]
>                ifFalse:
>                        [aRow addMorphBack: (aStatusMorph _ self scriptInstantiation statusControlMorph)].
>
>        "aRow addTransparentSpacerOfSize: 3."
>        aRow addVariableTransparentSpacer.
>
>        "Gold-box"
>        aRow addMorphBack: (goldBoxButton _ IconicButton new).
>        goldBoxButton borderWidth: 0;
>                        labelGraphic: (ScriptingSystem formAtKey: 'RoundGoldBox'); color: Color transparent;
>                        actWhen: #buttonDown;
>                        target: self;
>                        actionSelector: #offerGoldBoxMenu;
>                        shedSelvedge;
>                        setBalloonText: 'click here to get a palette of useful tiles to use in your script.' translated.
>        aRow addTransparentSpacerOfSize: 6@1.
>
>        "Menu Button"
>        aButton _ self menuButton.
>        aButton actionSelector: #offerScriptorMenu.
>        aRow addMorphBack: aButton.
>
>        (playerScripted existingScriptInstantiationForSelector: scriptName)
>                ifNotNilDo:
>                        [:inst | inst updateStatusMorph: aStatusMorph].
>        ^ aRow!
>
> Item was added:
> + ----- Method: ScriptEditorMorph>>deleteEtoysDebugger (in category '*etoys-debugger') -----
> + deleteEtoysDebugger
> +       (self valueOfProperty: #etoysDebugger ifAbsent: [^ self])
> +               delete.
> +       self removeProperty: #etoysDebugger!
>
> Item was added:
> + ----- Method: ScriptEditorMorph>>etoysDebugger (in category '*etoys-debugger') -----
> + etoysDebugger
> +       ^ self valueOfProperty: #etoysDebugger ifAbsentPut: [EtoysDebugger on: self]!
>
> Item was added:
> + ----- Method: ScriptEditorMorph>>nextTile (in category '*etoys-debugger') -----
> + nextTile
> +       ^ (self ownerThatIsA: TileLikeMorph orA: ScriptEditorMorph)
> +               nextTile
> + !
>
> Item was added:
> + ----- Method: ScriptEditorMorph>>nextTileTo: (in category '*etoys-debugger') -----
> + nextTileTo: aTileMorph
> +       | tiles index |
> +       tiles := self tiles.
> +       index := (tiles indexOf: aTileMorph) + 1.
> +       index > tiles size
> +               ifTrue: [self = self topEditor
> +                       ifTrue: [^ tiles at: 1]
> +                       ifFalse: [^ self nextTile]].
> +       ^ tiles at: index!
>
> Item was added:
> + ----- Method: ScriptEditorMorph>>stepMe (in category '*etoys-debugger') -----
> + stepMe
> +       self etoysDebugger evaluateNextTile !
>
> Item was added:
> + ----- Method: ScriptEditorMorph>>tiles (in category '*etoys-debugger') -----
> + tiles
> +       ^ self tileRows collect: [:each | each first]!
>
> Item was changed:
>  ----- Method: ScriptEditorMorph>>tryMe (in category 'buttons') -----
>  tryMe
>        "Evaluate the given script on behalf of the scripted object"
>
>        scriptName numArgs = 0
>                ifTrue:
> +                       [self deleteEtoysDebugger.
> +                       self playerScripted performScriptIfCan: scriptName ]
> -                       [self playerScripted performScriptIfCan: scriptName ]
>
>  !
>
> Item was changed:
>  ----- Method: ScriptEditorMorph>>updateStatus (in category 'buttons') -----
>  updateStatus
>        "Update that status in the receiver's header.  "
>
>        (self topEditor == self and: [firstTileRow ~~ 1]) ifTrue:
>                [(submorphs size == 0 or: [(self firstSubmorph findA: ScriptStatusControl) isNil])
>                        ifTrue:
>                                [self replaceRow1].
>                self updateStatusMorph: (self firstSubmorph findA: ScriptStatusControl)]!
>
> Item was changed:
>  ----- Method: ScriptStatusControl>>mouseUpTick:onItem: (in category 'mouse gestures') -----
>  mouseUpTick: evt onItem: aMorph
>        self removeAlarm: #offerTickingMenu:.
> +       (self ownerThatIsA: ScriptEditorMorph) deleteEtoysDebugger.
>        aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
>        (scriptInstantiation status == #ticking) ifTrue:[
>                scriptInstantiation status: #paused.
>                aMorph color: (Color r: 1.0 g: 0.774 b: 0.774).
>                aMorph isTicking: false.
>        ] ifFalse:[
>                scriptInstantiation status: #ticking.
>                aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
>                aMorph isTicking: true.
>        ].
>        scriptInstantiation updateAllStatusMorphs.!
>
> Item was added:
> + ----- Method: TileLikeMorph>>nextTile (in category '*etoys-debugger') -----
> + nextTile
> +       ^ (self ownerThatIsA: ScriptEditorMorph)
> +               nextTileTo: self!
>
> Item was added:
> + ----- Method: TimesRepeatMorph>>evaluateOn: (in category '*etoys-debugger') -----
> + evaluateOn: anEtoysDebugger
> +       ^ anEtoysDebugger evaluateRepeat: self!
>
> Item was added:
> + ----- Method: TimesRepeatTile>>calculateTimesToRepeat (in category '*etoys-debugger') -----
> + calculateTimesToRepeat
> +       ^ (Compiler evaluate: (String streamContents: [:stream |
> +                       self numberOfTimesToRepeatPart submorphs
> +                               ifEmpty: [stream nextPutAll: '0']
> +                               ifNotEmpty: [self numberOfTimesToRepeatPart storeCodeOn: stream indent: 0]])
> +               for: self topEditor playerScripted
> +               logged: false)!
>
> Item was added:
> + ----- Method: TimesRepeatTile>>evaluateOn: (in category '*etoys-debugger') -----
> + evaluateOn: anEtoysDebugger
> +       ^ anEtoysDebugger evaluateRepeat: self!
>
> Item was added:
> + ----- Method: TimesRepeatTile>>nextTile (in category '*etoys-debugger') -----
> + nextTile
> +       "Instead of just returning my next tile I return my first tile if I haven't been evaluated enough times"
> +       self timesToRepeat <= 0
> +               ifTrue: [^ super nextTile].
> +       self timesToRepeat: self timesToRepeat - 1.
> +       ^ self whatToRepeatPart tiles at: 1 ifAbsent: [super nextTile]!
>
> Item was added:
> + ----- Method: TimesRepeatTile>>timesToRepeat (in category '*etoys-debugger') -----
> + timesToRepeat
> +       ^ self topEditor etoysDebugger timesToRepeat!
>
> Item was added:
> + ----- Method: TimesRepeatTile>>timesToRepeat: (in category '*etoys-debugger') -----
> + timesToRepeat: aNumber
> +       ^ self topEditor etoysDebugger timesToRepeat: aNumber!
>
> Item was added:
> + ----- Method: TimesRepeatTile>>whatToRepeatPart (in category '*etoys-debugger') -----
> + whatToRepeatPart
> +       ^ whatToRepeatPart!
>
>
> _______________________________________________
> etoys-dev mailing list
> [hidden email]
> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>
_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev
Reply | Threaded
Open this post in threaded view
|

Re: Etoys: Etoys-kfr.99.mcz

Ricardo Moran
In reply to this post by commits-2
I'm *really* glad to see this getting in :)

Also, I've been working on the #batchPenTrails issue and I think I got it solved now. I'll commit my changes to Etoys so that you can review them.

Thanks,
Richo

On Fri, Feb 3, 2012 at 7:41 PM, <[hidden email]> wrote:
Spam detection software, running on the system "europa.mgmt.inetu.net", has
identified this incoming email as possible spam.  The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email.  If you have any questions, see
the administrator of that system for details.

Content preview:  Karl Ramberg uploaded a new version of Etoys to project Etoys:
  http://source.squeak.org/etoys/Etoys-kfr.99.mcz ==================== Summary
  ==================== Name: Etoys-kfr.99 Author: kfr Time: 3 February 2012,
  11:41:17 pm UUID: 1b86a282-0433-9448-b74e-579b32ca4e32 Ancestors: Etoys-kfr.98
  [...]

Content analysis details:   (5.6 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
                           [score: 1.0000]
 0.0 MISSING_MID            Missing Message-Id: header
 1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
 1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
 3.8 TVD_STOCK1             BODY: TVD_STOCK1
 0.1 RDNS_NONE              Delivered to trusted network by a host with no rDNS
-3.9 AWL                    AWL: From: address is in the auto white-list




---------- Forwarded message ----------
From: [hidden email]
To: [hidden email]
Cc: 
Date: Fri, 3 Feb 2012 22:41:56.469 0000
Subject: Etoys: Etoys-kfr.99.mcz
Karl Ramberg uploaded a new version of Etoys to project Etoys:
http://source.squeak.org/etoys/Etoys-kfr.99.mcz

==================== Summary ====================

Name: Etoys-kfr.99
Author: kfr
Time: 3 February 2012, 11:41:17 pm
UUID: 1b86a282-0433-9448-b74e-579b32ca4e32
Ancestors: Etoys-kfr.98

This is Ricardo Moran's implementation of a step-next-phrase feature in etoy Scriptors, with minor curating by Scott Wallace.

=============== Diff against Etoys-kfr.98 ===============

Item was changed:
 SystemOrganization addCategory: #'EToys-Kedama'!
 SystemOrganization addCategory: #'Etoys-Buttons'!
 SystemOrganization addCategory: #'Etoys-CustomEvents'!
 SystemOrganization addCategory: #'Etoys-Experimental'!
 SystemOrganization addCategory: #'Etoys-Help'!
 SystemOrganization addCategory: #'Etoys-Outliner'!
 SystemOrganization addCategory: #'Etoys-Protocols'!
 SystemOrganization addCategory: #'Etoys-Protocols-Type Vocabularies'!
 SystemOrganization addCategory: #'Etoys-Scratch'!
 SystemOrganization addCategory: #'Etoys-Scripting'!
 SystemOrganization addCategory: #'Etoys-Scripting Support'!
 SystemOrganization addCategory: #'Etoys-Scripting Tiles'!
 SystemOrganization addCategory: #'Etoys-Stacks'!
 SystemOrganization addCategory: #'Etoys-StarSqueak'!
 SystemOrganization addCategory: #'Etoys-Tile Scriptors'!
 SystemOrganization addCategory: #'Etoys-Widgets'!
 SystemOrganization addCategory: #'Etoys-SpeechBubbles'!
+ SystemOrganization addCategory: #'Etoys-Debugger'!

Item was added:
+ ----- Method: CompoundTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+       ^ anEtoysDebugger evaluateTest: self!

Item was added:
+ ----- Method: CompoundTileMorph>>evaluateTestPart (in category '*etoys-debugger') -----
+ evaluateTestPart
+       | condition |
+       condition := testPart tiles at: 1 ifAbsent: [^ true].
+       ^ Compiler evaluate: condition codeString
+                               for: condition associatedPlayer
+                               logged: false!

Item was added:
+ ----- Method: CompoundTileMorph>>noPart (in category '*etoys-debugger') -----
+ noPart
+       ^ noPart!

Item was added:
+ ----- Method: CompoundTileMorph>>testPart (in category '*etoys-debugger') -----
+ testPart
+       ^ testPart!

Item was added:
+ ----- Method: CompoundTileMorph>>yesPart (in category '*etoys-debugger') -----
+ yesPart
+       ^ yesPart!

Item was added:
+ Object subclass: #EtoysDebugger
+       instanceVariableNames: 'scriptEditor next timesToRepeat highlighter'
+       classVariableNames: ''
+       poolDictionaries: ''
+       category: 'Etoys-Debugger'!

Item was added:
+ ----- Method: EtoysDebugger class>>initialize (in category 'class initialization') -----
+ initialize
+ "
+       self initialize
+ "
+ | buttonForm buttonPressedForm |
+ buttonForm := (Form
+       extent: 30@30
+       depth: 16
+       fromArray: #( 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 65537 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0)
+       offset: 0@0).
+ buttonPressedForm := (Form
+       extent: 30@30
+       depth: 16
+       fromArray: #( 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 65537 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0)
+       offset: 0@0).
+ ScriptingSystem saveForm: buttonForm atKey: #StepMe.
+ ScriptingSystem saveForm: buttonPressedForm atKey: #StepMePressed!

Item was added:
+ ----- Method: EtoysDebugger class>>on: (in category 'instance creation') -----
+ on: aScriptEditorMorph
+       ^ self basicNew initializeWith: aScriptEditorMorph!

Item was added:
+ ----- Method: EtoysDebugger>>delete (in category 'as yet unclassified') -----
+ delete
+       highlighter ifNotNil: [:h | h delete]!

Item was added:
+ ----- Method: EtoysDebugger>>evaluateNextTile (in category 'evaluating') -----
+ evaluateNextTile
+       [next evaluateOn: self]
+               on: Error do: [:err || newNext |
+                       newNext := scriptEditor tiles at: 1 ifAbsent: [^ self].
+                       newNext = next
+                               ifTrue: [err pass]
+                               ifFalse: [next := newNext].
+                       self evaluateNextTile]!

Item was added:
+ ----- Method: EtoysDebugger>>evaluatePhrase: (in category 'evaluating') -----
+ evaluatePhrase: tile
+       self highlight: tile.
+       tile try.
+       next := tile nextTile!

Item was added:
+ ----- Method: EtoysDebugger>>evaluateRepeat: (in category 'evaluating') -----
+ evaluateRepeat: tile
+       self highlight: tile numberOfTimesToRepeatPart;
+               timesToRepeat: tile calculateTimesToRepeat.
+       next := tile nextTile!

Item was added:
+ ----- Method: EtoysDebugger>>evaluateTest: (in category 'evaluating') -----
+ evaluateTest: test
+       | tile |
+       test testPart tiles isEmpty
+               ifTrue: [next := test yesPart tiles at: 1 ifAbsent: [test nextTile].
+                       ^ self evaluateNextTile].
+       self highlight: test testPart.
+       tile := test evaluateTestPart
+               ifTrue: [test yesPart]
+               ifFalse: [test noPart].
+       next := tile tiles at: 1 ifAbsent: [test nextTile]!

Item was added:
+ ----- Method: EtoysDebugger>>highlight: (in category 'highlighting') -----
+ highlight: aMorph
+       "| rect |
+       rect := BorderedMorph newBounds: aMorph bounds color: Color transparent.
+       rect openInWorld.
+       World addAlarm: #delete
+               withArguments: #()
+               for: rect
+               at: (Time millisecondClockValue + 200)."
+       highlighter ifNotNil: [highlighter delete].
+       highlighter := HighlightMorph on: aMorph.
+       highlighter openInWorld!

Item was added:
+ ----- Method: EtoysDebugger>>initializeWith: (in category 'initialization') -----
+ initializeWith: aScriptEditorMorph
+       scriptEditor := aScriptEditorMorph.
+       next := scriptEditor tiles at: 1 ifAbsent: nil.
+       self initialize!

Item was added:
+ ----- Method: EtoysDebugger>>timesToRepeat (in category 'accessing') -----
+ timesToRepeat
+       ^ timesToRepeat!

Item was added:
+ ----- Method: EtoysDebugger>>timesToRepeat: (in category 'accessing') -----
+ timesToRepeat: aNumber
+       timesToRepeat := aNumber!

Item was added:
+ Morph subclass: #HighlightMorph
+       instanceVariableNames: 'target lastHash stepTime'
+       classVariableNames: ''
+       poolDictionaries: ''
+       category: 'Etoys-Debugger'!

Item was added:
+ ----- Method: HighlightMorph class>>on: (in category 'as yet unclassified') -----
+ on: targetMorph
+       ^ self basicNew initializeWith: targetMorph!

Item was added:
+ ----- Method: HighlightMorph>>containsPoint: (in category 'testing') -----
+ containsPoint: aPoint
+ ^ (self bounds containsPoint: aPoint) and:
+         [(self imageForm isTransparentAt: aPoint - bounds origin) not]!

Item was added:
+ ----- Method: HighlightMorph>>incrementStepTime (in category 'stepping') -----
+ incrementStepTime
+       stepTime := (stepTime + 1) min: self maximumStepTime!

Item was added:
+ ----- Method: HighlightMorph>>initialize (in category 'initialize-release') -----
+ initialize
+       super initialize.
+       stepTime := self minimumStepTime.
+       self color: Color transparent;
+               borderWidth: 2;
+               borderColor: Color red muchDarker muchDarker!

Item was added:
+ ----- Method: HighlightMorph>>initializeWith: (in category 'initialize-release') -----
+ initializeWith: targetMorph
+       target := targetMorph.
+       self initialize!

Item was added:
+ ----- Method: HighlightMorph>>maximumStepTime (in category 'stepping') -----
+ maximumStepTime
+       ^500!

Item was added:
+ ----- Method: HighlightMorph>>minimumStepTime (in category 'stepping') -----
+ minimumStepTime
+       ^20!

Item was added:
+ ----- Method: HighlightMorph>>step (in category 'stepping') -----
+ step
+       (target isNil or: [lastHash = (lastHash := target boundsSignatureHash)])
+               ifTrue: [self incrementStepTime]
+               ifFalse: [stepTime := self minimumStepTime].
+
+       target notNil ifTrue: [
+               target isInWorld ifFalse: [^self delete].
+               self bounds: target bounds]!

Item was added:
+ ----- Method: HighlightMorph>>stepTime (in category 'stepping') -----
+ stepTime
+       ^ stepTime!

Item was changed:
 ----- Method: Morph class>>helpContributions (in category '*eToys-scripting') -----
 helpContributions
       "Answer a list of pairs of the form (<symbol> <help message> ) to contribute to the system help dictionary"

 "NB: Many of the items here are not needed any more since they're specified as part of command definitions now.  Someone needs to take the time to go through the list and remove items no longer needed.  But who's got that kind of time?"

       ^ #(
               (acceptScript:for:
                       'submit the contents of the given script editor as the code defining the given selector')
               (actorState
                       'return the ActorState object for the receiver, creating it if necessary')
               (addInstanceVariable
                       'start the interaction for adding a new variable to the object')
               (addPlayerMenuItemsTo:hand:
                       'add player-specific menu items to the given menu, on behalf of the given hand.  At present, these are only commands relating to the turtle')
               (addYesNoToHand
                       'Press here to tear off a TEST/YES/NO unit which you can drop into your script')
               (allScriptEditors
                       'answer a list off the extant ScriptEditors for the receiver')
               (amount
                       'The amount of displacement')
               (angle
                       'The angular displacement')
               (anonymousScriptEditorFor:
                       'answer a new ScriptEditor object to serve as the place for scripting an anonymous (unnamed, unsaved) script for the receiver')
               (append:
                       'add an object to this container')
               (prepend:
                       'add an object to this container')
               (assignDecrGetter:setter:amt:
                       'evaluate the decrement variant of assignment')
               (assignGetter:setter:amt:
                       'evaluate the vanilla variant of assignment')
               (assignIncrGetter:setter:amt:
                       'evalute the increment version of assignment')
               (assignMultGetter:setter:amt:
                       'evaluate the multiplicative version of assignment')
               (assureEventHandlerRepresentsStatus
                       'make certain that the event handler associated with my current costume is set up to conform to my current script-status')
               (assureExternalName
                       'If I do not currently have an external name assigned, get one now')
               (assureUniClass
                       'make certain that I am a member a uniclass (i.e. a unique subclass); if I am not, create one now and become me into an instance of it')
               (availableCostumeNames
                       'answer a list of strings representing the names of all costumes currently available for me')
               (availableCostumesForArrows
                       'answer a list of actual, instantiated costumes for me, which can be cycled through as the user hits a next-costume or previous-costume button in a viewer')
               (beep:
                       'make the specified sound')
               (borderColor
                       'The color of the object''s border')
               (borderWidth
                       'The width of the object''s border')
               (bottom
                       'My bottom edge, measured downward from the top edge of the world')
               (bounce:
                       'If object strayed beyond the boundaries of its container, make it reflect back into it, making the specified noise while doing so.')
               (bounce
                       'If object strayed beyond the boundaries of its container, make it reflect back into it')
               (chooseTrigger
 'When this script should run.
 "normal" means "only when called"')
               (clearTurtleTrails
                       'Clear all the pen trails in the interior.')
               (clearOwnersPenTrails
                       'Clear all the pen trails in my container.')
               (color
                       'The object''s interior color')
               (colorSees
                       'Whether a given color in the object is over another given color')
               (colorUnder
                       'The color under the center of the object')
               (copy
                       'Return a new object that is very much like this one')
               (cursor
                       'The index of the chosen element')
               (deleteCard
                       'Delete the current card.')
               (dismiss
                       'Click here to dismiss me')
               (doMenuItem:
                       'Do a menu item, the same way as if it were chosen manually')
               (doScript:
                       'Perform the given script once, on the next tick.')
               (elementNumber
                       'My element number as seen by my owner')
               (fire
                       'Run any and all button-firing scripts of this object')
               (firstPage
                       'Go to first page of book')
               (followPath
                               'Retrace the path the object has memorized, if any.')
               (forward:
                       'Moves the object forward in the direction it is heading')
               (goto:
                       'Go to the specfied book page')
               (goToNextCardInStack
                       'Go to the next card')
               (goToPreviousCardInStack
                       'Go to the previous card.')
               (goToRightOf:
                       'Align the object just to the right of any specified object.')
               (heading
                       'Which direction the object is facing.  0 is straight up')
               (height
                       'The distance between the top and bottom edges of the object')
               (hide
                       'Make the object so that it does not display and cannot handle input')
               (initiatePainting
                       'Initiate painting of a new object in the standard playfield.')
               (initiatePaintingIn:
                       'Initiate painting of a new object in the given place.')
               (isOverColor
                       'Whether any part of this object is directly over the specified color')
               (isUnderMouse
                       'Whether any part of this object is beneath the current mouse-cursor position')
               (lastPage
                       'Go to the last page of the book.')
               (left
                       'My left edge, measured from the left edge of the World')
               (leftRight
                       'The horizontal displacement')
               (liftAllPens
                       'Lift the pens on all the objects in my interior.')
               (lowerAllPens
                       'Lower the pens on all the objects in my interior.')
               (mouseX
                       'The x coordinate of the mouse pointer')
               (mouseY
                       'The y coordinate of the mouse pointer')
               (moveToward:
                       'Move in the direction of another object.')
               (insertCard
                       'Create a new card.')
               (nextPage
                       'Go to next page.')
               (numberAtCursor
                       'The number held by the object at the chosen element')
               (objectNameInHalo
                       'Object''s name -- To change: click here, edit, hit ENTER')
               (obtrudes
                       'Whether any part of the object sticks out beyond its container''s borders')
               (offerScriptorMenu
                       'The Scriptee.
 Press here to get a menu')
               (pauseScript:
                       'Make a running script become paused.')
               (penDown
                       'Whether the object''s pen is down (true) or up (false)')
               (penColor
                       'The color of the object''s pen')
               (penSize
                       'The size of the object''s pen')
               (clearPenTrails
                       'Clear all pen trails in the current playfield')
               (playerSeeingColorPhrase
                       'The player who "sees" a given color')
               (previousPage
                       'Go to previous page')

               (show
                       'If object was hidden, make it show itself again.')
               (startScript:
                       'Make a script start running.')
               (stopScript:
                       'Make a script stop running.')
               (top
                       'My top edge, measured downward from the top edge of the world')
               (right
                       'My right edge, measured from the left edge of the world')
               (roundUpStrays
                       'Bring all out-of-container subparts back into view.')
               (scaleFactor
                       'The amount by which the object is scaled')
+               (stepMe
+                       'Run the next phrase in the script.')
               (stopScript:
                       'make the specified script stop running')
               (tellAllSiblings:
                       'send a message to all of my sibling instances')
               (try
                       'Run this command once.' translatedNoop)
               (tryMe
                       'Click here to run this script once; hold button down to run repeatedly'  translatedNoop)
               (turn:
                       'Change the heading of the object by the specified amount')
               (unhideHiddenObjects
                       'Unhide all hidden objects.')
               (upDown
                       'The vertical displacement')
               (userScript
                       'This is a script defined by you.')
               (userSlot
                       'This is a variable defined by you.  Click here to change its type')
               (valueAtCursor
                       'The chosen element')
               (wearCostumeOf:
                       'Make this object''s appearance be the same as that of another object')
               (width
                       'The distance between the left and right edges of the object')
               (wrap
                       'If object has strayed beond the boundaries of its container, make it reappear from the opposite edge.')
               (x
                       'The x coordinate, measured from the left of the container')
               (y
                       'The y-coordinate, measured upward from the bottom of the container')

               )
 !

Item was added:
+ ----- Method: PhraseTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+       ^ anEtoysDebugger evaluatePhrase: self!

Item was changed:
 ----- Method: PhraseTileMorph>>try (in category 'miscellaneous') -----
 try
       "Evaluate the given phrase once"

       | aPlayer |
       (userScriptSelector notNil and: [userScriptSelector numArgs = 0])
               ifTrue:
                       [aPlayer _ self objectViewed player.
                       aPlayer triggerScript: userScriptSelector]
               ifFalse:
                       [[Compiler evaluate:
                               self codeString
+                               for: (self topEditor
+                                       ifNil: [self associatedPlayer]
+                                       ifNotNil: [:editor | editor playerScripted])
-                               for: self associatedPlayer
                               logged: false] ifError: [self inform: 'evaluation error' translated]]!

Item was changed:
 ----- Method: ScriptEditorMorph>>buttonRowForEditor (in category 'buttons') -----
 buttonRowForEditor
       "Answer a row of buttons that comprise the header at the top of the Scriptor"

       | aRow aString aStatusMorph aButton aTile aMorph goldBoxButton aBox |
       aRow _ AlignmentMorph newRow color: ScriptingSystem baseColor; layoutInset: 1.
       aRow hResizing: #spaceFill.
       aRow vResizing: #shrinkWrap.
       self addDismissButtonTo: aRow.
       aRow addTransparentSpacerOfSize: 9.

       "Player's name"
       aString _ playerScripted externalName.
       aMorph _ StringMorph contents: aString font: ScriptingSystem fontForTiles.
       aMorph setNameTo: 'title'.
       aRow addMorphBack: aMorph.
       aRow addTransparentSpacerOfSize: 6.

       "Script's name"
       aBox := AlignmentMorph newRow.
       aBox hResizing: #shrinkWrap; vResizing: #shrinkWrap.
       aBox color: (Color r: 0.839 g: 1.0 b: 0.806).
       aBox borderWidth: 1.
       aBox  borderColor: (Color r: 0.645 g: 0.774 b: 0.613).
       aButton _ UpdatingStringMorph new.
       aButton useStringFormat;
               target:  self;
               getSelector: #scriptTitle;
               setNameTo: 'script name';
               font: ScriptingSystem fontForNameEditingInScriptor;
               putSelector: #setScriptNameTo:;
               setProperty: #okToTextEdit toValue: true;
               step;
               yourself.
       aBox addMorph: aButton.
       aRow addMorphBack: aBox.
       aBox setBalloonText: 'Click here to edit the name of the script.' translated.
       "aRow addTransparentSpacerOfSize: 9."
       aRow addVariableTransparentSpacer.

       "Try It button"
       self hasParameter ifFalse:
               [aRow addMorphBack:
                       ((ThreePhaseButtonMorph
                               labelSymbol: #TryIt
                               target: self
                               actionSelector: #tryMe
                               arguments: EmptyArray)
                               actWhen: #whilePressed;
                               balloonTextSelector: #tryMe).
               aRow addTransparentSpacerOfSize: 3].

+       "Step button"
+       self hasParameter ifFalse:
+               [aRow addMorphBack: (aButton := ThreePhaseButtonMorph
+                               labelSymbol: #StepMe
+                               target: self
+                               actionSelector: #stepMe
+                               arguments: EmptyArray).
+               aButton balloonTextSelector: #stepMe.
+               aRow addTransparentSpacerOfSize: 3].
+
       "Status controller"
       self hasParameter
               ifTrue:
                       [aTile _ TypeListTile new choices: Vocabulary typeChoices dataType: nil.
                       aTile addArrows.
                       aTile setLiteral: self typeForParameter.
                       aRow addMorphBack: aTile.
                       aTile borderColor: Color red.
                       aTile color: ScriptingSystem uniformTileInteriorColor.
                       aTile setBalloonText: 'Drag from here to get a parameter tile' translated.
                       aTile addCaretsAsAppropriate: true]
               ifFalse:
                       [aRow addMorphBack: (aStatusMorph _ self scriptInstantiation statusControlMorph)].

       "aRow addTransparentSpacerOfSize: 3."
       aRow addVariableTransparentSpacer.

       "Gold-box"
       aRow addMorphBack: (goldBoxButton _ IconicButton new).
       goldBoxButton borderWidth: 0;
                       labelGraphic: (ScriptingSystem formAtKey: 'RoundGoldBox'); color: Color transparent;
                       actWhen: #buttonDown;
                       target: self;
                       actionSelector: #offerGoldBoxMenu;
                       shedSelvedge;
                       setBalloonText: 'click here to get a palette of useful tiles to use in your script.' translated.
       aRow addTransparentSpacerOfSize: 6@1.

       "Menu Button"
       aButton _ self menuButton.
       aButton actionSelector: #offerScriptorMenu.
       aRow addMorphBack: aButton.

       (playerScripted existingScriptInstantiationForSelector: scriptName)
               ifNotNilDo:
                       [:inst | inst updateStatusMorph: aStatusMorph].
       ^ aRow!

Item was added:
+ ----- Method: ScriptEditorMorph>>deleteEtoysDebugger (in category '*etoys-debugger') -----
+ deleteEtoysDebugger
+       (self valueOfProperty: #etoysDebugger ifAbsent: [^ self])
+               delete.
+       self removeProperty: #etoysDebugger!

Item was added:
+ ----- Method: ScriptEditorMorph>>etoysDebugger (in category '*etoys-debugger') -----
+ etoysDebugger
+       ^ self valueOfProperty: #etoysDebugger ifAbsentPut: [EtoysDebugger on: self]!

Item was added:
+ ----- Method: ScriptEditorMorph>>nextTile (in category '*etoys-debugger') -----
+ nextTile
+       ^ (self ownerThatIsA: TileLikeMorph orA: ScriptEditorMorph)
+               nextTile
+ !

Item was added:
+ ----- Method: ScriptEditorMorph>>nextTileTo: (in category '*etoys-debugger') -----
+ nextTileTo: aTileMorph
+       | tiles index |
+       tiles := self tiles.
+       index := (tiles indexOf: aTileMorph) + 1.
+       index > tiles size
+               ifTrue: [self = self topEditor
+                       ifTrue: [^ tiles at: 1]
+                       ifFalse: [^ self nextTile]].
+       ^ tiles at: index!

Item was added:
+ ----- Method: ScriptEditorMorph>>stepMe (in category '*etoys-debugger') -----
+ stepMe
+       self etoysDebugger evaluateNextTile !

Item was added:
+ ----- Method: ScriptEditorMorph>>tiles (in category '*etoys-debugger') -----
+ tiles
+       ^ self tileRows collect: [:each | each first]!

Item was changed:
 ----- Method: ScriptEditorMorph>>tryMe (in category 'buttons') -----
 tryMe
       "Evaluate the given script on behalf of the scripted object"

       scriptName numArgs = 0
               ifTrue:
+                       [self deleteEtoysDebugger.
+                       self playerScripted performScriptIfCan: scriptName ]
-                       [self playerScripted performScriptIfCan: scriptName ]

 !

Item was changed:
 ----- Method: ScriptEditorMorph>>updateStatus (in category 'buttons') -----
 updateStatus
       "Update that status in the receiver's header.  "

       (self topEditor == self and: [firstTileRow ~~ 1]) ifTrue:
               [(submorphs size == 0 or: [(self firstSubmorph findA: ScriptStatusControl) isNil])
                       ifTrue:
                               [self replaceRow1].
               self updateStatusMorph: (self firstSubmorph findA: ScriptStatusControl)]!

Item was changed:
 ----- Method: ScriptStatusControl>>mouseUpTick:onItem: (in category 'mouse gestures') -----
 mouseUpTick: evt onItem: aMorph
       self removeAlarm: #offerTickingMenu:.
+       (self ownerThatIsA: ScriptEditorMorph) deleteEtoysDebugger.
       aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
       (scriptInstantiation status == #ticking) ifTrue:[
               scriptInstantiation status: #paused.
               aMorph color: (Color r: 1.0 g: 0.774 b: 0.774).
               aMorph isTicking: false.
       ] ifFalse:[
               scriptInstantiation status: #ticking.
               aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
               aMorph isTicking: true.
       ].
       scriptInstantiation updateAllStatusMorphs.!

Item was added:
+ ----- Method: TileLikeMorph>>nextTile (in category '*etoys-debugger') -----
+ nextTile
+       ^ (self ownerThatIsA: ScriptEditorMorph)
+               nextTileTo: self!

Item was added:
+ ----- Method: TimesRepeatMorph>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+       ^ anEtoysDebugger evaluateRepeat: self!

Item was added:
+ ----- Method: TimesRepeatTile>>calculateTimesToRepeat (in category '*etoys-debugger') -----
+ calculateTimesToRepeat
+       ^ (Compiler evaluate: (String streamContents: [:stream |
+                       self numberOfTimesToRepeatPart submorphs
+                               ifEmpty: [stream nextPutAll: '0']
+                               ifNotEmpty: [self numberOfTimesToRepeatPart storeCodeOn: stream indent: 0]])
+               for: self topEditor playerScripted
+               logged: false)!

Item was added:
+ ----- Method: TimesRepeatTile>>evaluateOn: (in category '*etoys-debugger') -----
+ evaluateOn: anEtoysDebugger
+       ^ anEtoysDebugger evaluateRepeat: self!

Item was added:
+ ----- Method: TimesRepeatTile>>nextTile (in category '*etoys-debugger') -----
+ nextTile
+       "Instead of just returning my next tile I return my first tile if I haven't been evaluated enough times"
+       self timesToRepeat <= 0
+               ifTrue: [^ super nextTile].
+       self timesToRepeat: self timesToRepeat - 1.
+       ^ self whatToRepeatPart tiles at: 1 ifAbsent: [super nextTile]!

Item was added:
+ ----- Method: TimesRepeatTile>>timesToRepeat (in category '*etoys-debugger') -----
+ timesToRepeat
+       ^ self topEditor etoysDebugger timesToRepeat!

Item was added:
+ ----- Method: TimesRepeatTile>>timesToRepeat: (in category '*etoys-debugger') -----
+ timesToRepeat: aNumber
+       ^ self topEditor etoysDebugger timesToRepeat: aNumber!

Item was added:
+ ----- Method: TimesRepeatTile>>whatToRepeatPart (in category '*etoys-debugger') -----
+ whatToRepeatPart
+       ^ whatToRepeatPart!


_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev



_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev
Reply | Threaded
Open this post in threaded view
|

Re: Etoys: Etoys-kfr.99.mcz

Karl Ramberg
On Sat, Feb 4, 2012 at 12:28 AM, Ricardo Moran <[hidden email]> wrote:
> I'm *really* glad to see this getting in :)
>
> Also, I've been working on the #batchPenTrails issue and I think I got it
> solved now. I'll commit my changes to Etoys so that you can review them.

Cool.

Karl

>
> Thanks,
> Richo
>
> On Fri, Feb 3, 2012 at 7:41 PM, <[hidden email]> wrote:
>>
>> Spam detection software, running on the system "europa.mgmt.inetu.net",
>> has
>> identified this incoming email as possible spam.  The original message
>> has been attached to this so you can view it (if it isn't spam) or label
>> similar future email.  If you have any questions, see
>> the administrator of that system for details.
>>
>> Content preview:  Karl Ramberg uploaded a new version of Etoys to project
>> Etoys:
>>   http://source.squeak.org/etoys/Etoys-kfr.99.mcz ====================
>> Summary
>>   ==================== Name: Etoys-kfr.99 Author: kfr Time: 3 February
>> 2012,
>>   11:41:17 pm UUID: 1b86a282-0433-9448-b74e-579b32ca4e32 Ancestors:
>> Etoys-kfr.98
>>   [...]
>>
>> Content analysis details:   (5.6 points, 5.0 required)
>>
>>  pts rule name              description
>> ---- ----------------------
>> --------------------------------------------------
>>  3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
>>                            [score: 1.0000]
>>  0.0 MISSING_MID            Missing Message-Id: header
>>  1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
>>  1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
>>  3.8 TVD_STOCK1             BODY: TVD_STOCK1
>>  0.1 RDNS_NONE              Delivered to trusted network by a host with no
>> rDNS
>> -3.9 AWL                    AWL: From: address is in the auto white-list
>>
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: [hidden email]
>> To: [hidden email]
>> Cc:
>> Date: Fri, 3 Feb 2012 22:41:56.469 0000
>> Subject: Etoys: Etoys-kfr.99.mcz
>> Karl Ramberg uploaded a new version of Etoys to project Etoys:
>> http://source.squeak.org/etoys/Etoys-kfr.99.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Etoys-kfr.99
>> Author: kfr
>> Time: 3 February 2012, 11:41:17 pm
>> UUID: 1b86a282-0433-9448-b74e-579b32ca4e32
>> Ancestors: Etoys-kfr.98
>>
>> This is Ricardo Moran's implementation of a step-next-phrase feature in
>> etoy Scriptors, with minor curating by Scott Wallace.
>>
>> =============== Diff against Etoys-kfr.98 ===============
>>
>> Item was changed:
>>  SystemOrganization addCategory: #'EToys-Kedama'!
>>  SystemOrganization addCategory: #'Etoys-Buttons'!
>>  SystemOrganization addCategory: #'Etoys-CustomEvents'!
>>  SystemOrganization addCategory: #'Etoys-Experimental'!
>>  SystemOrganization addCategory: #'Etoys-Help'!
>>  SystemOrganization addCategory: #'Etoys-Outliner'!
>>  SystemOrganization addCategory: #'Etoys-Protocols'!
>>  SystemOrganization addCategory: #'Etoys-Protocols-Type Vocabularies'!
>>  SystemOrganization addCategory: #'Etoys-Scratch'!
>>  SystemOrganization addCategory: #'Etoys-Scripting'!
>>  SystemOrganization addCategory: #'Etoys-Scripting Support'!
>>  SystemOrganization addCategory: #'Etoys-Scripting Tiles'!
>>  SystemOrganization addCategory: #'Etoys-Stacks'!
>>  SystemOrganization addCategory: #'Etoys-StarSqueak'!
>>  SystemOrganization addCategory: #'Etoys-Tile Scriptors'!
>>  SystemOrganization addCategory: #'Etoys-Widgets'!
>>  SystemOrganization addCategory: #'Etoys-SpeechBubbles'!
>> + SystemOrganization addCategory: #'Etoys-Debugger'!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>evaluateOn: (in category
>> '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluateTest: self!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>evaluateTestPart (in category
>> '*etoys-debugger') -----
>> + evaluateTestPart
>> +       | condition |
>> +       condition := testPart tiles at: 1 ifAbsent: [^ true].
>> +       ^ Compiler evaluate: condition codeString
>> +                               for: condition associatedPlayer
>> +                               logged: false!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>noPart (in category '*etoys-debugger')
>> -----
>> + noPart
>> +       ^ noPart!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>testPart (in category
>> '*etoys-debugger') -----
>> + testPart
>> +       ^ testPart!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>yesPart (in category '*etoys-debugger')
>> -----
>> + yesPart
>> +       ^ yesPart!
>>
>> Item was added:
>> + Object subclass: #EtoysDebugger
>> +       instanceVariableNames: 'scriptEditor next timesToRepeat
>> highlighter'
>> +       classVariableNames: ''
>> +       poolDictionaries: ''
>> +       category: 'Etoys-Debugger'!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger class>>initialize (in category 'class
>> initialization') -----
>> + initialize
>> + "
>> +       self initialize
>> + "
>> + | buttonForm buttonPressedForm |
>> + buttonForm := (Form
>> +       extent: 30@30
>> +       depth: 16
>> +       fromArray: #( 0 0 0 0 0 26425 1731815225 1731815225 1731815225
>> 1731788800 0 0 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879
>> 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 26425 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0
>> 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147444537 1731788800 0 0 0 0 1731821567 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147444537 0 0 0 26425 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 1731788800 0 0 1731821567 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147444537 0 26425 2147450879 2147450879 2147450879 2147450879 2147418113
>> 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879
>> 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879
>> 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879
>> 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879
>> 2147450879 2147450879 2147450879 1731788800 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879
>> 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879
>> 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303
>> 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 65537
>> 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303
>> 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879
>> 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879
>> 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879
>> 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147444537 26425 2147450879
>> 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303
>> 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425
>> 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800
>> 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 1731788800 0 1731821567 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147444537 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800
>> 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0
>> 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147444537 0 0 0 0 26425 1731821567
>> 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879
>> 2147444537 1731788800 0 0 0 0 0 26425 2147450879 2147450879 2147450879
>> 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 0 0
>> 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225
>> 0 0 0 0 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0
>> 0)
>> +       offset: 0@0).
>> + buttonPressedForm := (Form
>> +       extent: 30@30
>> +       depth: 16
>> +       fromArray: #( 0 0 0 0 0 19026 1246906962 1246906962 1246906962
>> 1246887936 0 0 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398
>> 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 19026 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0
>> 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523993170 1246887936 0 0 0 0 1246911190 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523993170 0 0 0 19026 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1246887936 0 0 1246911190 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523993170 0 19026 1523997398 1523997398 1523997398 1523997398 1523974145
>> 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398
>> 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398
>> 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1246887936 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398
>> 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398
>> 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790
>> 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 65537
>> 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790
>> 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398
>> 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398
>> 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398
>> 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523993170 19026 1523997398
>> 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026
>> 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936
>> 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1246887936 0 1246911190 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523993170 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936
>> 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0
>> 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523993170 0 0 0 0 19026 1246911190
>> 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398
>> 1523993170 1246887936 0 0 0 0 0 19026 1523997398 1523997398 1523997398
>> 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 0 0
>> 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962
>> 0 0 0 0 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0
>> 0)
>> +       offset: 0@0).
>> + ScriptingSystem saveForm: buttonForm atKey: #StepMe.
>> + ScriptingSystem saveForm: buttonPressedForm atKey: #StepMePressed!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger class>>on: (in category 'instance creation')
>> -----
>> + on: aScriptEditorMorph
>> +       ^ self basicNew initializeWith: aScriptEditorMorph!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>delete (in category 'as yet unclassified')
>> -----
>> + delete
>> +       highlighter ifNotNil: [:h | h delete]!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluateNextTile (in category 'evaluating')
>> -----
>> + evaluateNextTile
>> +       [next evaluateOn: self]
>> +               on: Error do: [:err || newNext |
>> +                       newNext := scriptEditor tiles at: 1 ifAbsent: [^
>> self].
>> +                       newNext = next
>> +                               ifTrue: [err pass]
>> +                               ifFalse: [next := newNext].
>> +                       self evaluateNextTile]!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluatePhrase: (in category 'evaluating')
>> -----
>> + evaluatePhrase: tile
>> +       self highlight: tile.
>> +       tile try.
>> +       next := tile nextTile!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluateRepeat: (in category 'evaluating')
>> -----
>> + evaluateRepeat: tile
>> +       self highlight: tile numberOfTimesToRepeatPart;
>> +               timesToRepeat: tile calculateTimesToRepeat.
>> +       next := tile nextTile!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluateTest: (in category 'evaluating')
>> -----
>> + evaluateTest: test
>> +       | tile |
>> +       test testPart tiles isEmpty
>> +               ifTrue: [next := test yesPart tiles at: 1 ifAbsent: [test
>> nextTile].
>> +                       ^ self evaluateNextTile].
>> +       self highlight: test testPart.
>> +       tile := test evaluateTestPart
>> +               ifTrue: [test yesPart]
>> +               ifFalse: [test noPart].
>> +       next := tile tiles at: 1 ifAbsent: [test nextTile]!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>highlight: (in category 'highlighting')
>> -----
>> + highlight: aMorph
>> +       "| rect |
>> +       rect := BorderedMorph newBounds: aMorph bounds color: Color
>> transparent.
>> +       rect openInWorld.
>> +       World addAlarm: #delete
>> +               withArguments: #()
>> +               for: rect
>> +               at: (Time millisecondClockValue + 200)."
>> +       highlighter ifNotNil: [highlighter delete].
>> +       highlighter := HighlightMorph on: aMorph.
>> +       highlighter openInWorld!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>initializeWith: (in category
>> 'initialization') -----
>> + initializeWith: aScriptEditorMorph
>> +       scriptEditor := aScriptEditorMorph.
>> +       next := scriptEditor tiles at: 1 ifAbsent: nil.
>> +       self initialize!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>timesToRepeat (in category 'accessing')
>> -----
>> + timesToRepeat
>> +       ^ timesToRepeat!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>timesToRepeat: (in category 'accessing')
>> -----
>> + timesToRepeat: aNumber
>> +       timesToRepeat := aNumber!
>>
>> Item was added:
>> + Morph subclass: #HighlightMorph
>> +       instanceVariableNames: 'target lastHash stepTime'
>> +       classVariableNames: ''
>> +       poolDictionaries: ''
>> +       category: 'Etoys-Debugger'!
>>
>> Item was added:
>> + ----- Method: HighlightMorph class>>on: (in category 'as yet
>> unclassified') -----
>> + on: targetMorph
>> +       ^ self basicNew initializeWith: targetMorph!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>containsPoint: (in category 'testing')
>> -----
>> + containsPoint: aPoint
>> + ^ (self bounds containsPoint: aPoint) and:
>> +         [(self imageForm isTransparentAt: aPoint - bounds origin) not]!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>incrementStepTime (in category 'stepping')
>> -----
>> + incrementStepTime
>> +       stepTime := (stepTime + 1) min: self maximumStepTime!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>initialize (in category
>> 'initialize-release') -----
>> + initialize
>> +       super initialize.
>> +       stepTime := self minimumStepTime.
>> +       self color: Color transparent;
>> +               borderWidth: 2;
>> +               borderColor: Color red muchDarker muchDarker!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>initializeWith: (in category
>> 'initialize-release') -----
>> + initializeWith: targetMorph
>> +       target := targetMorph.
>> +       self initialize!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>maximumStepTime (in category 'stepping')
>> -----
>> + maximumStepTime
>> +       ^500!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>minimumStepTime (in category 'stepping')
>> -----
>> + minimumStepTime
>> +       ^20!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>step (in category 'stepping') -----
>> + step
>> +       (target isNil or: [lastHash = (lastHash := target
>> boundsSignatureHash)])
>> +               ifTrue: [self incrementStepTime]
>> +               ifFalse: [stepTime := self minimumStepTime].
>> +
>> +       target notNil ifTrue: [
>> +               target isInWorld ifFalse: [^self delete].
>> +               self bounds: target bounds]!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>stepTime (in category 'stepping') -----
>> + stepTime
>> +       ^ stepTime!
>>
>> Item was changed:
>>  ----- Method: Morph class>>helpContributions (in category
>> '*eToys-scripting') -----
>>  helpContributions
>>        "Answer a list of pairs of the form (<symbol> <help message> ) to
>> contribute to the system help dictionary"
>>
>>  "NB: Many of the items here are not needed any more since they're
>> specified as part of command definitions now.  Someone needs to take the
>> time to go through the list and remove items no longer needed.  But who's
>> got that kind of time?"
>>
>>        ^ #(
>>                (acceptScript:for:
>>                        'submit the contents of the given script editor as
>> the code defining the given selector')
>>                (actorState
>>                        'return the ActorState object for the receiver,
>> creating it if necessary')
>>                (addInstanceVariable
>>                        'start the interaction for adding a new variable to
>> the object')
>>                (addPlayerMenuItemsTo:hand:
>>                        'add player-specific menu items to the given menu,
>> on behalf of the given hand.  At present, these are only commands relating
>> to the turtle')
>>                (addYesNoToHand
>>                        'Press here to tear off a TEST/YES/NO unit which
>> you can drop into your script')
>>                (allScriptEditors
>>                        'answer a list off the extant ScriptEditors for the
>> receiver')
>>                (amount
>>                        'The amount of displacement')
>>                (angle
>>                        'The angular displacement')
>>                (anonymousScriptEditorFor:
>>                        'answer a new ScriptEditor object to serve as the
>> place for scripting an anonymous (unnamed, unsaved) script for the
>> receiver')
>>                (append:
>>                        'add an object to this container')
>>                (prepend:
>>                        'add an object to this container')
>>                (assignDecrGetter:setter:amt:
>>                        'evaluate the decrement variant of assignment')
>>                (assignGetter:setter:amt:
>>                        'evaluate the vanilla variant of assignment')
>>                (assignIncrGetter:setter:amt:
>>                        'evalute the increment version of assignment')
>>                (assignMultGetter:setter:amt:
>>                        'evaluate the multiplicative version of
>> assignment')
>>                (assureEventHandlerRepresentsStatus
>>                        'make certain that the event handler associated
>> with my current costume is set up to conform to my current script-status')
>>                (assureExternalName
>>                        'If I do not currently have an external name
>> assigned, get one now')
>>                (assureUniClass
>>                        'make certain that I am a member a uniclass (i.e. a
>> unique subclass); if I am not, create one now and become me into an instance
>> of it')
>>                (availableCostumeNames
>>                        'answer a list of strings representing the names of
>> all costumes currently available for me')
>>                (availableCostumesForArrows
>>                        'answer a list of actual, instantiated costumes for
>> me, which can be cycled through as the user hits a next-costume or
>> previous-costume button in a viewer')
>>                (beep:
>>                        'make the specified sound')
>>                (borderColor
>>                        'The color of the object''s border')
>>                (borderWidth
>>                        'The width of the object''s border')
>>                (bottom
>>                        'My bottom edge, measured downward from the top
>> edge of the world')
>>                (bounce:
>>                        'If object strayed beyond the boundaries of its
>> container, make it reflect back into it, making the specified noise while
>> doing so.')
>>                (bounce
>>                        'If object strayed beyond the boundaries of its
>> container, make it reflect back into it')
>>                (chooseTrigger
>>  'When this script should run.
>>  "normal" means "only when called"')
>>                (clearTurtleTrails
>>                        'Clear all the pen trails in the interior.')
>>                (clearOwnersPenTrails
>>                        'Clear all the pen trails in my container.')
>>                (color
>>                        'The object''s interior color')
>>                (colorSees
>>                        'Whether a given color in the object is over
>> another given color')
>>                (colorUnder
>>                        'The color under the center of the object')
>>                (copy
>>                        'Return a new object that is very much like this
>> one')
>>                (cursor
>>                        'The index of the chosen element')
>>                (deleteCard
>>                        'Delete the current card.')
>>                (dismiss
>>                        'Click here to dismiss me')
>>                (doMenuItem:
>>                        'Do a menu item, the same way as if it were chosen
>> manually')
>>                (doScript:
>>                        'Perform the given script once, on the next tick.')
>>                (elementNumber
>>                        'My element number as seen by my owner')
>>                (fire
>>                        'Run any and all button-firing scripts of this
>> object')
>>                (firstPage
>>                        'Go to first page of book')
>>                (followPath
>>                                'Retrace the path the object has memorized,
>> if any.')
>>                (forward:
>>                        'Moves the object forward in the direction it is
>> heading')
>>                (goto:
>>                        'Go to the specfied book page')
>>                (goToNextCardInStack
>>                        'Go to the next card')
>>                (goToPreviousCardInStack
>>                        'Go to the previous card.')
>>                (goToRightOf:
>>                        'Align the object just to the right of any
>> specified object.')
>>                (heading
>>                        'Which direction the object is facing.  0 is
>> straight up')
>>                (height
>>                        'The distance between the top and bottom edges of
>> the object')
>>                (hide
>>                        'Make the object so that it does not display and
>> cannot handle input')
>>                (initiatePainting
>>                        'Initiate painting of a new object in the standard
>> playfield.')
>>                (initiatePaintingIn:
>>                        'Initiate painting of a new object in the given
>> place.')
>>                (isOverColor
>>                        'Whether any part of this object is directly over
>> the specified color')
>>                (isUnderMouse
>>                        'Whether any part of this object is beneath the
>> current mouse-cursor position')
>>                (lastPage
>>                        'Go to the last page of the book.')
>>                (left
>>                        'My left edge, measured from the left edge of the
>> World')
>>                (leftRight
>>                        'The horizontal displacement')
>>                (liftAllPens
>>                        'Lift the pens on all the objects in my interior.')
>>                (lowerAllPens
>>                        'Lower the pens on all the objects in my
>> interior.')
>>                (mouseX
>>                        'The x coordinate of the mouse pointer')
>>                (mouseY
>>                        'The y coordinate of the mouse pointer')
>>                (moveToward:
>>                        'Move in the direction of another object.')
>>                (insertCard
>>                        'Create a new card.')
>>                (nextPage
>>                        'Go to next page.')
>>                (numberAtCursor
>>                        'The number held by the object at the chosen
>> element')
>>                (objectNameInHalo
>>                        'Object''s name -- To change: click here, edit, hit
>> ENTER')
>>                (obtrudes
>>                        'Whether any part of the object sticks out beyond
>> its container''s borders')
>>                (offerScriptorMenu
>>                        'The Scriptee.
>>  Press here to get a menu')
>>                (pauseScript:
>>                        'Make a running script become paused.')
>>                (penDown
>>                        'Whether the object''s pen is down (true) or up
>> (false)')
>>                (penColor
>>                        'The color of the object''s pen')
>>                (penSize
>>                        'The size of the object''s pen')
>>                (clearPenTrails
>>                        'Clear all pen trails in the current playfield')
>>                (playerSeeingColorPhrase
>>                        'The player who "sees" a given color')
>>                (previousPage
>>                        'Go to previous page')
>>
>>                (show
>>                        'If object was hidden, make it show itself again.')
>>                (startScript:
>>                        'Make a script start running.')
>>                (stopScript:
>>                        'Make a script stop running.')
>>                (top
>>                        'My top edge, measured downward from the top edge
>> of the world')
>>                (right
>>                        'My right edge, measured from the left edge of the
>> world')
>>                (roundUpStrays
>>                        'Bring all out-of-container subparts back into
>> view.')
>>                (scaleFactor
>>                        'The amount by which the object is scaled')
>> +               (stepMe
>> +                       'Run the next phrase in the script.')
>>                (stopScript:
>>                        'make the specified script stop running')
>>                (tellAllSiblings:
>>                        'send a message to all of my sibling instances')
>>                (try
>>                        'Run this command once.' translatedNoop)
>>                (tryMe
>>                        'Click here to run this script once; hold button
>> down to run repeatedly'  translatedNoop)
>>                (turn:
>>                        'Change the heading of the object by the specified
>> amount')
>>                (unhideHiddenObjects
>>                        'Unhide all hidden objects.')
>>                (upDown
>>                        'The vertical displacement')
>>                (userScript
>>                        'This is a script defined by you.')
>>                (userSlot
>>                        'This is a variable defined by you.  Click here to
>> change its type')
>>                (valueAtCursor
>>                        'The chosen element')
>>                (wearCostumeOf:
>>                        'Make this object''s appearance be the same as that
>> of another object')
>>                (width
>>                        'The distance between the left and right edges of
>> the object')
>>                (wrap
>>                        'If object has strayed beond the boundaries of its
>> container, make it reappear from the opposite edge.')
>>                (x
>>                        'The x coordinate, measured from the left of the
>> container')
>>                (y
>>                        'The y-coordinate, measured upward from the bottom
>> of the container')
>>
>>                )
>>  !
>>
>> Item was added:
>> + ----- Method: PhraseTileMorph>>evaluateOn: (in category
>> '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluatePhrase: self!
>>
>> Item was changed:
>>  ----- Method: PhraseTileMorph>>try (in category 'miscellaneous') -----
>>  try
>>        "Evaluate the given phrase once"
>>
>>        | aPlayer |
>>        (userScriptSelector notNil and: [userScriptSelector numArgs = 0])
>>                ifTrue:
>>                        [aPlayer _ self objectViewed player.
>>                        aPlayer triggerScript: userScriptSelector]
>>                ifFalse:
>>                        [[Compiler evaluate:
>>                                self codeString
>> +                               for: (self topEditor
>> +                                       ifNil: [self associatedPlayer]
>> +                                       ifNotNil: [:editor | editor
>> playerScripted])
>> -                               for: self associatedPlayer
>>                                logged: false] ifError: [self inform:
>> 'evaluation error' translated]]!
>>
>> Item was changed:
>>  ----- Method: ScriptEditorMorph>>buttonRowForEditor (in category
>> 'buttons') -----
>>  buttonRowForEditor
>>        "Answer a row of buttons that comprise the header at the top of the
>> Scriptor"
>>
>>        | aRow aString aStatusMorph aButton aTile aMorph goldBoxButton aBox
>> |
>>        aRow _ AlignmentMorph newRow color: ScriptingSystem baseColor;
>> layoutInset: 1.
>>        aRow hResizing: #spaceFill.
>>        aRow vResizing: #shrinkWrap.
>>        self addDismissButtonTo: aRow.
>>        aRow addTransparentSpacerOfSize: 9.
>>
>>        "Player's name"
>>        aString _ playerScripted externalName.
>>        aMorph _ StringMorph contents: aString font: ScriptingSystem
>> fontForTiles.
>>        aMorph setNameTo: 'title'.
>>        aRow addMorphBack: aMorph.
>>        aRow addTransparentSpacerOfSize: 6.
>>
>>        "Script's name"
>>        aBox := AlignmentMorph newRow.
>>        aBox hResizing: #shrinkWrap; vResizing: #shrinkWrap.
>>        aBox color: (Color r: 0.839 g: 1.0 b: 0.806).
>>        aBox borderWidth: 1.
>>        aBox  borderColor: (Color r: 0.645 g: 0.774 b: 0.613).
>>        aButton _ UpdatingStringMorph new.
>>        aButton useStringFormat;
>>                target:  self;
>>                getSelector: #scriptTitle;
>>                setNameTo: 'script name';
>>                font: ScriptingSystem fontForNameEditingInScriptor;
>>                putSelector: #setScriptNameTo:;
>>                setProperty: #okToTextEdit toValue: true;
>>                step;
>>                yourself.
>>        aBox addMorph: aButton.
>>        aRow addMorphBack: aBox.
>>        aBox setBalloonText: 'Click here to edit the name of the script.'
>> translated.
>>        "aRow addTransparentSpacerOfSize: 9."
>>        aRow addVariableTransparentSpacer.
>>
>>        "Try It button"
>>        self hasParameter ifFalse:
>>                [aRow addMorphBack:
>>                        ((ThreePhaseButtonMorph
>>                                labelSymbol: #TryIt
>>                                target: self
>>                                actionSelector: #tryMe
>>                                arguments: EmptyArray)
>>                                actWhen: #whilePressed;
>>                                balloonTextSelector: #tryMe).
>>                aRow addTransparentSpacerOfSize: 3].
>>
>> +       "Step button"
>> +       self hasParameter ifFalse:
>> +               [aRow addMorphBack: (aButton := ThreePhaseButtonMorph
>> +                               labelSymbol: #StepMe
>> +                               target: self
>> +                               actionSelector: #stepMe
>> +                               arguments: EmptyArray).
>> +               aButton balloonTextSelector: #stepMe.
>> +               aRow addTransparentSpacerOfSize: 3].
>> +
>>        "Status controller"
>>        self hasParameter
>>                ifTrue:
>>                        [aTile _ TypeListTile new choices: Vocabulary
>> typeChoices dataType: nil.
>>                        aTile addArrows.
>>                        aTile setLiteral: self typeForParameter.
>>                        aRow addMorphBack: aTile.
>>                        aTile borderColor: Color red.
>>                        aTile color: ScriptingSystem
>> uniformTileInteriorColor.
>>                        aTile setBalloonText: 'Drag from here to get a
>> parameter tile' translated.
>>                        aTile addCaretsAsAppropriate: true]
>>                ifFalse:
>>                        [aRow addMorphBack: (aStatusMorph _ self
>> scriptInstantiation statusControlMorph)].
>>
>>        "aRow addTransparentSpacerOfSize: 3."
>>        aRow addVariableTransparentSpacer.
>>
>>        "Gold-box"
>>        aRow addMorphBack: (goldBoxButton _ IconicButton new).
>>        goldBoxButton borderWidth: 0;
>>                        labelGraphic: (ScriptingSystem formAtKey:
>> 'RoundGoldBox'); color: Color transparent;
>>                        actWhen: #buttonDown;
>>                        target: self;
>>                        actionSelector: #offerGoldBoxMenu;
>>                        shedSelvedge;
>>                        setBalloonText: 'click here to get a palette of
>> useful tiles to use in your script.' translated.
>>        aRow addTransparentSpacerOfSize: 6@1.
>>
>>        "Menu Button"
>>        aButton _ self menuButton.
>>        aButton actionSelector: #offerScriptorMenu.
>>        aRow addMorphBack: aButton.
>>
>>        (playerScripted existingScriptInstantiationForSelector: scriptName)
>>                ifNotNilDo:
>>                        [:inst | inst updateStatusMorph: aStatusMorph].
>>        ^ aRow!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>deleteEtoysDebugger (in category
>> '*etoys-debugger') -----
>> + deleteEtoysDebugger
>> +       (self valueOfProperty: #etoysDebugger ifAbsent: [^ self])
>> +               delete.
>> +       self removeProperty: #etoysDebugger!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>etoysDebugger (in category
>> '*etoys-debugger') -----
>> + etoysDebugger
>> +       ^ self valueOfProperty: #etoysDebugger ifAbsentPut: [EtoysDebugger
>> on: self]!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>nextTile (in category
>> '*etoys-debugger') -----
>> + nextTile
>> +       ^ (self ownerThatIsA: TileLikeMorph orA: ScriptEditorMorph)
>> +               nextTile
>> + !
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>nextTileTo: (in category
>> '*etoys-debugger') -----
>> + nextTileTo: aTileMorph
>> +       | tiles index |
>> +       tiles := self tiles.
>> +       index := (tiles indexOf: aTileMorph) + 1.
>> +       index > tiles size
>> +               ifTrue: [self = self topEditor
>> +                       ifTrue: [^ tiles at: 1]
>> +                       ifFalse: [^ self nextTile]].
>> +       ^ tiles at: index!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>stepMe (in category '*etoys-debugger')
>> -----
>> + stepMe
>> +       self etoysDebugger evaluateNextTile !
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>tiles (in category '*etoys-debugger')
>> -----
>> + tiles
>> +       ^ self tileRows collect: [:each | each first]!
>>
>> Item was changed:
>>  ----- Method: ScriptEditorMorph>>tryMe (in category 'buttons') -----
>>  tryMe
>>        "Evaluate the given script on behalf of the scripted object"
>>
>>        scriptName numArgs = 0
>>                ifTrue:
>> +                       [self deleteEtoysDebugger.
>> +                       self playerScripted performScriptIfCan: scriptName
>> ]
>> -                       [self playerScripted performScriptIfCan:
>> scriptName ]
>>
>>  !
>>
>> Item was changed:
>>  ----- Method: ScriptEditorMorph>>updateStatus (in category 'buttons')
>> -----
>>  updateStatus
>>        "Update that status in the receiver's header.  "
>>
>>        (self topEditor == self and: [firstTileRow ~~ 1]) ifTrue:
>>                [(submorphs size == 0 or: [(self firstSubmorph findA:
>> ScriptStatusControl) isNil])
>>                        ifTrue:
>>                                [self replaceRow1].
>>                self updateStatusMorph: (self firstSubmorph findA:
>> ScriptStatusControl)]!
>>
>> Item was changed:
>>  ----- Method: ScriptStatusControl>>mouseUpTick:onItem: (in category
>> 'mouse gestures') -----
>>  mouseUpTick: evt onItem: aMorph
>>        self removeAlarm: #offerTickingMenu:.
>> +       (self ownerThatIsA: ScriptEditorMorph) deleteEtoysDebugger.
>>        aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
>>        (scriptInstantiation status == #ticking) ifTrue:[
>>                scriptInstantiation status: #paused.
>>                aMorph color: (Color r: 1.0 g: 0.774 b: 0.774).
>>                aMorph isTicking: false.
>>        ] ifFalse:[
>>                scriptInstantiation status: #ticking.
>>                aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
>>                aMorph isTicking: true.
>>        ].
>>        scriptInstantiation updateAllStatusMorphs.!
>>
>> Item was added:
>> + ----- Method: TileLikeMorph>>nextTile (in category '*etoys-debugger')
>> -----
>> + nextTile
>> +       ^ (self ownerThatIsA: ScriptEditorMorph)
>> +               nextTileTo: self!
>>
>> Item was added:
>> + ----- Method: TimesRepeatMorph>>evaluateOn: (in category
>> '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluateRepeat: self!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>calculateTimesToRepeat (in category
>> '*etoys-debugger') -----
>> + calculateTimesToRepeat
>> +       ^ (Compiler evaluate: (String streamContents: [:stream |
>> +                       self numberOfTimesToRepeatPart submorphs
>> +                               ifEmpty: [stream nextPutAll: '0']
>> +                               ifNotEmpty: [self
>> numberOfTimesToRepeatPart storeCodeOn: stream indent: 0]])
>> +               for: self topEditor playerScripted
>> +               logged: false)!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>evaluateOn: (in category
>> '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluateRepeat: self!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>nextTile (in category '*etoys-debugger')
>> -----
>> + nextTile
>> +       "Instead of just returning my next tile I return my first tile if
>> I haven't been evaluated enough times"
>> +       self timesToRepeat <= 0
>> +               ifTrue: [^ super nextTile].
>> +       self timesToRepeat: self timesToRepeat - 1.
>> +       ^ self whatToRepeatPart tiles at: 1 ifAbsent: [super nextTile]!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>timesToRepeat (in category
>> '*etoys-debugger') -----
>> + timesToRepeat
>> +       ^ self topEditor etoysDebugger timesToRepeat!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>timesToRepeat: (in category
>> '*etoys-debugger') -----
>> + timesToRepeat: aNumber
>> +       ^ self topEditor etoysDebugger timesToRepeat: aNumber!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>whatToRepeatPart (in category
>> '*etoys-debugger') -----
>> + whatToRepeatPart
>> +       ^ whatToRepeatPart!
>>
>>
>> _______________________________________________
>> etoys-dev mailing list
>> [hidden email]
>> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>>
>
>
> _______________________________________________
> etoys-dev mailing list
> [hidden email]
> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>
_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev
Reply | Threaded
Open this post in threaded view
|

Re: Etoys: Etoys-kfr.99.mcz

Bert Freudenberg
In reply to this post by Karl Ramberg
No idea - something in the diff must have triggered the TVD_STOCK1 spam detector, which classified it as promoting stocks. =)

- Bert -

On 03.02.2012, at 15:01, karl ramberg wrote:

> Why was this marked as spam ?
>
> Karl
>
> On Fri, Feb 3, 2012 at 11:41 PM,  <[hidden email]> wrote:
>> Spam detection software, running on the system "europa.mgmt.inetu.net", has
>> identified this incoming email as possible spam.  The original message
>> has been attached to this so you can view it (if it isn't spam) or label
>> similar future email.  If you have any questions, see
>> the administrator of that system for details.
>>
>> Content preview:  Karl Ramberg uploaded a new version of Etoys to project Etoys:
>>   http://source.squeak.org/etoys/Etoys-kfr.99.mcz ==================== Summary
>>   ==================== Name: Etoys-kfr.99 Author: kfr Time: 3 February 2012,
>>   11:41:17 pm UUID: 1b86a282-0433-9448-b74e-579b32ca4e32 Ancestors: Etoys-kfr.98
>>   [...]
>>
>> Content analysis details:   (5.6 points, 5.0 required)
>>
>>  pts rule name              description
>> ---- ---------------------- --------------------------------------------------
>>  3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
>>                            [score: 1.0000]
>>  0.0 MISSING_MID            Missing Message-Id: header
>>  1.2 INVALID_DATE           Invalid Date: header (not RFC 2822)
>>  1.0 DATE_IN_PAST_12_24     Date: is 12 to 24 hours before Received: date
>>  3.8 TVD_STOCK1             BODY: TVD_STOCK1
>>  0.1 RDNS_NONE              Delivered to trusted network by a host with no rDNS
>> -3.9 AWL                    AWL: From: address is in the auto white-list
>>
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: [hidden email]
>> To: [hidden email]
>> Cc:
>> Date: Fri, 3 Feb 2012 22:41:56.469 0000
>> Subject: Etoys: Etoys-kfr.99.mcz
>> Karl Ramberg uploaded a new version of Etoys to project Etoys:
>> http://source.squeak.org/etoys/Etoys-kfr.99.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Etoys-kfr.99
>> Author: kfr
>> Time: 3 February 2012, 11:41:17 pm
>> UUID: 1b86a282-0433-9448-b74e-579b32ca4e32
>> Ancestors: Etoys-kfr.98
>>
>> This is Ricardo Moran's implementation of a step-next-phrase feature in etoy Scriptors, with minor curating by Scott Wallace.
>>
>> =============== Diff against Etoys-kfr.98 ===============
>>
>> Item was changed:
>>  SystemOrganization addCategory: #'EToys-Kedama'!
>>  SystemOrganization addCategory: #'Etoys-Buttons'!
>>  SystemOrganization addCategory: #'Etoys-CustomEvents'!
>>  SystemOrganization addCategory: #'Etoys-Experimental'!
>>  SystemOrganization addCategory: #'Etoys-Help'!
>>  SystemOrganization addCategory: #'Etoys-Outliner'!
>>  SystemOrganization addCategory: #'Etoys-Protocols'!
>>  SystemOrganization addCategory: #'Etoys-Protocols-Type Vocabularies'!
>>  SystemOrganization addCategory: #'Etoys-Scratch'!
>>  SystemOrganization addCategory: #'Etoys-Scripting'!
>>  SystemOrganization addCategory: #'Etoys-Scripting Support'!
>>  SystemOrganization addCategory: #'Etoys-Scripting Tiles'!
>>  SystemOrganization addCategory: #'Etoys-Stacks'!
>>  SystemOrganization addCategory: #'Etoys-StarSqueak'!
>>  SystemOrganization addCategory: #'Etoys-Tile Scriptors'!
>>  SystemOrganization addCategory: #'Etoys-Widgets'!
>>  SystemOrganization addCategory: #'Etoys-SpeechBubbles'!
>> + SystemOrganization addCategory: #'Etoys-Debugger'!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluateTest: self!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>evaluateTestPart (in category '*etoys-debugger') -----
>> + evaluateTestPart
>> +       | condition |
>> +       condition := testPart tiles at: 1 ifAbsent: [^ true].
>> +       ^ Compiler evaluate: condition codeString
>> +                               for: condition associatedPlayer
>> +                               logged: false!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>noPart (in category '*etoys-debugger') -----
>> + noPart
>> +       ^ noPart!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>testPart (in category '*etoys-debugger') -----
>> + testPart
>> +       ^ testPart!
>>
>> Item was added:
>> + ----- Method: CompoundTileMorph>>yesPart (in category '*etoys-debugger') -----
>> + yesPart
>> +       ^ yesPart!
>>
>> Item was added:
>> + Object subclass: #EtoysDebugger
>> +       instanceVariableNames: 'scriptEditor next timesToRepeat highlighter'
>> +       classVariableNames: ''
>> +       poolDictionaries: ''
>> +       category: 'Etoys-Debugger'!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger class>>initialize (in category 'class initialization') -----
>> + initialize
>> + "
>> +       self initialize
>> + "
>> + | buttonForm buttonPressedForm |
>> + buttonForm := (Form
>> +       extent: 30@30
>> +       depth: 16
>> +       fromArray: #( 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 65537 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 98303 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 65537 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 98303 2147450879 2147450879 2147450879 2147450879 2147444537 1731821567 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 65537 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 98303 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147418113 98303 2147418113 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 0 0 0 0 26425 1731821567 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147444537 1731788800 0 0 0 0 0 26425 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 2147450879 1731788800 0 0 0 0 0 0 0 1731815225 1731821567 2147450879 2147450879 2147450879 2147444537 1731815225 0 0 0 0 0 0 0 0 0 26425 1731815225 1731815225 1731815225 1731788800 0 0 0 0 0)
>> +       offset: 0@0).
>> + buttonPressedForm := (Form
>> +       extent: 30@30
>> +       depth: 16
>> +       fromArray: #( 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 65537 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 88790 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 65537 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 88790 1523997398 1523997398 1523997398 1523997398 1523993170 1246911190 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 65537 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 88790 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523974145 88790 1523974145 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 0 0 0 0 19026 1246911190 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523993170 1246887936 0 0 0 0 0 19026 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1523997398 1246887936 0 0 0 0 0 0 0 1246906962 1246911190 1523997398 1523997398 1523997398 1523993170 1246906962 0 0 0 0 0 0 0 0 0 19026 1246906962 1246906962 1246906962 1246887936 0 0 0 0 0)
>> +       offset: 0@0).
>> + ScriptingSystem saveForm: buttonForm atKey: #StepMe.
>> + ScriptingSystem saveForm: buttonPressedForm atKey: #StepMePressed!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger class>>on: (in category 'instance creation') -----
>> + on: aScriptEditorMorph
>> +       ^ self basicNew initializeWith: aScriptEditorMorph!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>delete (in category 'as yet unclassified') -----
>> + delete
>> +       highlighter ifNotNil: [:h | h delete]!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluateNextTile (in category 'evaluating') -----
>> + evaluateNextTile
>> +       [next evaluateOn: self]
>> +               on: Error do: [:err || newNext |
>> +                       newNext := scriptEditor tiles at: 1 ifAbsent: [^ self].
>> +                       newNext = next
>> +                               ifTrue: [err pass]
>> +                               ifFalse: [next := newNext].
>> +                       self evaluateNextTile]!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluatePhrase: (in category 'evaluating') -----
>> + evaluatePhrase: tile
>> +       self highlight: tile.
>> +       tile try.
>> +       next := tile nextTile!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluateRepeat: (in category 'evaluating') -----
>> + evaluateRepeat: tile
>> +       self highlight: tile numberOfTimesToRepeatPart;
>> +               timesToRepeat: tile calculateTimesToRepeat.
>> +       next := tile nextTile!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>evaluateTest: (in category 'evaluating') -----
>> + evaluateTest: test
>> +       | tile |
>> +       test testPart tiles isEmpty
>> +               ifTrue: [next := test yesPart tiles at: 1 ifAbsent: [test nextTile].
>> +                       ^ self evaluateNextTile].
>> +       self highlight: test testPart.
>> +       tile := test evaluateTestPart
>> +               ifTrue: [test yesPart]
>> +               ifFalse: [test noPart].
>> +       next := tile tiles at: 1 ifAbsent: [test nextTile]!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>highlight: (in category 'highlighting') -----
>> + highlight: aMorph
>> +       "| rect |
>> +       rect := BorderedMorph newBounds: aMorph bounds color: Color transparent.
>> +       rect openInWorld.
>> +       World addAlarm: #delete
>> +               withArguments: #()
>> +               for: rect
>> +               at: (Time millisecondClockValue + 200)."
>> +       highlighter ifNotNil: [highlighter delete].
>> +       highlighter := HighlightMorph on: aMorph.
>> +       highlighter openInWorld!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>initializeWith: (in category 'initialization') -----
>> + initializeWith: aScriptEditorMorph
>> +       scriptEditor := aScriptEditorMorph.
>> +       next := scriptEditor tiles at: 1 ifAbsent: nil.
>> +       self initialize!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>timesToRepeat (in category 'accessing') -----
>> + timesToRepeat
>> +       ^ timesToRepeat!
>>
>> Item was added:
>> + ----- Method: EtoysDebugger>>timesToRepeat: (in category 'accessing') -----
>> + timesToRepeat: aNumber
>> +       timesToRepeat := aNumber!
>>
>> Item was added:
>> + Morph subclass: #HighlightMorph
>> +       instanceVariableNames: 'target lastHash stepTime'
>> +       classVariableNames: ''
>> +       poolDictionaries: ''
>> +       category: 'Etoys-Debugger'!
>>
>> Item was added:
>> + ----- Method: HighlightMorph class>>on: (in category 'as yet unclassified') -----
>> + on: targetMorph
>> +       ^ self basicNew initializeWith: targetMorph!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>containsPoint: (in category 'testing') -----
>> + containsPoint: aPoint
>> + ^ (self bounds containsPoint: aPoint) and:
>> +         [(self imageForm isTransparentAt: aPoint - bounds origin) not]!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>incrementStepTime (in category 'stepping') -----
>> + incrementStepTime
>> +       stepTime := (stepTime + 1) min: self maximumStepTime!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>initialize (in category 'initialize-release') -----
>> + initialize
>> +       super initialize.
>> +       stepTime := self minimumStepTime.
>> +       self color: Color transparent;
>> +               borderWidth: 2;
>> +               borderColor: Color red muchDarker muchDarker!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>initializeWith: (in category 'initialize-release') -----
>> + initializeWith: targetMorph
>> +       target := targetMorph.
>> +       self initialize!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>maximumStepTime (in category 'stepping') -----
>> + maximumStepTime
>> +       ^500!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>minimumStepTime (in category 'stepping') -----
>> + minimumStepTime
>> +       ^20!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>step (in category 'stepping') -----
>> + step
>> +       (target isNil or: [lastHash = (lastHash := target boundsSignatureHash)])
>> +               ifTrue: [self incrementStepTime]
>> +               ifFalse: [stepTime := self minimumStepTime].
>> +
>> +       target notNil ifTrue: [
>> +               target isInWorld ifFalse: [^self delete].
>> +               self bounds: target bounds]!
>>
>> Item was added:
>> + ----- Method: HighlightMorph>>stepTime (in category 'stepping') -----
>> + stepTime
>> +       ^ stepTime!
>>
>> Item was changed:
>>  ----- Method: Morph class>>helpContributions (in category '*eToys-scripting') -----
>>  helpContributions
>>        "Answer a list of pairs of the form (<symbol> <help message> ) to contribute to the system help dictionary"
>>
>>  "NB: Many of the items here are not needed any more since they're specified as part of command definitions now.  Someone needs to take the time to go through the list and remove items no longer needed.  But who's got that kind of time?"
>>
>>        ^ #(
>>                (acceptScript:for:
>>                        'submit the contents of the given script editor as the code defining the given selector')
>>                (actorState
>>                        'return the ActorState object for the receiver, creating it if necessary')
>>                (addInstanceVariable
>>                        'start the interaction for adding a new variable to the object')
>>                (addPlayerMenuItemsTo:hand:
>>                        'add player-specific menu items to the given menu, on behalf of the given hand.  At present, these are only commands relating to the turtle')
>>                (addYesNoToHand
>>                        'Press here to tear off a TEST/YES/NO unit which you can drop into your script')
>>                (allScriptEditors
>>                        'answer a list off the extant ScriptEditors for the receiver')
>>                (amount
>>                        'The amount of displacement')
>>                (angle
>>                        'The angular displacement')
>>                (anonymousScriptEditorFor:
>>                        'answer a new ScriptEditor object to serve as the place for scripting an anonymous (unnamed, unsaved) script for the receiver')
>>                (append:
>>                        'add an object to this container')
>>                (prepend:
>>                        'add an object to this container')
>>                (assignDecrGetter:setter:amt:
>>                        'evaluate the decrement variant of assignment')
>>                (assignGetter:setter:amt:
>>                        'evaluate the vanilla variant of assignment')
>>                (assignIncrGetter:setter:amt:
>>                        'evalute the increment version of assignment')
>>                (assignMultGetter:setter:amt:
>>                        'evaluate the multiplicative version of assignment')
>>                (assureEventHandlerRepresentsStatus
>>                        'make certain that the event handler associated with my current costume is set up to conform to my current script-status')
>>                (assureExternalName
>>                        'If I do not currently have an external name assigned, get one now')
>>                (assureUniClass
>>                        'make certain that I am a member a uniclass (i.e. a unique subclass); if I am not, create one now and become me into an instance of it')
>>                (availableCostumeNames
>>                        'answer a list of strings representing the names of all costumes currently available for me')
>>                (availableCostumesForArrows
>>                        'answer a list of actual, instantiated costumes for me, which can be cycled through as the user hits a next-costume or previous-costume button in a viewer')
>>                (beep:
>>                        'make the specified sound')
>>                (borderColor
>>                        'The color of the object''s border')
>>                (borderWidth
>>                        'The width of the object''s border')
>>                (bottom
>>                        'My bottom edge, measured downward from the top edge of the world')
>>                (bounce:
>>                        'If object strayed beyond the boundaries of its container, make it reflect back into it, making the specified noise while doing so.')
>>                (bounce
>>                        'If object strayed beyond the boundaries of its container, make it reflect back into it')
>>                (chooseTrigger
>>  'When this script should run.
>>  "normal" means "only when called"')
>>                (clearTurtleTrails
>>                        'Clear all the pen trails in the interior.')
>>                (clearOwnersPenTrails
>>                        'Clear all the pen trails in my container.')
>>                (color
>>                        'The object''s interior color')
>>                (colorSees
>>                        'Whether a given color in the object is over another given color')
>>                (colorUnder
>>                        'The color under the center of the object')
>>                (copy
>>                        'Return a new object that is very much like this one')
>>                (cursor
>>                        'The index of the chosen element')
>>                (deleteCard
>>                        'Delete the current card.')
>>                (dismiss
>>                        'Click here to dismiss me')
>>                (doMenuItem:
>>                        'Do a menu item, the same way as if it were chosen manually')
>>                (doScript:
>>                        'Perform the given script once, on the next tick.')
>>                (elementNumber
>>                        'My element number as seen by my owner')
>>                (fire
>>                        'Run any and all button-firing scripts of this object')
>>                (firstPage
>>                        'Go to first page of book')
>>                (followPath
>>                                'Retrace the path the object has memorized, if any.')
>>                (forward:
>>                        'Moves the object forward in the direction it is heading')
>>                (goto:
>>                        'Go to the specfied book page')
>>                (goToNextCardInStack
>>                        'Go to the next card')
>>                (goToPreviousCardInStack
>>                        'Go to the previous card.')
>>                (goToRightOf:
>>                        'Align the object just to the right of any specified object.')
>>                (heading
>>                        'Which direction the object is facing.  0 is straight up')
>>                (height
>>                        'The distance between the top and bottom edges of the object')
>>                (hide
>>                        'Make the object so that it does not display and cannot handle input')
>>                (initiatePainting
>>                        'Initiate painting of a new object in the standard playfield.')
>>                (initiatePaintingIn:
>>                        'Initiate painting of a new object in the given place.')
>>                (isOverColor
>>                        'Whether any part of this object is directly over the specified color')
>>                (isUnderMouse
>>                        'Whether any part of this object is beneath the current mouse-cursor position')
>>                (lastPage
>>                        'Go to the last page of the book.')
>>                (left
>>                        'My left edge, measured from the left edge of the World')
>>                (leftRight
>>                        'The horizontal displacement')
>>                (liftAllPens
>>                        'Lift the pens on all the objects in my interior.')
>>                (lowerAllPens
>>                        'Lower the pens on all the objects in my interior.')
>>                (mouseX
>>                        'The x coordinate of the mouse pointer')
>>                (mouseY
>>                        'The y coordinate of the mouse pointer')
>>                (moveToward:
>>                        'Move in the direction of another object.')
>>                (insertCard
>>                        'Create a new card.')
>>                (nextPage
>>                        'Go to next page.')
>>                (numberAtCursor
>>                        'The number held by the object at the chosen element')
>>                (objectNameInHalo
>>                        'Object''s name -- To change: click here, edit, hit ENTER')
>>                (obtrudes
>>                        'Whether any part of the object sticks out beyond its container''s borders')
>>                (offerScriptorMenu
>>                        'The Scriptee.
>>  Press here to get a menu')
>>                (pauseScript:
>>                        'Make a running script become paused.')
>>                (penDown
>>                        'Whether the object''s pen is down (true) or up (false)')
>>                (penColor
>>                        'The color of the object''s pen')
>>                (penSize
>>                        'The size of the object''s pen')
>>                (clearPenTrails
>>                        'Clear all pen trails in the current playfield')
>>                (playerSeeingColorPhrase
>>                        'The player who "sees" a given color')
>>                (previousPage
>>                        'Go to previous page')
>>
>>                (show
>>                        'If object was hidden, make it show itself again.')
>>                (startScript:
>>                        'Make a script start running.')
>>                (stopScript:
>>                        'Make a script stop running.')
>>                (top
>>                        'My top edge, measured downward from the top edge of the world')
>>                (right
>>                        'My right edge, measured from the left edge of the world')
>>                (roundUpStrays
>>                        'Bring all out-of-container subparts back into view.')
>>                (scaleFactor
>>                        'The amount by which the object is scaled')
>> +               (stepMe
>> +                       'Run the next phrase in the script.')
>>                (stopScript:
>>                        'make the specified script stop running')
>>                (tellAllSiblings:
>>                        'send a message to all of my sibling instances')
>>                (try
>>                        'Run this command once.' translatedNoop)
>>                (tryMe
>>                        'Click here to run this script once; hold button down to run repeatedly'  translatedNoop)
>>                (turn:
>>                        'Change the heading of the object by the specified amount')
>>                (unhideHiddenObjects
>>                        'Unhide all hidden objects.')
>>                (upDown
>>                        'The vertical displacement')
>>                (userScript
>>                        'This is a script defined by you.')
>>                (userSlot
>>                        'This is a variable defined by you.  Click here to change its type')
>>                (valueAtCursor
>>                        'The chosen element')
>>                (wearCostumeOf:
>>                        'Make this object''s appearance be the same as that of another object')
>>                (width
>>                        'The distance between the left and right edges of the object')
>>                (wrap
>>                        'If object has strayed beond the boundaries of its container, make it reappear from the opposite edge.')
>>                (x
>>                        'The x coordinate, measured from the left of the container')
>>                (y
>>                        'The y-coordinate, measured upward from the bottom of the container')
>>
>>                )
>>  !
>>
>> Item was added:
>> + ----- Method: PhraseTileMorph>>evaluateOn: (in category '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluatePhrase: self!
>>
>> Item was changed:
>>  ----- Method: PhraseTileMorph>>try (in category 'miscellaneous') -----
>>  try
>>        "Evaluate the given phrase once"
>>
>>        | aPlayer |
>>        (userScriptSelector notNil and: [userScriptSelector numArgs = 0])
>>                ifTrue:
>>                        [aPlayer _ self objectViewed player.
>>                        aPlayer triggerScript: userScriptSelector]
>>                ifFalse:
>>                        [[Compiler evaluate:
>>                                self codeString
>> +                               for: (self topEditor
>> +                                       ifNil: [self associatedPlayer]
>> +                                       ifNotNil: [:editor | editor playerScripted])
>> -                               for: self associatedPlayer
>>                                logged: false] ifError: [self inform: 'evaluation error' translated]]!
>>
>> Item was changed:
>>  ----- Method: ScriptEditorMorph>>buttonRowForEditor (in category 'buttons') -----
>>  buttonRowForEditor
>>        "Answer a row of buttons that comprise the header at the top of the Scriptor"
>>
>>        | aRow aString aStatusMorph aButton aTile aMorph goldBoxButton aBox |
>>        aRow _ AlignmentMorph newRow color: ScriptingSystem baseColor; layoutInset: 1.
>>        aRow hResizing: #spaceFill.
>>        aRow vResizing: #shrinkWrap.
>>        self addDismissButtonTo: aRow.
>>        aRow addTransparentSpacerOfSize: 9.
>>
>>        "Player's name"
>>        aString _ playerScripted externalName.
>>        aMorph _ StringMorph contents: aString font: ScriptingSystem fontForTiles.
>>        aMorph setNameTo: 'title'.
>>        aRow addMorphBack: aMorph.
>>        aRow addTransparentSpacerOfSize: 6.
>>
>>        "Script's name"
>>        aBox := AlignmentMorph newRow.
>>        aBox hResizing: #shrinkWrap; vResizing: #shrinkWrap.
>>        aBox color: (Color r: 0.839 g: 1.0 b: 0.806).
>>        aBox borderWidth: 1.
>>        aBox  borderColor: (Color r: 0.645 g: 0.774 b: 0.613).
>>        aButton _ UpdatingStringMorph new.
>>        aButton useStringFormat;
>>                target:  self;
>>                getSelector: #scriptTitle;
>>                setNameTo: 'script name';
>>                font: ScriptingSystem fontForNameEditingInScriptor;
>>                putSelector: #setScriptNameTo:;
>>                setProperty: #okToTextEdit toValue: true;
>>                step;
>>                yourself.
>>        aBox addMorph: aButton.
>>        aRow addMorphBack: aBox.
>>        aBox setBalloonText: 'Click here to edit the name of the script.' translated.
>>        "aRow addTransparentSpacerOfSize: 9."
>>        aRow addVariableTransparentSpacer.
>>
>>        "Try It button"
>>        self hasParameter ifFalse:
>>                [aRow addMorphBack:
>>                        ((ThreePhaseButtonMorph
>>                                labelSymbol: #TryIt
>>                                target: self
>>                                actionSelector: #tryMe
>>                                arguments: EmptyArray)
>>                                actWhen: #whilePressed;
>>                                balloonTextSelector: #tryMe).
>>                aRow addTransparentSpacerOfSize: 3].
>>
>> +       "Step button"
>> +       self hasParameter ifFalse:
>> +               [aRow addMorphBack: (aButton := ThreePhaseButtonMorph
>> +                               labelSymbol: #StepMe
>> +                               target: self
>> +                               actionSelector: #stepMe
>> +                               arguments: EmptyArray).
>> +               aButton balloonTextSelector: #stepMe.
>> +               aRow addTransparentSpacerOfSize: 3].
>> +
>>        "Status controller"
>>        self hasParameter
>>                ifTrue:
>>                        [aTile _ TypeListTile new choices: Vocabulary typeChoices dataType: nil.
>>                        aTile addArrows.
>>                        aTile setLiteral: self typeForParameter.
>>                        aRow addMorphBack: aTile.
>>                        aTile borderColor: Color red.
>>                        aTile color: ScriptingSystem uniformTileInteriorColor.
>>                        aTile setBalloonText: 'Drag from here to get a parameter tile' translated.
>>                        aTile addCaretsAsAppropriate: true]
>>                ifFalse:
>>                        [aRow addMorphBack: (aStatusMorph _ self scriptInstantiation statusControlMorph)].
>>
>>        "aRow addTransparentSpacerOfSize: 3."
>>        aRow addVariableTransparentSpacer.
>>
>>        "Gold-box"
>>        aRow addMorphBack: (goldBoxButton _ IconicButton new).
>>        goldBoxButton borderWidth: 0;
>>                        labelGraphic: (ScriptingSystem formAtKey: 'RoundGoldBox'); color: Color transparent;
>>                        actWhen: #buttonDown;
>>                        target: self;
>>                        actionSelector: #offerGoldBoxMenu;
>>                        shedSelvedge;
>>                        setBalloonText: 'click here to get a palette of useful tiles to use in your script.' translated.
>>        aRow addTransparentSpacerOfSize: 6@1.
>>
>>        "Menu Button"
>>        aButton _ self menuButton.
>>        aButton actionSelector: #offerScriptorMenu.
>>        aRow addMorphBack: aButton.
>>
>>        (playerScripted existingScriptInstantiationForSelector: scriptName)
>>                ifNotNilDo:
>>                        [:inst | inst updateStatusMorph: aStatusMorph].
>>        ^ aRow!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>deleteEtoysDebugger (in category '*etoys-debugger') -----
>> + deleteEtoysDebugger
>> +       (self valueOfProperty: #etoysDebugger ifAbsent: [^ self])
>> +               delete.
>> +       self removeProperty: #etoysDebugger!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>etoysDebugger (in category '*etoys-debugger') -----
>> + etoysDebugger
>> +       ^ self valueOfProperty: #etoysDebugger ifAbsentPut: [EtoysDebugger on: self]!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>nextTile (in category '*etoys-debugger') -----
>> + nextTile
>> +       ^ (self ownerThatIsA: TileLikeMorph orA: ScriptEditorMorph)
>> +               nextTile
>> + !
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>nextTileTo: (in category '*etoys-debugger') -----
>> + nextTileTo: aTileMorph
>> +       | tiles index |
>> +       tiles := self tiles.
>> +       index := (tiles indexOf: aTileMorph) + 1.
>> +       index > tiles size
>> +               ifTrue: [self = self topEditor
>> +                       ifTrue: [^ tiles at: 1]
>> +                       ifFalse: [^ self nextTile]].
>> +       ^ tiles at: index!
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>stepMe (in category '*etoys-debugger') -----
>> + stepMe
>> +       self etoysDebugger evaluateNextTile !
>>
>> Item was added:
>> + ----- Method: ScriptEditorMorph>>tiles (in category '*etoys-debugger') -----
>> + tiles
>> +       ^ self tileRows collect: [:each | each first]!
>>
>> Item was changed:
>>  ----- Method: ScriptEditorMorph>>tryMe (in category 'buttons') -----
>>  tryMe
>>        "Evaluate the given script on behalf of the scripted object"
>>
>>        scriptName numArgs = 0
>>                ifTrue:
>> +                       [self deleteEtoysDebugger.
>> +                       self playerScripted performScriptIfCan: scriptName ]
>> -                       [self playerScripted performScriptIfCan: scriptName ]
>>
>>  !
>>
>> Item was changed:
>>  ----- Method: ScriptEditorMorph>>updateStatus (in category 'buttons') -----
>>  updateStatus
>>        "Update that status in the receiver's header.  "
>>
>>        (self topEditor == self and: [firstTileRow ~~ 1]) ifTrue:
>>                [(submorphs size == 0 or: [(self firstSubmorph findA: ScriptStatusControl) isNil])
>>                        ifTrue:
>>                                [self replaceRow1].
>>                self updateStatusMorph: (self firstSubmorph findA: ScriptStatusControl)]!
>>
>> Item was changed:
>>  ----- Method: ScriptStatusControl>>mouseUpTick:onItem: (in category 'mouse gestures') -----
>>  mouseUpTick: evt onItem: aMorph
>>        self removeAlarm: #offerTickingMenu:.
>> +       (self ownerThatIsA: ScriptEditorMorph) deleteEtoysDebugger.
>>        aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
>>        (scriptInstantiation status == #ticking) ifTrue:[
>>                scriptInstantiation status: #paused.
>>                aMorph color: (Color r: 1.0 g: 0.774 b: 0.774).
>>                aMorph isTicking: false.
>>        ] ifFalse:[
>>                scriptInstantiation status: #ticking.
>>                aMorph color: (Color r: 0.767 g: 0.767 b: 1.0).
>>                aMorph isTicking: true.
>>        ].
>>        scriptInstantiation updateAllStatusMorphs.!
>>
>> Item was added:
>> + ----- Method: TileLikeMorph>>nextTile (in category '*etoys-debugger') -----
>> + nextTile
>> +       ^ (self ownerThatIsA: ScriptEditorMorph)
>> +               nextTileTo: self!
>>
>> Item was added:
>> + ----- Method: TimesRepeatMorph>>evaluateOn: (in category '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluateRepeat: self!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>calculateTimesToRepeat (in category '*etoys-debugger') -----
>> + calculateTimesToRepeat
>> +       ^ (Compiler evaluate: (String streamContents: [:stream |
>> +                       self numberOfTimesToRepeatPart submorphs
>> +                               ifEmpty: [stream nextPutAll: '0']
>> +                               ifNotEmpty: [self numberOfTimesToRepeatPart storeCodeOn: stream indent: 0]])
>> +               for: self topEditor playerScripted
>> +               logged: false)!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>evaluateOn: (in category '*etoys-debugger') -----
>> + evaluateOn: anEtoysDebugger
>> +       ^ anEtoysDebugger evaluateRepeat: self!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>nextTile (in category '*etoys-debugger') -----
>> + nextTile
>> +       "Instead of just returning my next tile I return my first tile if I haven't been evaluated enough times"
>> +       self timesToRepeat <= 0
>> +               ifTrue: [^ super nextTile].
>> +       self timesToRepeat: self timesToRepeat - 1.
>> +       ^ self whatToRepeatPart tiles at: 1 ifAbsent: [super nextTile]!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>timesToRepeat (in category '*etoys-debugger') -----
>> + timesToRepeat
>> +       ^ self topEditor etoysDebugger timesToRepeat!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>timesToRepeat: (in category '*etoys-debugger') -----
>> + timesToRepeat: aNumber
>> +       ^ self topEditor etoysDebugger timesToRepeat: aNumber!
>>
>> Item was added:
>> + ----- Method: TimesRepeatTile>>whatToRepeatPart (in category '*etoys-debugger') -----
>> + whatToRepeatPart
>> +       ^ whatToRepeatPart!
>>
>>
>> _______________________________________________
>> etoys-dev mailing list
>> [hidden email]
>> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>>



_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev