diff options
author | jerous <jerous@gmail.com> | 2008-06-12 01:31:27 +0200 |
---|---|---|
committer | jerous <jerous@gmail.com> | 2008-06-12 01:32:08 +0200 |
commit | a97bd77f927c1c34787bdc5e23bdac17e24225a4 (patch) | |
tree | 78e7ca7d9bc56f7e895b2ab1b4b326fac3a06bdd /plugins/PlayControl.py | |
parent | d948985110a4c1350a2fc114f520eac36c795ba1 (diff) |
loading dynamically all plugins in ./plugins/*.py
Diffstat (limited to 'plugins/PlayControl.py')
-rw-r--r-- | plugins/PlayControl.py | 151 |
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) + |