summaryrefslogtreecommitdiff
path: root/plugins/Systray.py
blob: 911eea0e2266cc03dd7b4f79ad8c255a09d896d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from PyQt4 import QtGui
from clMonty import monty
from clPlugin import *
from misc import *
import format

SYSTRAY_FORMAT="$if($title,$title)$if($artist, by $artist) - [$album # $track] ($time/$length)"

class pluginSystray(Plugin):
	o=None
	format=None
	eventObj=None
	def __init__(self, winMain):
		Plugin.__init__(self, winMain, 'Systray')
		self.addMontyListener('onSongChange', self.update)
		self.addMontyListener('onReady', self.update)
		self.addMontyListener('onConnect', self.update)
		self.addMontyListener('onDisconnect', self.update)
		

	def _load(self):
		self.format=format.compile(SYSTRAY_FORMAT)
		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
					monty.setVolume(int(monty.getStatus()['volume'])+numSteps)
					event.accept()
					return True
				return False
			
		self.o=QtGui.QSystemTrayIcon(appIcon, self.winMain)
		self.eventObj=SystrayWheelEventObject()
		self.o.installEventFilter(self.eventObj)
		self.winMain.connect(self.o, QtCore.SIGNAL('activated (QSystemTrayIcon::ActivationReason)')
			, self.onSysTrayClick)
		self.o.show()
		self.update(None)
	def _unload(self):
		self.o.hide()
		self.o=None
		self.winMain._wheelEvent=None
	def getInfo(self):
		return "Display the montypc icon in the systray."
	
	def update(self, params):
		status=monty.getStatus()
		song=monty.getCurrentSong()

		values={'state':''}
		try:
			values['state']={'play':'playing', 'stop':'stopped', 'pause':'paused'}[status['state']]
			if 'time' in status:
				values['length']=sec2min(status['length'])
				values['time']=sec2min(status['time'])
		except:
			pass
		
		if song:
			self.o.setToolTip(self.format(format.params(song, values)))
		else:
			self.o.setToolTip("montypc not playing")
	
	def onSysTrayClick(self, reason):
		if reason==QtGui.QSystemTrayIcon.Trigger \
			or reason==QtGui.QSystemTrayIcon.Context:
			# left mouse button
			self.getWinMain().setVisible(not(self.getWinMain().isVisible()))
		elif reason==QtGui.QSystemTrayIcon.MiddleClick:
			# middle mouse button
			if monty.isPlaying():
				monty.pause()
			else:
				monty.resume()