blob: 284ad825ea939e696abb4c340a998e06f34f050f [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):
Guido van Rossumd5d19121992-04-15 16:19:23 +000045 state = win.player.getstatus()[0]
Sjoerd Mullenderf1bb3341995-04-06 14:46:31 +000046 if state == cd.ready:
Guido van Rossumd5d19121992-04-15 16:19:23 +000047 win.player.play(1, 1)
Sjoerd Mullenderf1bb3341995-04-06 14:46:31 +000048 elif state in (cd.playing, cd.paused):
Guido van Rossumd5d19121992-04-15 16:19:23 +000049 win.player.togglepause()
50 else:
51 stdwin.fleep()
Guido van Rossumb9506291992-04-13 18:38:20 +000052 update(win)
53
54def but3(win):
55 win.player.stop()
56 update(win)
57
58def update(win):
59 d = win.begindrawing()
60 drawstatus(win, d)
61 d.enddrawing()
62 win.settimer(10)
63
64statedict = ['ERROR', 'NODISK', 'READY', 'PLAYING', 'PAUSED', 'STILL']
65
66def draw(win):
67 left, top, right, bottom, v1, v2 = getgeo(win)
68 d = win.begindrawing()
69 drawstatus(win, d)
70 box(d, left, v1, right, v2, 'Play/Pause')
71 box(d, left, v2, right, bottom, 'Stop')
72 d.enddrawing()
73
74def drawstatus(win, d):
75 left, top, right, bottom, v1, v2 = getgeo(win)
Guido van Rossumd5d19121992-04-15 16:19:23 +000076 state, track, curtime, abstime, totaltime, first, last, \
77 scsi_audio, cur_block, dummy = win.player.getstatus()
Guido van Rossumb9506291992-04-13 18:38:20 +000078 if 0 <= state < len(statedict):
79 message = statedict[state]
80 else:
81 message = `status`
Guido van Rossumd5d19121992-04-15 16:19:23 +000082 message = message + ' track ' + `track` + ' of ' + `last`
Guido van Rossumb9506291992-04-13 18:38:20 +000083 d.erase((left, top), (right, v1))
84 box(d, left, top, right, v1, message)
85
86def box(d, left, top, right, bottom, label):
87 R = (left+1, top+1), (right-1, bottom-1)
88 width = d.textwidth(label)
89 height = d.lineheight()
90 h = (left + right - width) / 2
91 v = (top + bottom - height) / 2
92 d.box(R)
93 d.cliprect(R)
94 d.text((h, v), label)
95 d.noclip()
96
97def getgeo(win):
98 (left, top), (right, bottom) = (0, 0), win.getwinsize()
99 v1 = top + (bottom - top) / 3
100 v2 = top + (bottom - top) * 2 / 3
101 return left, top, right, bottom, v1, v2
Guido van Rossumb3853281992-04-14 11:05:49 +0000102
103main()