summaryrefslogtreecommitdiff
path: root/nephilim/plugins/Systray.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-02-20 10:49:00 +0100
committerAnton Khirnov <wyskas@gmail.com>2009-02-20 10:49:00 +0100
commitae872ea3018fe1dac39f867f386b081598fb0812 (patch)
tree856d2b6d32050174682305b421548e680fe5647a /nephilim/plugins/Systray.py
parent000f9d5ba84426da6b5211dd0bea4a401b8f4289 (diff)
Move modules to a separate dir.
Diffstat (limited to 'nephilim/plugins/Systray.py')
-rw-r--r--nephilim/plugins/Systray.py125
1 files changed, 125 insertions, 0 deletions
diff --git a/nephilim/plugins/Systray.py b/nephilim/plugins/Systray.py
new file mode 100644
index 0000000..49a1414
--- /dev/null
+++ b/nephilim/plugins/Systray.py
@@ -0,0 +1,125 @@
+from PyQt4 import QtGui, QtCore
+from PyQt4.QtCore import QVariant
+
+from ..clPlugin import Plugin
+from ..misc import sec2min, ORGNAME, APPNAME, appIcon
+
+class pluginSystray(Plugin):
+ DEFAULTS = {'format': '$track - $title by $artist on $album ($length)'}
+ o = None
+ format = None
+ eventObj = None
+ time = None # indicator of current time [0..64]
+ appIcon = None
+ pixmap = None
+ def __init__(self, winMain):
+ Plugin.__init__(self, winMain, 'Systray')
+ self.addListener('onSongChange', self.update)
+ self.addListener('onReady', self.update)
+ self.addListener('onConnect', self.update)
+ self.addListener('onDisconnect', self.update)
+ self.addListener('onTimeChange', self.update) # TODO only update this when necessary, i.e. mouse-hover etc
+ self.appIcon=QtGui.QIcon(appIcon)
+
+ def _load(self):
+ self.format = self.settings.value(self.name + '/format').toString()
+ class SystrayWheelEventObject(QtCore.QObject):
+ """This class listens for systray-wheel events"""
+ def eventFilter(self, object, event):
+ if type(event)==QtGui.QWheelEvent:
+ numDegrees=event.delta() / 8
+ numSteps=5*numDegrees/15
+ self.plugin.mpclient.setVolume(self.plugin.mpclient.getVolume() + numSteps)
+ event.accept()
+ return True
+ return False
+
+ self.o=QtGui.QSystemTrayIcon(QtGui.QIcon(appIcon), self.winMain)
+ self.eventObj=SystrayWheelEventObject()
+ self.eventObj.plugin = self
+ self.o.installEventFilter(self.eventObj)
+ self.winMain.connect(self.o, QtCore.SIGNAL('activated (QSystemTrayIcon::ActivationReason)')
+ , self.onSysTrayClick)
+ self.o.show()
+
+ def _unload(self):
+ self.o.hide()
+ self.o.setIcon(QtGui.QIcon(None))
+ self.o=None
+ self.winMain._wheelEvent=None
+ def getInfo(self):
+ return "Display the mpclientpc icon in the systray."
+
+ def update(self, params):
+ status = self.mpclient.getStatus()
+ if not status:
+ return
+ song = self.mpclient.getCurrentSong()
+
+ values={'state':''}
+ values['state']={'play':'playing', 'stop':'stopped', 'pause':'paused'}[status['state']]
+ if 'time' in status:
+ values['length']=sec2min(status['length'])
+ values['time']=sec2min(status['time'])
+
+ if song:
+ self.o.setToolTip(song.expand_tags(self.format))
+ else:
+ self.o.setToolTip("mpclientpc not playing")
+
+ try:
+ curTime=(64*status['time'])/status['length']
+ except:
+ curTime=-1
+ if self.time!=curTime:
+ self.time=curTime
+ # redraw the systray icon
+ self.pixmap=self.appIcon.pixmap(64,64)
+ painter=QtGui.QPainter(self.pixmap)
+ painter.fillRect(1, curTime, 63, 64, self.winMain.palette().brush(QtGui.QPalette.Base))
+ self.appIcon.paint(painter, 1, 0, 63, 64)
+ self.o.setIcon(QtGui.QIcon(self.pixmap))
+ elif not song:
+ self.time=None
+ self.o.setIcon(QtGui.QIcon(appIcon))
+
+ def onSysTrayClick(self, reason):
+ if reason==QtGui.QSystemTrayIcon.Trigger \
+ or reason==QtGui.QSystemTrayIcon.Context:
+ w=self.getWinMain()
+ # left mouse button
+ if w.isVisible():
+ settings.setIntTuple('winMain.pos', w.x(), w.y())
+ w.setVisible(False)
+ else:
+ w.setVisible(True)
+ try:
+ x,y=settings.getIntTuple('winMain.pos')
+ except:
+ x,y=0,0
+ w.move(x, y)
+ elif reason==QtGui.QSystemTrayIcon.MiddleClick:
+ # middle mouse button
+ if self.mpclient.isPlaying():
+ self.mpclient.pause()
+ else:
+ self.mpclient.resume()
+
+ class SettingsWidgetSystray(Plugin.SettingsWidget):
+ format = None
+
+ def __init__(self, plugin):
+ Plugin.SettingsWidget.__init__(self, plugin)
+
+ self.format = QtGui.QLineEdit(self.settings.value(self.plugin.getName() + '/format').toString())
+
+ self.setLayout(QtGui.QVBoxLayout())
+ self._add_widget(self.format, 'Tooltip format')
+
+ def save_settings(self):
+ self.settings.beginGroup(self.plugin.getName())
+ self.settings.setValue('format', QVariant(self.format.text()))
+ self.settings.endGroup()
+
+ def get_settings_widget(self):
+ return self.SettingsWidgetSystray(self)