[etoys-dev] Etoys: Etoys-Richo.103.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Feb 6 15:17:46 EST 2012
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"
!
More information about the etoys-dev
mailing list