summaryrefslogtreecommitdiff
path: root/plugins/PlayControl.py
diff options
context:
space:
mode:
authorjerous <jerous@gmail.com>2008-06-12 01:31:27 +0200
committerjerous <jerous@gmail.com>2008-06-12 01:32:08 +0200
commita97bd77f927c1c34787bdc5e23bdac17e24225a4 (patch)
tree78e7ca7d9bc56f7e895b2ab1b4b326fac3a06bdd /plugins/PlayControl.py
parentd948985110a4c1350a2fc114f520eac36c795ba1 (diff)
loading dynamically all plugins in ./plugins/*.py
Diffstat (limited to 'plugins/PlayControl.py')
-rw-r--r--plugins/PlayControl.py151
1 files changed, 151 insertions, 0 deletions
diff --git a/plugins/PlayControl.py b/plugins/PlayControl.py
new file mode 100644
index 0000000..06952e6
--- /dev/null
+++ b/plugins/PlayControl.py
@@ -0,0 +1,151 @@
+from PyQt4 import QtGui, QtSvg, QtCore
+
+from misc import *
+from clMonty import monty
+from clPlugin import *
+
+class wgPlayControl(QtGui.QWidget):
+ """Displays controls for interacting with playing, like play, volume ..."""
+ " control buttons"
+ btnPlayPause=None
+ btnStop=None
+ btnPrevious=None
+ btnNext=None
+ " slider for current time"
+ slrTime=None
+ " slider for volume"
+ slrVolume=None
+ " indicator for volume"
+ svgVolume=None
+ " all objects in this widget"
+ objects=None
+
+ def __init__(self, parent=None):
+ QtGui.QWidget.__init__(self, parent)
+
+
+ class wgSvgSwitcher(QtSvg.QSvgWidget):
+ """Widget showing an svg-image, which, when clicked, will (un)hide an element."""
+ # the element we wish to hide/show
+ scroller=None
+ def __init__(self,scroller,parent=None):
+ QtSvg.QSvgWidget.__init__(self,parent)
+ self.scroller=scroller
+ def mousePressEvent(self,event):
+ self.scroller.setVisible(not self.scroller.isVisible())
+ def wheelEvent(self, event):
+ event.accept()
+ numDegrees=event.delta() / 8
+ numSteps=5*numDegrees/15
+ self.scroller.setValue(self.scroller.value()+numSteps)
+
+ self.slrTime=QtGui.QSlider(QtCore.Qt.Horizontal, self)
+ self.slrTime.setMinimumWidth(100)
+ self.slrVolume=QtGui.QSlider(QtCore.Qt.Vertical, self)
+ self.slrVolume.setMaximum(100)
+ self.slrVolume.setMinimumWidth(100)
+ self.slrVolume.setMaximumWidth(350)
+ # set to some value that'll never be chosen, that way onChange will be called automatically :)
+ self.slrVolume.setValue(3.141595)
+ self.slrVolume.setVisible(False)
+ self.svgVolume=wgSvgSwitcher(self.slrVolume)
+ self.svgVolume.setMaximumSize(64,64)
+ self.svgVolume.setMinimumSize(64,64)
+ self.btnPlayPause=Button("play", self.onBtnPlayPauseClick, 'gfx/media-playback-start.svg', True)
+ self.btnStop=Button("stop", self.onBtnStopClick, 'gfx/media-playback-stop.svg', True)
+ self.btnPrevious=Button("prev", self.onBtnPreviousClick, 'gfx/media-skip-backward.svg', True)
+ self.btnNext=Button("next", self.onBtnNextClick, 'gfx/media-skip-forward.svg', True)
+
+ self.objects=[self.slrVolume, self.slrTime,
+ self.btnStop, self.btnNext, self.btnPrevious]
+
+ layout=QtGui.QHBoxLayout(parent)
+ self.setLayout(layout)
+
+ layout.addWidget(self.btnPrevious)
+ layout.addWidget(self.btnPlayPause)
+ layout.addWidget(self.btnStop)
+ layout.addWidget(self.btnNext)
+ layout.addWidget(self.slrTime)
+ layout.addWidget(self.slrVolume)
+ layout.addWidget(self.svgVolume)
+
+ self.connect(self.slrVolume, QtCore.SIGNAL('valueChanged(int)'),self.onVolumeSliderChange)
+ self.connect(self.slrTime, QtCore.SIGNAL('sliderReleased()'),self.onTimeSliderChange)
+
+ monty.addListener('onStateChange', self.onStateChange)
+ monty.addListener('onSongChange', self.onSongChange)
+ monty.addListener('onSongChange', self.onSongChange)
+ monty.addListener('onVolumeChange', self.onVolumeChange)
+ monty.addListener('onReady', self.onStateChange)
+ monty.addListener('onDisconnect', self.onDisconnect)
+ monty.addListener('onTimeChange', self.onTimeChange)
+
+ def onStateChange(self, params):
+ newState=monty.getStatus()['state']
+
+ map(lambda o: o.setEnabled(newState!='stop'), self.objects)
+
+ if newState=='play':
+ self.btnPlayPause.changeIcon('gfx/media-playback-pause.svg')
+ self.btnPlayPause.setText('pauze')
+ elif newState=='pause' or newState=='stop':
+ self.btnPlayPause.changeIcon('gfx/media-playback-start.svg')
+ self.btnPlayPause.setText('play')
+ def onVolumeChange(self, params):
+ self.slrVolume.setValue(params['newVolume'])
+ def onDisconnect(self, params):
+ map(lambda o: o.setEnabled(False), self.objects)
+ def onTimeChange(self, params):
+ if not self.slrTime.isSliderDown():
+ self.slrTime.setValue(params['newTime'])
+ def onSongChange(self, params):
+ try:
+ self.slrTime.setMaximum(monty.getStatus()['length'])
+ self.slrTime.setEnabled(True)
+ except:
+ pass
+
+
+ def onBtnPlayPauseClick(self):
+ status=monty.getStatus()
+ if status['state']=='play':
+ monty.pause()
+ elif status['state']=='stop':
+ monty.play(None)
+ #if self.lstPlaylist.getSelItemID()==-1:
+ #if nothing selected, set it on first row
+ #self.lstPlaylist.selectRow(0)
+ #self.onPlaylistDoubleClick()
+ else:
+ monty.resume()
+ def onBtnStopClick(self):
+ monty.stop()
+ def onBtnPreviousClick(self):
+ monty.previous()
+ def onBtnNextClick(self):
+ monty.next()
+ def onTimeSliderChange(self):
+ monty.seek(self.slrTime.value())
+ def onVolumeSliderChange(self):
+ v=self.slrVolume.value()
+ monty.setVolume(v)
+ if v<=1:
+ mode='mute'
+ else:
+ mode=('0', 'min', 'med', 'max')[int(3*v/100)]
+ self.svgVolume.load('gfx/stock_volume-%s.svg'%(mode))
+
+
+
+class pluginPlayControl(Plugin):
+ o=None
+ def __init__(self, winMain):
+ Plugin.__init__(self, winMain, 'PlayControl')
+ self.o=wgPlayControl(None)
+ def getInfo(self):
+ return "Have total control over the playing!"
+
+ def _getDockWidget(self):
+ return self._createDock(self.o)
+