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@10). "spacer" + hotTileForSelf _ ColorTileMorph new showPalette: false; - | m | - aRow addMorphBack: (Morph new color: self color; extent: 2@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@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@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@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@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@1)) corner: (self bottomRight) + (2@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@1)) corner: (self bottomRight) + (2@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@1)) corner: ((submorphs at: (2 max: submorphs size)) bottomRight + (2@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@1)) corner: (submorphs last bottomRight) + (2@1)). + aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem commandFeedback; lock. - aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2@1)) corner: (submorphs last bottomRight) + (2@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@1)) corner: ((endMorph right @ submorphs third bottom) + (2@1))). + aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem getterFeedback; lock. - aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2@-1)) corner: (endMorph bottomRight + (2@-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@1)) corner: ((submorphs last right @ submorphs third bottom) + (2@1))). + aMorph beTransparent; borderWidth: 2; borderColor: ScriptingSystem setterFeedback; lock. - aMorph _ RectangleMorph new bounds: ((submorphs third topLeft - (2@1)) corner: (submorphs last bottomRight) + (2@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!
etoys-dev@lists.squeakfoundation.org