mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			103 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()
 | 
