104 lines
2.3 KiB
Python
Executable File
104 lines
2.3 KiB
Python
Executable File
# Window interface to (some of) the CD player's vital audio functions
|
|
|
|
import cd
|
|
import stdwin
|
|
from stdwinevents import *
|
|
import mainloop
|
|
|
|
def main():
|
|
player = cd.open()
|
|
stdwin.setdefscrollbars(0, 0)
|
|
win = stdwin.open('CD')
|
|
win.player = player
|
|
win.dispatch = cddispatch
|
|
mainloop.register(win)
|
|
win.settimer(10)
|
|
mainloop.mainloop()
|
|
|
|
def cddispatch(type, win, detail):
|
|
if type == WE_NULL:
|
|
pass
|
|
elif type == WE_CLOSE:
|
|
mainloop.unregister(win)
|
|
win.close()
|
|
elif type == WE_DRAW:
|
|
draw(win)
|
|
elif type == WE_TIMER:
|
|
update(win)
|
|
elif type == WE_MOUSE_UP:
|
|
left, top, right, bottom, v1, v2 = getgeo(win)
|
|
h, v = detail[0]
|
|
if left < h < right:
|
|
if top < v < v1:
|
|
but1(win)
|
|
elif v1 < v < v2:
|
|
but2(win)
|
|
elif v2 < v < bottom:
|
|
but3(win)
|
|
else:
|
|
stdwin.fleep()
|
|
|
|
def but1(win):
|
|
update(win)
|
|
|
|
def but2(win):
|
|
state = win.player.getstatus()[0]
|
|
if state == cd.ready:
|
|
win.player.play(1, 1)
|
|
elif state in (cd.playing, cd.paused):
|
|
win.player.togglepause()
|
|
else:
|
|
stdwin.fleep()
|
|
update(win)
|
|
|
|
def but3(win):
|
|
win.player.stop()
|
|
update(win)
|
|
|
|
def update(win):
|
|
d = win.begindrawing()
|
|
drawstatus(win, d)
|
|
d.enddrawing()
|
|
win.settimer(10)
|
|
|
|
statedict = ['ERROR', 'NODISK', 'READY', 'PLAYING', 'PAUSED', 'STILL']
|
|
|
|
def draw(win):
|
|
left, top, right, bottom, v1, v2 = getgeo(win)
|
|
d = win.begindrawing()
|
|
drawstatus(win, d)
|
|
box(d, left, v1, right, v2, 'Play/Pause')
|
|
box(d, left, v2, right, bottom, 'Stop')
|
|
d.enddrawing()
|
|
|
|
def drawstatus(win, d):
|
|
left, top, right, bottom, v1, v2 = getgeo(win)
|
|
state, track, curtime, abstime, totaltime, first, last, \
|
|
scsi_audio, cur_block, dummy = win.player.getstatus()
|
|
if 0 <= state < len(statedict):
|
|
message = statedict[state]
|
|
else:
|
|
message = `status`
|
|
message = message + ' track ' + `track` + ' of ' + `last`
|
|
d.erase((left, top), (right, v1))
|
|
box(d, left, top, right, v1, message)
|
|
|
|
def box(d, left, top, right, bottom, label):
|
|
R = (left+1, top+1), (right-1, bottom-1)
|
|
width = d.textwidth(label)
|
|
height = d.lineheight()
|
|
h = (left + right - width) / 2
|
|
v = (top + bottom - height) / 2
|
|
d.box(R)
|
|
d.cliprect(R)
|
|
d.text((h, v), label)
|
|
d.noclip()
|
|
|
|
def getgeo(win):
|
|
(left, top), (right, bottom) = (0, 0), win.getwinsize()
|
|
v1 = top + (bottom - top) / 3
|
|
v2 = top + (bottom - top) * 2 / 3
|
|
return left, top, right, bottom, v1, v2
|
|
|
|
main()
|