[etoys-dev] Etoys: Etoys-Richo.103.mcz

Scott Wallace scott.wallace at squeakland.org
Mon Feb 6 20:56:29 EST 2012


One bug I quickly ran into with this is that if you add a variable but then instead of choosing a type from the pop-up-list, you just click somewhere else, you fall into a debugger.

  -- Scott


On Feb 6, 2012, at 8:17 PM, commits at source.squeak.org wrote:

> Ricardo Moran uploaded a new version of Etoys to project Etoys:
> http://source.squeak.org/etoys/Etoys-Richo.103.mcz
> 
> ==================== Summary ====================
> 
> Name: Etoys-Richo.103
> Author: Richo
> Time: 6 February 2012, 5:16:57 pm
> UUID: 84503c98-7c83-064f-957f-5bacf093d22e
> Ancestors: Etoys-kfr.102
> 
> Sixteen items for Squeakland 2012:
> 
> 11. On Add Variable: Show options for value type - to make it easier to discover different types besides number (Ex: player, color, etc).
> 
> =============== Diff against Etoys-kfr.102 ===============
> 
> Item was changed:
>  ----- Method: Player>>addInstanceVariable (in category 'slots-user') -----
>  addInstanceVariable
>  	"Offer the user the opportunity to add an instance variable, and if he goes through with it, actually add it."
> 
>  	| itsName initialValue typeChosen usedNames initialAnswer setterSelector originalString |
> + 	usedNames := self class instVarNames.
> - 	usedNames _ self class instVarNames.
> 
> + 	initialAnswer := Utilities keyLike: ('var' translated, (usedNames size + 1) asString)  satisfying: [:aKey | (usedNames includes: aKey) not].
> - 	initialAnswer _ Utilities keyLike: ('var' translated, (usedNames size + 1) asString)  satisfying: [:aKey | (usedNames includes: aKey) not].
> 
> + 	originalString := FillInTheBlank request: 'name for new variable: ' translated initialAnswer: initialAnswer.
> - 	originalString _ FillInTheBlank request: 'name for new variable: ' translated initialAnswer: initialAnswer.
>  Cursor wait showWhile: [
>  	originalString isEmptyOrNil ifTrue: [^ self].
> + 	itsName := ScriptingSystem acceptableSlotNameFrom: originalString forSlotCurrentlyNamed: nil asSlotNameIn: self world: self costume world.
> - 	itsName _ ScriptingSystem acceptableSlotNameFrom: originalString forSlotCurrentlyNamed: nil asSlotNameIn: self world: self costume world.
> 
>   	itsName size == 0 ifTrue: [^ self].	
>  	self assureUniClass.
> + 	typeChosen := self askUserForNewTypeFor: itsName.
> - 	typeChosen _ self initialTypeForSlotNamed: itsName.
>  	self slotInfo at: itsName put: (SlotInformation new initialize type: typeChosen).
> + 	initialValue := self initialValueForSlotOfType: typeChosen.
> - 	initialValue _ self initialValueForSlotOfType: typeChosen.
>  	self addInstanceVarNamed: itsName withValue: initialValue.
>  	self compileInstVarAccessorsFor: itsName.
> + 	setterSelector := Utilities setterSelectorFor: itsName.
> - 	setterSelector _ Utilities setterSelectorFor: itsName.
>  	((self class allSubInstances copyWithout: self) reject: [:e | e isSequentialStub]) do:
>  		[:anInstance | anInstance perform: setterSelector with: initialValue].
>  	self regenerateScripts.
> + 	self updateAllViewersAndForceToShow: ScriptingSystem nameForInstanceVariablesCategory.
> - 	self updateAllViewersAndForceToShow: ScriptingSystem nameForInstanceVariablesCategory
>  ]!
> 
> Item was added:
> + ----- Method: Player>>askUserForNewTypeFor: (in category 'slots-user') -----
> + askUserForNewTypeFor: slotName
> + 	| typeChoices menuCaption |
> + 	typeChoices := Vocabulary typeChoices asOrderedCollection.
> + 	[self costume renderedMorph defaultPatch]
> + 		on:Exception
> + 		do:[ typeChoices remove: #Patch ifAbsent: [typeChoices]].
> + 	menuCaption := 'Choose the TYPE
> + for {1}
> + ' translated, slotName, '
> + (currently {2})' translated format: {slotName. (self slotInfoAt: slotName) type translated}.
> + 	^ (SelectionMenu 
> + 			labelList: (typeChoices collect: [:t | t translated]) 
> + 			lines: #() 
> + 			selections: typeChoices) 
> + 				startUpWithCaption: menuCaption.!
> 
> Item was changed:
>  ----- Method: Player>>chooseSlotTypeFor: (in category 'slots-user') -----
>  chooseSlotTypeFor: aGetter
>  	"Let the user designate a type for the slot associated with the given getter"
> 
> + 	| typeChosen slotName |
> + 	slotName := Utilities inherentSelectorForGetter: aGetter.
> + 	typeChosen := self askUserForNewTypeFor: slotName.
> - 	| typeChoices typeChosen slotName |
> - 	slotName _ Utilities inherentSelectorForGetter: aGetter.
> - 	typeChoices _ Vocabulary typeChoices asOrderedCollection.
> - 	[self costume renderedMorph defaultPatch] on:Exception do:[ typeChoices remove: #Patch ifAbsent: [typeChoices]].
> - 	typeChosen _ (SelectionMenu labelList: (typeChoices collect: [:t | t translated]) lines: #() selections: typeChoices) startUpWithCaption: 
> - 		('Choose the TYPE
> - for {1}
> - ' translated, slotName, '
> - (currently {2})' translated format: {slotName. (self slotInfoAt: slotName) type translated}).
>  	typeChosen isEmptyOrNil ifTrue: [^ self].
>  	(self typeForSlot: slotName) capitalized = typeChosen ifTrue: [^ self].
> 
>  	(self slotInfoAt: slotName) type: typeChosen.
>  	self class allInstancesDo:   "allSubInstancesDo:"
>  		[:anInst | anInst instVarNamed: slotName asString put: 
>  			(anInst valueOfType: typeChosen from: (anInst instVarNamed: slotName))].
>  	self updateAllViewers.	"does siblings too"
>  	self changeTypesInWatchersOf: slotName.  "does siblings too"
>  	
>  !
> 
> _______________________________________________
> etoys-dev mailing list
> etoys-dev at squeakland.org
> http://lists.squeakland.org/mailman/listinfo/etoys-dev



More information about the etoys-dev mailing list