home *** CD-ROM | disk | FTP | other *** search
-
- 'From Squeak 2.2 of Sept 23, 1998 on 2 November 1998 at 2:47:18 pm'!
- Object subclass: #Clock
- instanceVariableNames: 'time timer window displayFormat '
- classVariableNames: ''
- poolDictionaries: ''
- category: 'ClockWorks'!
- Object subclass: #ClockButton
- instanceVariableNames: 'model frame action name '
- classVariableNames: ''
- poolDictionaries: ''
- category: 'ClockWorks'!
- Object subclass: #ClockWindow
- instanceVariableNames: 'position clock buttons '
- classVariableNames: ''
- poolDictionaries: ''
- category: 'ClockWorks'!
-
-
- !Clock methodsFor: 'accessing'!
- window
- ^window!
- window: aWindow
- window := aWindow.
- ! !
-
- !Clock methodsFor: 'time management'!
- nextSecond
- time _ time addTime: (Time fromSeconds: 1).
- window timeDisplay.
-
- ! !
-
- !ClockButton methodsFor: 'accessing'!
- name
- ^name!
- action
- ^action!
- model: aModel
- model _ aModel.
- !
- action: aMessage
- action _ aMessage
- !
- frame: aRect
- frame _ aRect!
- model
- ^model!
- frame
- ^frame!
- name: aString
- name _ aString
- ! !
-
- !ClockButton methodsFor: 'processing'!
- draw
- | pen |
- pen := Pen new.
- pen color: (Color black).
- pen up. pen goto: (frame origin).
- pen north. pen turn: 90. pen down.
- pen goto: (frame topRight).
- pen turn: 90. pen goto: (frame bottomRight).
- pen turn: 90. pen goto: (frame bottomLeft).
- pen turn: 90. pen goto: (frame origin).
- name displayAt: (frame leftCenter) + (25@-10). "Offset in a bit, and up a bit for aesthetics"
- !
- inControl: aPoint
- ^frame containsPoint: aPoint!
- process
- model perform: action
- ! !
-
- !ClockButton class methodsFor: 'creation'!
- make: aName at: aRect for: aModel triggering: aMessage
- | newButton |
- newButton _ self new.
- newButton name: aName.
- newButton frame: aRect.
- newButton model: aModel.
- newButton action: aMessage.
- newButton draw.
- ^newButton.
- ! !
-
- !ClockWindow methodsFor: 'accessing'!
- position: aPoint
- position := aPoint.!
- addButton: aButton
- buttons isNil ifTrue: [buttons := OrderedCollection new].
- buttons add: aButton.
- !
- clock
- ^clock!
- position
- ^position!
- buttons
- ^buttons
- !
- clock: aClock
- clock := aClock.
- ! !
-
- !ClockWindow methodsFor: 'window processing'!
- timeDisplay
- ' ' displayAt: position + (50@50). "Erase whatever time was there before"
- (clock display) displayAt: position + (50 @ 50).!
- openOn: aModel
- | button |
- position isNil ifTrue: [self error: 'Must set position first.'].
-
- "Set this model as this window's clock"
- clock := aModel.
-
- "Open the blank frame"
- (Form extent: 200@200) fillWhite displayAt: position.
-
- "Draw the Buttons"
- button := ClockButton make: 'Hours +' at: ((position x) @ ((position y)+100) extent: 100@50) for: aModel triggering: #addHour.
- self addButton: button.
- button := ClockButton make: 'Hours -' at: (((position x)+100) @ ((position y)+100) extent: 100@50) for: aModel triggering: #subtractHour.
- self addButton: button.
- button := ClockButton make: 'Minutes +' at: ((position x) @ ((position y)+150) extent: 100@50) for: aModel triggering: #addMinute.
- self addButton: button.
- button := ClockButton make: 'Minutes -' at: (((position x)+100) @ ((position y)+150) extent: 100@50) for: aModel triggering: #subtractMinute.
- self addButton: button.
- !
- processEvents
- "Enter into an event loop"
- | click |
- [Sensor yellowButtonPressed] whileFalse: "Yellow button press ends the clock"
- ["Give other processes a chance, and give user a chance to pick up."
- (Delay forMilliseconds: 500) wait.
- (Sensor redButtonPressed) ifTrue: "Red button press could go to a button"
- [click _ Sensor mousePoint.
- buttons do: [:b |
- (b inControl: click) ifTrue: [b process]].]].
- ! !
-
-
-
-