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

commits at source.squeak.org commits at source.squeak.org
Tue Feb 21 20:28:53 EST 2012


Ricardo Moran uploaded a new version of Etoys to project Etoys:
http://source.squeak.org/etoys/Etoys-Richo.108.mcz

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

Name: Etoys-Richo.108
Author: Richo
Time: 21 February 2012, 10:28:10 pm
UUID: 2092c689-2333-2848-83c2-12273c44c7a1
Ancestors: Etoys-Richo.107

* Added a morph to test if a key is currently pressed.

=============== Diff against Etoys-Richo.107 ===============

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'!
  SystemOrganization addCategory: #'Etoys-Calendar'!
+ SystemOrganization addCategory: #'Etoys-Input'!

Item was added:
+ Morph subclass: #KeyPressMorph
+ 	instanceVariableNames: 'currentKey lastTimePressed isWaitingToSetCurrentKey'
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'Etoys-Input'!

Item was added:
+ ----- Method: KeyPressMorph class>>additionsToViewerCategories (in category 'viewer categories') -----
+ additionsToViewerCategories
+ ^ #(
+ (#input (
+ #(slot currentKey 'The current key' String readOnly Player getCurrentKey Player unused)
+ #(slot keyIsPressed 'Whether the current key is pressed at the moment' Boolean readOnly Player getKeyIsPressed Player unused)
+ #(slot timePressed 'The time in milliseconds the current key has been pressed' Number readOnly Player getTimePressed Player unused)
+ )))!

Item was added:
+ ----- Method: KeyPressMorph class>>descriptionForPartsBin (in category 'parts bin') -----
+ descriptionForPartsBin
+ 	^ self
+ 		partName: 'Key press'
+ 		categories: #('Just for Fun' )
+ 		documentation: 'An object that tells you when a specific key has been pressed.'
+ !

Item was added:
+ ----- Method: KeyPressMorph>>changeCurrentKey (in category 'actions') -----
+ changeCurrentKey
+ 	isWaitingToSetCurrentKey
+ 		ifTrue: [self setCurrentKey: currentKey]
+ 		ifFalse: [self say: 'Press new key' translated;
+ 					color: Color red muchLighter.
+ 			isWaitingToSetCurrentKey := true]!

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

Item was added:
+ ----- Method: KeyPressMorph>>delete (in category 'initialize') -----
+ delete
+ 	super delete.
+ 	self unregisterToEvents!

Item was added:
+ ----- Method: KeyPressMorph>>duplicate (in category 'copying') -----
+ duplicate
+ 	^ super duplicate registerToEvents!

Item was added:
+ ----- Method: KeyPressMorph>>handleKeyboardEvent: (in category 'events') -----
+ handleKeyboardEvent: anEvent
+ 	isWaitingToSetCurrentKey
+ 		ifTrue: [self setCurrentKey: anEvent keyString asLowercase]
+ 		ifFalse: [self setIsPressed: anEvent]
+ !

Item was added:
+ ----- Method: KeyPressMorph>>handleListenEvent: (in category 'events') -----
+ handleListenEvent: anEvent
+ 	anEvent isMouse
+ 		ifTrue: [self handleMouseEvent: anEvent]
+ 		ifFalse: [self handleKeyboardEvent: anEvent]!

Item was added:
+ ----- Method: KeyPressMorph>>handleMouseEvent: (in category 'events') -----
+ handleMouseEvent: anEvent
+ 	(isWaitingToSetCurrentKey and: [anEvent type = #mouseUp])
+ 		ifTrue: [self setCurrentKey: self currentKey]!

Item was added:
+ ----- Method: KeyPressMorph>>initialize (in category 'initialize') -----
+ initialize
+ 	super initialize.
+ 	currentKey := 'a'.
+ 	isWaitingToSetCurrentKey := false.	
+ 	self layoutPolicy: TableLayout new;
+ 		listDirection: #topToBottom;
+ 	 	wrapCentering: #topLeft;
+ 		hResizing: #shrinkWrap;
+ 		vResizing: #shrinkWrap;
+ 		layoutInset: 5;
+ 		color: Color blue muchLighter;
+ 		borderColor: Color blue;
+ 		cornerStyle: #rounded;
+ 		rebuild;
+ 		registerToEvents!

Item was added:
+ ----- Method: KeyPressMorph>>isPressed (in category 'accessing') -----
+ isPressed
+ 	^ self timePressed > 0!

Item was added:
+ ----- Method: KeyPressMorph>>rebuild (in category 'building') -----
+ rebuild
+ 	| keyButton |
+ 	self removeAllMorphs.
+ 	self addMorphBack: 'Key:' translated asMorph.
+ 	self addMorphBack: (keyButton := SimpleButtonMorph new
+ 								labelString: self currentKey;
+ 								color: Color white;
+ 								target: self;
+ 								actionSelector: #changeCurrentKey;
+ 								yourself).
+ 	keyButton width < 50
+ 		ifTrue: [keyButton width: 50]!

Item was added:
+ ----- Method: KeyPressMorph>>registerToEvents (in category 'events') -----
+ registerToEvents
+ 	self currentHand
+ 		addKeyboardListener: self;
+ 		addMouseListener: self!

Item was added:
+ ----- Method: KeyPressMorph>>setCurrentKey: (in category 'events') -----
+ setCurrentKey: aString
+ 	isWaitingToSetCurrentKey := false.
+ 	self stopSayingOrThinking;
+ 		color: Color blue muchLighter.
+ 	currentKey := aString.
+ 	self rebuild!

Item was added:
+ ----- Method: KeyPressMorph>>setIsPressed: (in category 'events') -----
+ setIsPressed: anEvent 
+ 	anEvent keyString asLowercase = self currentKey asLowercase
+ 		ifFalse: [^ self].
+ 	anEvent type caseOf: {
+ 		[#keyDown] -> [self isPressed ifTrue: [^ self].
+ 				lastTimePressed := Time millisecondClockValue].
+ 		[#keyUp] -> [lastTimePressed := nil]
+ 	} otherwise: [].
+ 	lastTimePressed notNil
+ 		ifTrue: [self borderWidth: 2]
+ 		ifFalse: [self borderWidth: 0]
+ !

Item was added:
+ ----- Method: KeyPressMorph>>timePressed (in category 'accessing') -----
+ timePressed
+ 	^ lastTimePressed
+ 			ifNil: [0]
+ 			ifNotNil: [:last | Time millisecondsSince: last]!

Item was added:
+ ----- Method: KeyPressMorph>>unregisterToEvents (in category 'events') -----
+ unregisterToEvents
+ 	self currentHand
+ 		removeKeyboardListener: self;
+ 		removeMouseListener: self!

Item was added:
+ ----- Method: KeyPressMorph>>usableSiblingInstance (in category 'copying') -----
+ usableSiblingInstance
+ 	^ super usableSiblingInstance registerToEvents!

Item was added:
+ ----- Method: Player>>getCurrentKey (in category '*etoys-input') -----
+ getCurrentKey
+ 	^ self sendMessageToCostume: #currentKey!

Item was added:
+ ----- Method: Player>>getKeyIsPressed (in category '*etoys-input') -----
+ getKeyIsPressed
+ 	^ self sendMessageToCostume: #isPressed!

Item was added:
+ ----- Method: Player>>getTimePressed (in category '*etoys-input') -----
+ getTimePressed
+ 	^ self sendMessageToCostume: #timePressed!



More information about the etoys-dev mailing list