diff options
Diffstat (limited to 'plugins/Notify.py')
-rw-r--r-- | plugins/Notify.py | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/plugins/Notify.py b/plugins/Notify.py new file mode 100644 index 0000000..d995d1c --- /dev/null +++ b/plugins/Notify.py @@ -0,0 +1,145 @@ +from PyQt4 import QtGui,QtCore +from thread import start_new_thread +from traceback import print_exc + +from misc import * +from clSettings import settings,mpdSettings +from clMonty import monty +from clPlugin import * + +class winNotify(QtGui.QWidget): + _timerID=None + resizeWindow=True + winMain=None + + # data used for showing off + timer=None + msg=None + song=None + xtra_tags=None + + def __init__(self, winMain, parent=None): + QtGui.QWidget.__init__(self, parent) + self.winMain=winMain + + self.setWindowFlags(QtCore.Qt.ToolTip) + self.setWindowOpacity(0.7) + + font=QtGui.QFont() + font.setPixelSize(30) + font.setFamily('Comic Sans Ms') + self.setFont(font) + + monty.addListener('onSongChange', self.onSongChange) + monty.addListener('onReady', self.onReady) + monty.addListener('onDisconnect', self.onDisconnect) + monty.addListener('onStateChange', self.onStateChange) + monty.addListener('onVolumeChange', self.onVolumeChange) + + def onSongChange(self, params): + self.show('$if($artist,$artist$if($album, [$album #$track])\n$title ($length))', monty.getCurrentSong()) + + def onReady(self, params): + self.show('montypc loaded!') + + def onDisconnect(self, params): + self.show('Disconnected!') + + def onStateChange(self, params): + self.show(params['newState']) + + def onVolumeChange(self, params): + self.show('Volume: %i%%'%(params['newVolume'])) + + def mousePressEvent(self, event): + self.hide() + + def show(self, msg, song=None, xtra_tags={}): + if not self.isVisible(): + self.setVisible(True) + self.resizeWindow=True + self.msg=msg + self.song=song + self.xtra_tags=xtra_tags + if self._timerID: + self.killTimer(self._timerID) + self._timerID=self.startTimer(200) + self.timer=11 + self.raise_() + self.timerEvent(None) + + def hide(self): + if self._timerID: + self.killTimer(self._timerID) + self._timerID=None + self.setHidden(True) + + + def centerH(self): + screen = QtGui.QDesktopWidget().screenGeometry() + size = self.geometry() + self.move((screen.width()-size.width())/2, 100) + def paintEvent(self, event): + p=QtGui.QPainter(self) + margin=3 # margin in pixels + spacing=10 # space between album cover and text + + # determine the Rect our message must fit in + txt="%s"%(format(self.msg, self.song, self.xtra_tags)) + rect=p.boundingRect(0,0,1,1, QtCore.Qt.AlignHCenter, txt) + + # check if 1/ albumcover plugin is loaded, and 2/ there is an + # album cover + width=0 + try: + cover=self.winMain.getPlugin('albumcover') + img=cover.getWidget().getIMG() + if img: + width=128 + else: + spacing=0 + except: + img=None + pass + + # do we have to resize? + if self.resizeWindow: + self.resizeWindow=False + self.resize(rect.width()+width+margin*3+spacing, max(width,rect.height())+margin*2) + self.centerH() + + # fill up with a nice color :) + p.fillRect(QtCore.QRect(0,0,self.width(),self.height()), QtGui.QBrush(QtGui.QColor(230,230,255))) + + # draw album cover if necessary + if img: + rImg=QtCore.QRectF(margin,margin,width,width) + p.drawImage(rImg, img) + + # Pen In Black ... + p.setPen(QtCore.Qt.black) + rect=p.boundingRect(width+margin+spacing,margin, + rect.width(),self.height(), QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter, txt) + p.drawText(rect, QtCore.Qt.AlignHCenter, txt) + + def timerEvent(self, event): + self.timer-=1 + if self.timer<=0: + self.hide() + self.update() + + + +class pluginNotify(Plugin): + o=None + def __init__(self, winMain): + Plugin.__init__(self, winMain, 'Notify') + def _load(self): + self.o=winNotify(self.winMain) + def getInfo(self): + return "Show interesting events in a popup window." + + def _getSettings(self): + return [] + def afterSaveSettings(self): + self.o.onSongChange(None) |