diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-02-20 10:49:00 +0100 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-02-20 10:49:00 +0100 |
commit | ae872ea3018fe1dac39f867f386b081598fb0812 (patch) | |
tree | 856d2b6d32050174682305b421548e680fe5647a /nephilim/plugins/Systray.py | |
parent | 000f9d5ba84426da6b5211dd0bea4a401b8f4289 (diff) |
Move modules to a separate dir.
Diffstat (limited to 'nephilim/plugins/Systray.py')
-rw-r--r-- | nephilim/plugins/Systray.py | 125 |
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) |