REBOL [ title: "Daylight Map" author: "Christopher Ross-Gill" date: 11-Mar-2002 version: 0.5.0 type: 'link-app rights: http://creativecommons.org/licenses/by-sa/1.0/ ] time: now/time map-path: http://www.ross-gill.com/r/daylight bg-metal: any [load-image http://www.ross-gill.com/r/bg-metal.png 187.187.187] btn-up.png: any [load-image http://www.ross-gill.com/r/btn-up.png :btn-up.png] btn-dn.png: any [load-image http://www.ross-gill.com/r/btn-dn.png :btn-dn.png] ctx-map: context [ day: load-image map-path/map.jpg night: load-image map-path/map-night.jpg shade: load-image map-path/map-shading.png zones: load-image map-path/map-zones.png pin: load #{ 47494638396104000400B30000000000FF9933EEEEEE1400039F722740101840 10180000020005C4CC535040111F4060AE401130CC535040459200000121F904 01000002002C00000000040004000004085000204398964E11003B } set 'user-id map-path/user-id.r locations: load read map-path/locations.r set 'people copy [] foreach [person location] locations [append people person] ] ctx-time: context [ time: now - now/zone gmt: time/time gmt-hour: gmt/hour if gmt-hour < 0 [gmt-hour: gmt-hour + 24] if gmt-hour > 23 [gmt-hour: gmt-hour - 24] set 'shade-offset to-pair reduce [14 * (12 - gmt-hour) 0] if greater? shade-offset/x 0 [ shade-offset/x: shade-offset/x - 342 ] zone-map: [ 255.0.0 -11:00 255.153.0 -10:00 255.255.0 -9:00 153.255.0 -8:00 0.255.0 -7:00 0.255.153 -6:00 0.255.255 -5:00 0.153.255 -4:00 0.0.255 -3:00 153.0.255 -2:00 255.0.255 -1:00 255.0.153 +0:00 204.0.0 +1:00 204.102.0 +2:00 204.204.0 +3:00 102.204.0 +4:00 0.204.0 +5:00 0.204.102 +6:00 0.204.204 +7:00 0.102.204 +8:00 0.0.204 +9:00 102.0.204 +10:00 204.0.204 +11:00 204.0.102 +12:00 102.102.0 +3:30 0.102.0 +5:30 0.0.102 +9:30 102.0.102 +13:00 ] own-time: true set 'get-time has [gmt zone zone-offset zone-time][ gmt: now - now/zone either own-time [ out: gmt + now/zone ][ zone: pick ctx-map/zones ((pin/offset/y - 1) * 342) + pin/offset/x if none? zone-offset: select zone-map zone [ zone-offset: 0:00 ] zone-time: gmt + zone-offset out: zone-time ] out: mold out/time if 7 > length? out [append out ":00"] return out ] ] map-face: center-face layout compose [ backdrop bg-metal effect [tile] space 10 image 344x173 ctx-map/day edge [size: 1x1 color: black] with [pane: reduce [ make-face/spec 'image [offset: shade-offset image: ctx-map/shade] make-face/spec 'image [offset: shade-offset + 342x0 image: ctx-map/shade] pin: make-face/spec 'image [offset: 93x44 image: ctx-map/pin] edit-user: make-face/spec 'image [ offset: 0x0 image: ctx-map/zones user-data: false effect: [alphamul 0] feel: make feel [ engage: func [face action event][ if face/user-data [ pin/offset: event/offset - 2x2 show pin oset/text: mold event/offset - 2x2 show oset ] ] ] ] ]] across pin?: btn "Show Pin" [ edit-user/user-data: false either pin/show? [ ctx-time/own-time: true pin?/text: "Show Pin" tool-panel/pane: none hide pin show pin? show tool-panel edit-user/effect: [alphamul 0] show edit-user ][ ctx-time/own-time: false pin?/text: "Hide Pin" show pin show pin? show tool-panel ] ] get-coords: btn "Get Coordinates" [ ctx-time/own-time: false clock/text: get-time show clock edit-user/user-data: true edit-user/effect: [alphamul 34] show edit-user pin?/text: "Hide Pin" tool-panel/pane: x-coords oset/text: mold pin/offset show pin show pin? show tool-panel ] clock: text bold 120 get-time rate 1 feel [ engage: func [face action event][ face/text: get-time show face ] ] return tool-panel: box 342x80 below return user-list: text-list 200x300 data people [ pin/offset: select ctx-map/locations user-list/picked if pin/show? [show pin] clock/text: get-time show clock ] ] x-coords: make-face/spec 'text [ size: 342x70 text: {^/^/Drag the pin and use the coordinates to add yourself to the 'pin list' (daylight/locations).} pane: reduce [ oset: make-face/spec 'text [size: 100x25 text: "0x0"] ] append flags 'as-is ] if exists? user-id [hide get-coords] pin/show?: false view map-face