home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyos2bin.zip / Demo / sgi / cd / cdwin.py < prev    next >
Text File  |  1995-04-06  |  2KB  |  104 lines

  1. # Window interface to (some of) the CD player's vital audio functions
  2.  
  3. import cd
  4. import stdwin
  5. from stdwinevents import *
  6. import mainloop
  7.  
  8. def 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.  
  18. def 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.  
  41. def but1(win):
  42.     update(win)
  43.  
  44. def but2(win):
  45.     state = win.player.getstatus()[0]
  46.     if state == cd.ready:
  47.         win.player.play(1, 1)
  48.     elif state in (cd.playing, cd.paused):
  49.         win.player.togglepause()
  50.     else:
  51.         stdwin.fleep()
  52.     update(win)
  53.  
  54. def but3(win):
  55.     win.player.stop()
  56.     update(win)
  57.  
  58. def update(win):
  59.     d = win.begindrawing()
  60.     drawstatus(win, d)
  61.     d.enddrawing()
  62.     win.settimer(10)
  63.  
  64. statedict = ['ERROR', 'NODISK', 'READY', 'PLAYING', 'PAUSED', 'STILL']
  65.  
  66. def 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.  
  74. def drawstatus(win, d):
  75.     left, top, right, bottom, v1, v2 = getgeo(win)
  76.     state, track, curtime, abstime, totaltime, first, last, \
  77.         scsi_audio, cur_block, dummy = win.player.getstatus()
  78.     if 0 <= state < len(statedict):
  79.         message = statedict[state]
  80.     else:
  81.         message = `status`
  82.     message = message + ' track ' + `track` + ' of ' + `last`
  83.     d.erase((left, top), (right, v1))
  84.     box(d, left, top, right, v1, message)
  85.  
  86. def 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.  
  97. def 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
  102.  
  103. main()
  104.