From 5f5dfd16cfa05fefc468eb2c6c679a0495ee4799 Mon Sep 17 00:00:00 2001 From: mfrasca <> Date: Tue, 15 May 2007 15:14:24 +0000 Subject: [PATCH] 1714519 - object oriented library first working version... it gives very little feedback about the running player. --- examples/pywmradio.py | 145 ++++++++++++++++++++++++++++++++---------- wmdocklib/wmoo.py | 21 +++++- 2 files changed, 131 insertions(+), 35 deletions(-) diff --git a/examples/pywmradio.py b/examples/pywmradio.py index 22dbaea..b027768 100755 --- a/examples/pywmradio.py +++ b/examples/pywmradio.py @@ -11,42 +11,101 @@ Licensed under the GNU General Public License. import sys, time from wmdocklib import wmoo +devnull = file('/dev/null') -debug = 0 +class Application(wmoo.Application): -def printevent(event): - print event + def __init__(self, *args, **kwargs): + wmoo.Application.__init__(self, *args, **kwargs) + self.child = None + self.cache = '64' + self.radioList = [] + self.currentRadio = 0 + self._blink = 0 -def previousRadio(event): - print 'previousRadio', event + import fileinput, os + configfile = os.sep.join([os.environ['HOME'], '.pyradiorc']) -def nextRadio(event): - print 'nextRadio', event + for i in fileinput.input(configfile): + i = i.split('\n')[0] + radiodef = i.split('\t') + radioname = radiodef[0].lower() + if len(radiodef) == 1: + continue + if radioname == '': + globals()[radiodef[1]] = radiodef[2] + pass + else: + self.radioList.append( (radioname+' '*24, radiodef[1]) ) -def quitProgram(event): - print 'quitProgram', event - sys.exit(0) + def startPlayer(self): + import os, subprocess + commandline = [mplayer, + '-cache', self.cache, + self.radioList[self.currentRadio][1] + ] + self.child = subprocess.Popen(commandline, + stdout=devnull, + stderr=devnull) -def playStream(event): - print 'playStream', event + def stopPlayer(self): + if self.child: + import os, subprocess, signal + os.kill(self.child.pid, signal.SIGKILL) + self.child = None + return True + return False -def stopStream(event): - print 'stopStream', event + def quitProgram(self, event): + self.stopPlayer() + sys.exit(0) + + def printevent(self, event): + print event + + def previousRadio(self, event): + if self.currentRadio == 0: self.currentRadio = len(self.radioList) + self.currentRadio -= 1 + self.putString(0, 10, self.radioList[self.currentRadio][0]) + if self.stopPlayer(): + self.startPlayer() + + def nextRadio(self, event): + self.currentRadio += 1 + if self.currentRadio == len(self.radioList): self.currentRadio = 0 + self.putString(0, 10, self.radioList[self.currentRadio][0]) + if self.stopPlayer(): + self.startPlayer() + + def playStream(self, event): + self.startPlayer() + + def stopStream(self, event): + self.stopPlayer() + self.putPattern(9, 0, 9, 11, 38, 43) + + def blink(self): + self._blink += 1 + if self._blink == 10: + self.putPattern(0, 0, 9, 11, 38, 43) + elif self._blink == 20: + self._blink = 0 + self.putPattern(9, 0, 9, 11, 38, 43) + pass + + def update(self): + if self.child: + self.blink() palette = { '-': "#000000", ".": "#868682", "X": "#AEAEAA", "o": "#F7F7F3", + "r": "#F70000", } -patterns = [ - " ", - " ", - " ", - " ", - " ", - " ", +background = [ " ", " ", " ", @@ -65,11 +124,17 @@ patterns = [ "----------------------------------------------------------------", "----------------------------------------------------------------", "----------------------------------------------------------------", + "----------------------------------------------------------------", + "----------------------------------------------------------------", + "----------------------------------------------------------------", + "----------------------------------------------------------------", + "----------------------------------------------------------------", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", " ", " ", " ", " ", + " ", " XXXXXXXX. XXXXXXXX. XXXXXXXX. ", " X-------- X-------- X-------- ", " X-------- X-------- X-------- ", @@ -107,27 +172,41 @@ patterns = [ " ", ] +patterns = [ + "XXXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX. ", + "X--------X--------X--------X--------X--------X-------- ", + "X--------X--------X--------X--------X--------X-------- ", + "X-rrrrr--X-ooooo--X-rr-rr--X-oo-oo--X--o-----X--r----- ", + "X-rrrrr--X-ooooo--X-rr-rr--X-oo-oo--X--oo----X--rr---- ", + "X-rrrrr--X-ooooo--X-rr-rr--X-oo-oo--X--ooo---X--rrr--- ", + "X-rrrrr--X-ooooo--X-rr-rr--X-oo-oo--X--oo----X--rr---- ", + "X-rrrrr--X-ooooo--X-rr-rr--X-oo-oo--X--o-----X--r----- ", + "X--------X--------X--------X--------X--------X-------- ", + "X--------X--------X--------X--------X--------X-------- ", + ".--------.--------.--------.--------.--------.-------- ", + ] def main(): global char_width, char_height, maxCharsPerLine, antialiased - app = wmoo.Application(font_name='5x8', - margin = 3, - bg=0, fg=2, palette=palette, - background=patterns, - debug=debug) + app = Application(font_name='5x8', + margin = 3, + bg=0, fg=2, palette = palette, + background = background, + patterns = patterns) # maxCharsPerLine = (width-2*xOffset) / char width + app.putString(0, 10, app.radioList[app.currentRadio][0]) - app.addCallback(printevent) + # app.addCallback(printevent) - app.addCallback(previousRadio, 'buttonrelease', area=(14,29,23,38)) - app.addCallback(nextRadio, 'buttonrelease', area=(26,29,35,38)) - app.addCallback(quitProgram, 'buttonrelease', area=(38,29,47,38), key=1) + app.addCallback(app.previousRadio, 'buttonrelease', area=(14,29,23,38)) + app.addCallback(app.nextRadio, 'buttonrelease', area=(26,29,35,38)) + app.addCallback(app.quitProgram, 'buttonrelease', area=(38,29,47,38), key=1) - app.addCallback(playStream, 'buttonrelease', area=(14,43,23,52)) - app.addCallback(stopStream, 'buttonrelease', area=(26,43,35,52)) - app.addCallback(stopStream, 'buttonrelease', area=(38,43,47,52)) + app.addCallback(app.playStream, 'buttonrelease', area=(14,43,23,52)) + app.addCallback(app.stopStream, 'buttonrelease', area=(26,43,35,52)) + app.addCallback(app.stopStream, 'buttonrelease', area=(38,43,47,52)) app.run() diff --git a/wmdocklib/wmoo.py b/wmdocklib/wmoo.py index 6db93f6..7e00102 100644 --- a/wmdocklib/wmoo.py +++ b/wmdocklib/wmoo.py @@ -16,11 +16,28 @@ class Application: """ self._events = [] self._sleep = 0.1 + self._offset_x = self._offset_y = 3 - pywmhelpers.initPixmap(*args, **kwargs) + self._char_width, self._char_height = pywmhelpers.initPixmap(*args, **kwargs) pywmhelpers.openXwindow(sys.argv, 64, 64) pass + def putString(self, x, y, string): + pywmhelpers.addString(string, x, y, + self._offset_x, self._offset_y, + self._char_width, self._char_height) + + def putPattern(self, sourceX, sourceY, width, height, targetX, targetY): + pywmhelpers.copyXPMArea(sourceX, sourceY+64, width, height, + targetX, targetY) + + def update(self): + pass + + def redraw(self): + self.update() + pywmhelpers.redraw() + def addHandler(self): """adds a signal handler. @@ -67,7 +84,7 @@ class Application: callback(event) event = pywmhelpers.getEvent() - pywmhelpers.redraw() + self.redraw() time.sleep(self._sleep) pass