blob: 8834c1d3fe4221a07c2d6555fefd2c150d0486d4 [file] [log] [blame]
Guido van Rossumb3853281992-04-14 11:05:49 +00001# Window interface to (some of) the CD player's vital audio functions
2
Guido van Rossumb9506291992-04-13 18:38:20 +00003import cd
4import stdwin
5from stdwinevents import *
6import mainloop
7
8def main():
9 player = cd.open()
10 stdwin.setdefscrollbars(0, 0)
11 win = stdwin.open('CD')
12 win.player = player
13 win.dispatch = cddispatch
14 mainloop.register(win)
15 win.settimer(10)
16 mainloop.mainloop()
17
18def cddispatch(type, win, detail):
19 if type == WE_NULL:
20 pass
21 elif type == WE_CLOSE:
22 mainloop.unregister(win)
23 win.close()
24 elif type == WE_DRAW:
25 draw(win)
26 elif type == WE_TIMER:
27 update(win)
28 elif type == WE_MOUSE_UP:
29 left, top, right, bottom, v1, v2 = getgeo(win)
30 h, v = detail[0]
31 if left < h < right:
32 if top < v < v1:
33 but1(win)
34 elif v1 < v < v2:
35 but2(win)
36 elif v2 < v < bottom:
37 but3(win)
38 else:
39 stdwin.fleep()
40
41def but1(win):
42 update(win)
43
44def but2(win):
45 win.player.togglepause()
46 update(win)
47
48def but3(win):
49 win.player.stop()
50 update(win)
51
52def update(win):
53 d = win.begindrawing()
54 drawstatus(win, d)
55 d.enddrawing()
56 win.settimer(10)
57
58statedict = ['ERROR', 'NODISK', 'READY', 'PLAYING', 'PAUSED', 'STILL']
59
60def draw(win):
61 left, top, right, bottom, v1, v2 = getgeo(win)
62 d = win.begindrawing()
63 drawstatus(win, d)
64 box(d, left, v1, right, v2, 'Play/Pause')
65 box(d, left, v2, right, bottom, 'Stop')
66 d.enddrawing()
67
68def drawstatus(win, d):
69 left, top, right, bottom, v1, v2 = getgeo(win)
70 status = win.player.getstatus()
71 state = status[0]
72 if 0 <= state < len(statedict):
73 message = statedict[state]
74 else:
75 message = `status`
76 message = message + ' track ' + `status[1]` + ' of ' + `status[12]`
77 d.erase((left, top), (right, v1))
78 box(d, left, top, right, v1, message)
79
80def box(d, left, top, right, bottom, label):
81 R = (left+1, top+1), (right-1, bottom-1)
82 width = d.textwidth(label)
83 height = d.lineheight()
84 h = (left + right - width) / 2
85 v = (top + bottom - height) / 2
86 d.box(R)
87 d.cliprect(R)
88 d.text((h, v), label)
89 d.noclip()
90
91def getgeo(win):
92 (left, top), (right, bottom) = (0, 0), win.getwinsize()
93 v1 = top + (bottom - top) / 3
94 v2 = top + (bottom - top) * 2 / 3
95 return left, top, right, bottom, v1, v2
Guido van Rossumb3853281992-04-14 11:05:49 +000096
97main()