summaryrefslogtreecommitdiff
path: root/plugins/Notify.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Notify.py')
-rw-r--r--plugins/Notify.py145
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)