[etoys-dev] Etoys: Etoys-kfr.70.mcz

Bert Freudenberg bert at freudenbergs.de
Sun May 22 18:49:52 EDT 2011


Hi Karl,

this breaks all viewers because the method ScriptingSystem>>commandFeedback is missing. PLease try updating from a clean Etoys-To-Go to witness.

I just published an update, which unfortunately is broken because of this. Luckily, I wrote up what I did so far so you can do the next one :)

	http://etoys.squeak.org/svn/trunk/Documentation/Release-HowTo.txt

I also made a screen cast:

	http://www.youtube.com/watch?v=rUzrfjP4Jck

This takes only 10 minutes, and you can do it even quicker if you don't have to talk while doing it ;)

- Bert -

On 22.05.2011, at 18:00, commits at source.squeak.org wrote:

> Karl Ramberg uploaded a new version of Etoys to project Etoys:
> http://source.squeak.org/etoys/Etoys-kfr.70.mcz
> 
> ==================== Summary ====================
> 
> Name: Etoys-kfr.70
> Author: kfr
> Time: 22 May 2011, 8:00:42 pm
> UUID: cdee253f-af6d-9b46-8493-464179d48432
> Ancestors: Etoys-kfr.69
> 
> Mouseover Feedback of a phrase tile is wrong
> http://tracker.squeakland.org/browse/SQ-62
> 
> =============== Diff against Etoys-kfr.69 ===============
> 
> Item was changed:
>  ----- Method: CategoryViewer>>addColorSeesDetailTo: (in category 'entries') -----
>  addColorSeesDetailTo: aRow
>  	"Special-casee code for the boolean-valued phrase variously known as is-over-color or sees-color."
> + 	| hotTileForSelf colorMorph |
> - 	| hotTileForSelf m |
>  	(aRow submorphs last) delete.
>  	aRow addMorphBack: (hotTileForSelf _ ColorSeerTile new showPalette: false; yourself).
> + 	aRow addMorphBack: (colorMorph _ ColorTileMorph new showPalette: false;
> - 	aRow addMorphBack: (m _ ColorTileMorph new showPalette: false;
>  				typeColor: (ScriptingSystem colorForType: #Color); yourself).
> + 	colorMorph colorSwatch color: Color blue.
> + 	 hotTileForSelf on: #mouseEnter send: #addGetterFeedback to: aRow.
> - 	m colorSwatch color: Color blue.
> - 	hotTileForSelf on: #mouseEnter send: #addGetterFeedback to: aRow.
>  	hotTileForSelf on: #mouseLeave send: #removeHighlightFeedback to: aRow.
>  	hotTileForSelf on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
> 
>  	hotTileForSelf  on: #mouseDown send: #makeGetter:event:from:
>  		to: self
>  		withValue: (Array with: #color:sees: with: #Boolean).
> 
> + 	 colorMorph on: #mouseEnter send: #addGetterFeedback to: aRow.
> + 	colorMorph on: #mouseLeave send: #removeHighlightFeedback to: aRow.
> + 	colorMorph on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
> + 
> + 	colorMorph  on: #mouseDown send: #makeGetter:event:from:
> + 		to: self
> + 		withValue: (Array with: #color:sees: with: #Boolean).
> + 
>  	aRow addMorphBack: (Morph new extent: 0@(aRow height)).
>  !
> 
> Item was changed:
>  ----- Method: CategoryViewer>>addIsOverColorDetailTo: (in category 'entries') -----
>  addIsOverColorDetailTo: aRow
>  	"Special-casee code for the boolean-valued phrase variously known as is-over-color or sees-color."
> 
> + 	| hotTileForSelf |
> + 	aRow addMorphBack: (Morph new color: self color; extent: 0 at 10).  "spacer"
> + 	hotTileForSelf _ ColorTileMorph new showPalette: false;
> - 	| m |
> - 	aRow addMorphBack: (Morph new color: self color; extent: 2 at 10).  "spacer"
> - 	m _ ColorTileMorph new showPalette: false;
>  				typeColor: (ScriptingSystem colorForType: #Color); yourself.
> + 	hotTileForSelf colorSwatch color: Color blue.
> + 	 hotTileForSelf on: #mouseEnter send: #addGetterFeedback to: aRow.
> + 	hotTileForSelf on: #mouseLeave send: #removeHighlightFeedback to: aRow.
> + 	hotTileForSelf on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
> + 	hotTileForSelf  on: #mouseDown send: #makeGetter:event:from:
> + 		to: self
> + 		withValue: (Array with: #seesColor: with: #Color).
> +         aRow addMorphBack: hotTileForSelf.
> - 	m colorSwatch color: Color blue.
> - 	aRow addMorphBack: (m _ ColorTileMorph new showPalette: false;
> - 				typeColor: (ScriptingSystem colorForType: #Color); yourself).
> 
> 
> 
> - 
>  "The following commented-out code put a readout up; the readout was very nice, but was very consumptive of cpu time, which is why the is-over-color tile got removed from the viewer long ago.  Now is-over-color is reinstated to the viewer, minus the expensive readout..."
> 
>  "	aRow addMorphBack: (AlignmentMorph new beTransparent).
>  	readout _ UpdatingStringMorphWithArgument new
>  			target: scriptedPlayer; getSelector: #seesColor:; growable: false; putSelector: nil;
>  			argumentTarget: clrTile colorSwatch argumentGetSelector: #color.
>  	readout useDefaultFormat.
>  	aTile _ StringReadoutTile new typeColor: Color lightGray lighter.
>  	aTile addMorphBack: readout.
>  	aRow addMorphBack: aTile.
>  	aTile setLiteralTo: (scriptedPlayer seesColor: clrTile colorSwatch color) printString width: 30"!
> 
> Item was changed:
>  ----- Method: CategoryViewer>>addPlayerArgumentTo: (in category 'entries') -----
>  addPlayerArgumentTo: aRow
>  	"Add, delimited by spacer morphs, a player-valued TileMorph to the row provided."
> 
> + 	| aTileToRefer |
>  	aRow addMorphBack: (Morph new extent: 0 at 0).  "spacer (Is this spacer really needed??? - takashi)"
> + 	aTileToRefer :=  self presenter standardPlayer tileToRefer.
> + 	aTileToRefer on: #mouseEnter send: #addGetterFeedback to: aRow.
> + 		aTileToRefer on: #mouseLeave send: #removeHighlightFeedback to: aRow.
> + 		aTileToRefer on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
> + 	aRow addMorphBack: aTileToRefer .
> - 	aRow addMorphBack:  self presenter standardPlayer tileToRefer.
>  	aRow addMorphBack: (AlignmentMorph new beTransparent).  "flexible spacer"
> 
>  !
> 
> Item was changed:
>  ----- Method: CategoryViewer>>phraseForVariableFrom: (in category 'entries') -----
>  phraseForVariableFrom: aMethodInterface
>  	"Return a structure consisting of tiles and controls and a readout representing a 'variable' belonging to the player, complete with an appropriate readout when indicated. Slightly misnamed in that this path is used for any methodInterface that indicates an interesting resultType."
> 
> + 	| anArrow slotName getterButton aRow doc setter hotTileForSelf spacer readOut aTileToRefer |
> - 	| anArrow slotName getterButton aRow doc setter hotTileForSelf spacer |
>  	Preferences universalTiles ifTrue: [^ self universalTilesPhraseForVariableFrom: aMethodInterface].
> 
>  	aRow _ ViewerLine newRow
>  		elementSymbol: (slotName _ aMethodInterface selector);
>  		wrapCentering: #center;
>  		cellPositioning: #leftCenter.
> 
>  	(self wantsInfoButtonFor: slotName)
>  		ifFalse:
>  			[aRow addMorphBack: ScriptingSystem buttonSpacer]
>  		ifTrue:
>  			[aRow addMorphBack: (self infoButtonFor: slotName)].
> 
>  	aRow addMorphBack: self spacerAfterButton.
> 
>  	hotTileForSelf _ self tileForSelf bePossessive.
>  	hotTileForSelf  on: #mouseDown send: #makeGetter:event:from:
>  		to: self
>  		withValue: (Array with: aMethodInterface selector with: aMethodInterface resultType).
>  	aRow addMorphBack: hotTileForSelf.
> 
>  	aRow addMorphBack: (spacer _ Morph new color: self color; extent: 0 at 0).
>  	spacer on: #mouseEnter send: #addGetterFeedback to: aRow.
>  	spacer on: #mouseLeave send: #removeHighlightFeedback to: aRow.
>  	spacer on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
>  	spacer  on: #mouseDown send: #makeGetter:event:from:
>  		to: self
>  		withValue: (Array with: aMethodInterface selector with: aMethodInterface resultType).
>  	hotTileForSelf on: #mouseEnter send: #addGetterFeedback to: aRow.
>  	hotTileForSelf on: #mouseLeave send: #removeHighlightFeedback to: aRow.
>  	hotTileForSelf on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
> 
>  	getterButton _ self getterButtonFor: aMethodInterface selector type: aMethodInterface resultType.
>  	aRow addMorphBack: getterButton.
>  	getterButton on: #mouseEnter send: #addGetterFeedback to: aRow.
>  	getterButton on: #mouseLeave send: #removeHighlightFeedback to: aRow.
>  	getterButton on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
>  	(doc _ aMethodInterface documentation) ifNotNil:
>  		[getterButton setBalloonText: doc].
> 
>  	(slotName == #seesColor:) ifTrue:
>  		[self addIsOverColorDetailTo: aRow.
>  		^ aRow].
> 
>  	(slotName == #color:sees:) ifTrue:
>  		[self addColorSeesDetailTo: aRow.
>  		^ aRow].
> 
>  	(#(touchesA: overlaps: overlapsAny: distanceToPlayer: bearingTo: bearingFrom:) includes: slotName) ifTrue:
> + 		[aRow addMorphBack: (Morph new extent: 0 at 0).  "spacer (Is this spacer really needed??? - takashi)"
> + 	aTileToRefer :=  self presenter standardPlayer tileToRefer.
> + 	aTileToRefer on: #mouseEnter send: #addGetterFeedback to: aRow.
> + 	aTileToRefer on: #mouseLeave send: #removeHighlightFeedback to: aRow.
> + 	aTileToRefer on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
> + 	aTileToRefer on: #mouseDown send: #makeGetter:event:from:
> + 		to: self
> + 		withValue: (Array with: aMethodInterface selector with: aMethodInterface resultType).
> + 	aRow addMorphBack: aTileToRefer .
> + 	aRow addMorphBack: (AlignmentMorph new beTransparent).  "flexible spacer"
> - 		[self addPlayerArgumentTo: aRow.
>  		^ aRow].
> 
>  	aRow addMorphBack: VariableSpacer new.
>  	(setter _ aMethodInterface companionSetterSelector) ifNotNil:
>  		[aRow addMorphBack: (Morph new color: self color; extent: 2 at 10).  " spacer"
>  		anArrow _ self arrowSetterButton: #makeSetter:from:forPart:
>  						args: (Array with: slotName with: aMethodInterface resultType).
>  		anArrow beTransparent.
>  		anArrow on: #mouseEnter send: #addSetterFeedback to: aRow.
>  		anArrow on: #mouseLeave send: #removeHighlightFeedback to: aRow.
>  		anArrow on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
>  		aRow addMorphBack: anArrow].
> 
>  	(#(color:sees: copy touchesA: overlaps: overlapsAny: getTurtleAt: getTurtleOf:) includes: slotName) ifFalse:
>   		[aMethodInterface wantsReadoutInViewer ifTrue: 
> + 				[readOut := (self readoutFor: slotName type: aMethodInterface resultType readOnly: setter isNil getSelector: aMethodInterface selector putSelector: setter).
> + 				readOut on: #mouseEnter send: #addSetterFeedback to: aRow.
> + 		readOut on: #mouseLeave send: #removeHighlightFeedback to: aRow.
> + 		readOut on: #mouseLeaveDragging send: #removeHighlightFeedback to: aRow.
> + 		readOut on: #mouseDown send: #makeGetter:event:from:
> + 		to: self
> + 		withValue: (Array with: aMethodInterface selector with: aMethodInterface resultType).
> + 					aRow addMorphBack: readOut.]].
> - 				[aRow addMorphBack: (self readoutFor: slotName type: aMethodInterface resultType readOnly: setter isNil getSelector: aMethodInterface selector putSelector: setter)]].
>  	anArrow ifNotNil: [anArrow step].
>  	^ aRow!
> 
> Item was changed:
>  ----- Method: CompoundTileMorph>>addCommandFeedback: (in category 'miscellaneous') -----
>  addCommandFeedback: evt
>  	"Add screen feedback showing what would be torn off in a drag"
> 
>  	| aMorph |
> + 	
>  	aMorph _ RectangleMorph new bounds: (self bounds).
> + 	aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem commandFeedback; lock.
> - 	aMorph beTransparent; borderWidth: 2; borderColor: (Color r: 1.0 g: 0.548 b: 0.452); lock.
>  	ActiveWorld addHighlightMorph: aMorph for: self outmostScriptEditor!
> 
> Item was changed:
>  ----- Method: PhraseTileForTest>>addCommandFeedback: (in category 'as yet unclassified') -----
>  addCommandFeedback: evt
>  	"Add screen feedback showing what would be torn off in a drag"
> 
> + 	| aMorph |
> - 	| aMorph rect |
>  	(self owner owner isMemberOf: PhraseTileMorph) ifTrue: [self owner owner addCommandFeedback: evt. ^ self].
> + 	aMorph _ RectangleMorph new bounds: ((self topLeft - (2 at 1)) corner: (self bottomRight) + (2 at 1)).
> + 	aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem commandFeedback; lock.
> - 	rect _ self bounds.
> - 	aMorph _ RectangleMorph new bounds: rect.
> - 	aMorph beTransparent; borderWidth: 2; borderColor: (Color r: 1.0 g: 0.548 b: 0.452); lock.
>  	ActiveWorld addHighlightMorph: aMorph for: self outmostScriptEditor!
> 
> Item was changed:
>  ----- Method: PhraseTileForTimesRepeat>>addCommandFeedback: (in category 'hilighting') -----
>  addCommandFeedback: evt
>  	"Add screen feedback showing what would be torn off in a drag"
> 
> + 	| aMorph |
> + 	
> - 	| aMorph rect |
>  	(self owner owner isMemberOf: PhraseTileMorph) ifTrue: [self owner owner addCommandFeedback: evt. ^ self].
> + 	aMorph _ RectangleMorph new bounds: ((self topLeft - (2 at 1)) corner: (self bottomRight) + (2 at 1)).
> + 	aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem commandFeedback; lock.
> - 	rect _ self bounds.
> - 	aMorph _ RectangleMorph new bounds: rect.
> - 	aMorph beTransparent; borderWidth: 2; borderColor: (Color r: 1.0 g: 0.548 b: 0.452); lock.
>  	ActiveWorld addHighlightMorph: aMorph for: self outmostScriptEditor!
> 
> Item was changed:
>  ----- Method: PhraseTileMorph>>addCommandFeedback: (in category 'hilighting') -----
>  addCommandFeedback: evt
>  	"Add screen feedback showing what would be torn off in a drag"
> 
> + 	| aMorph |
> - 	| aMorph rect inHotZone |
>  	(self owner owner isMemberOf: PhraseTileMorph)
>  		ifTrue: [self owner owner addCommandFeedback: evt. ^ self].
> + 	aMorph _ RectangleMorph new bounds: ((self topLeft - (2 at 1)) corner: ((submorphs at: (2 max: submorphs size)) bottomRight + (2 at 1))).
> + 	"inHotZone _ evt ifNil: [true] ifNotNil: [rect containsPoint: evt cursorPoint]."
> + 	aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem commandFeedback; lock.
> - 	rect _ self topLeft corner: (submorphs at: (2 min: submorphs size)) bottomRight.
> - 	inHotZone _ evt ifNil: [true] ifNotNil: [rect containsPoint: evt cursorPoint].
> - 	aMorph _ RectangleMorph new bounds: rect; beTransparent; borderWidth: 2.
> - 	aMorph borderColor: (Color r: 1.0 g: 0.548 b: 0.452); lock.
>  	ActiveWorld addHighlightMorph: aMorph for: self outmostScriptEditor!
> 
> Item was changed:
>  ----- Method: TileMorph>>handlesMouseOver: (in category 'event handling') -----
>  handlesMouseOver: evt 
>  	^ self isPopArrowNeeded
> + 		or: [^super handlesMouseOver: evt]!
> - 		or: [super handlesMouseOver: evt]!
> 
> Item was changed:
>  ----- Method: TileMorph>>mouseEnter: (in category 'event handling') -----
>  mouseEnter: evt
> + 	
> + 	.
> + 	super mouseEnter:evt.
> + 	^self showPopArrows!
> - 	self showPopArrows!
> 
> Item was changed:
>  ----- Method: TileMorph>>mouseLeave: (in category 'event handling') -----
>  mouseLeave: evt 
>  	"When the mouse is leaving and next object is not a pop arrow, remove
>  	pop arrows."
>  	| popArrows vpanel hpanel |
>  	popArrows := evt hand
>  				valueOfProperty: #popArrows
> + 				ifAbsent: [^super mouseLeave: evt].
> - 				ifAbsent: [^ self].
>  	vpanel := popArrows second.
>  	hpanel := popArrows third.
>  	(vpanel notNil
>  			and: [vpanel containsPoint: evt position])
> + 		ifTrue: [^super mouseLeave: evt].
> - 		ifTrue: [^ self].
>  	(hpanel notNil
>  			and: [hpanel containsPoint: evt position])
> + 		ifTrue: [^super mouseLeave: evt].
> + 	self hidePopArrows.
> + 	^super mouseLeave: evt!
> - 		ifTrue: [^ self].
> - 	self hidePopArrows!
> 
> Item was changed:
>  ----- Method: TimesRepeatTile>>numberOfTimesToRepeatPart (in category 'access') -----
>  numberOfTimesToRepeatPart
>  	"Answer the TilePadMorph which holds the tiles defining the number of times to repeat"
> 
>  	^ timesRow timesPad !
> 
> Item was changed:
>  ----- Method: TimesRepeatTile>>storeCodeOn:indent: (in category 'code generation') -----
>  storeCodeOn: aStream indent: tabCount
>  	"Store code representing the receiver on the stream, obeying the tab state."
> 
>  	aStream nextPutAll: '(('.
>  	self numberOfTimesToRepeatPart submorphs
>  		ifEmpty:
>  			[aStream nextPutAll: '0']
>  		ifNotEmpty:
>  			[self numberOfTimesToRepeatPart storeCodeOn: aStream indent: tabCount + 2].
>  	aStream nextPutAll: ' ) asInteger max: 0) timesRepeat:'.
>  	tabCount + 1 timesRepeat: [aStream tab].
>  	aStream nextPutAll: '['; cr.
>  	self storeCodeBlockFor: whatToRepeatPart on: aStream indent: tabCount + 2.
>  	aStream nextPut: $].
>  !
> 
> Item was changed:
>  ----- Method: TimesRepeatTile>>targetPartFor: (in category 'initialization') -----
>  targetPartFor: aMorph
>  	"Return the row into which the given morph should be inserted."
> 
>  	| centerY |
>  	centerY _ aMorph fullBounds center y.
>  	{self numberOfTimesToRepeatPart, whatToRepeatPart} do: [:m |
>  		(centerY <= m bounds bottom) ifTrue: [^ m]].
>  	^ noPart
>  !
> 
> Item was changed:
>  ----- Method: ViewerLine>>addCommandFeedback: (in category 'slot') -----
>  addCommandFeedback: evt
>  	"Add screen feedback showing what would be torn off in a drag"
> 
>  	| aMorph |
> + 	aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2 at 1)) corner: (submorphs last bottomRight) + (2 at 1)).
> + 	aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem commandFeedback; lock.
> - 	aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2 at 1)) corner: (submorphs last bottomRight) + (2 at 0)).
> - 	aMorph beTransparent; borderWidth: 2; borderColor: (Color r: 1.0 g: 0.548 b: 0.452); lock.
>  	ActiveWorld addHighlightMorph: aMorph for: nil!
> 
> Item was changed:
>  ----- Method: ViewerLine>>addGetterFeedback (in category 'slot') -----
>  addGetterFeedback
>  	"Add feedback during mouseover of a getter"
> 
>  	| aMorph endMorph |
> + 	
>  	endMorph _
>  		(#(touchesA: #seesColor: #overlaps: color:sees: overlapsAny: bearingTo: bearingFrom: distanceToPlayer:) includes: self elementSymbol)
>  			ifTrue:
>  				[submorphs seventh]
>  			ifFalse:
>  				[submorphs fifth].
> + 	aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2 at 1)) corner: ((endMorph right  @ submorphs third bottom)  + (2 at 1))).
> + 	aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem getterFeedback; lock.
> - 	aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2 at -1)) corner: (endMorph bottomRight + (2 at -1))).
> - 	aMorph height:(submorphs third height + 1).
> - 	aMorph beTransparent; borderWidth: 2; borderColor: (Color r: 1.0 g: 0.355 b: 0.839); lock.
>  	ActiveWorld addHighlightMorph: aMorph for: nil.
> 
>  "
>  Color fromUser (Color r: 1.0 g: 0.355 b: 0.839)
>  "!
> 
> Item was changed:
>  ----- Method: ViewerLine>>addSetterFeedback (in category 'slot') -----
>  addSetterFeedback
>  	"Add screen feedback showing what would be torn off to make a setter"
> 
>  	| aMorph |
> + 	aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2 at 1)) corner: ((submorphs last right  @ submorphs third bottom)  + (2 at 1))).
> + 	aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem setterFeedback; lock.
> - 	aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2 at 1)) corner: (submorphs last bottomRight) + (2 at 0)).
> - 	aMorph height:(submorphs third height + 1).
> - 	aMorph beTransparent; borderWidth: 2; borderColor: (Color r: 1.0 g: 0.548 b: 0.452); lock.
>  	ActiveWorld addHighlightMorph: aMorph for: nil!



More information about the etoys-dev mailing list