mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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 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()
 |