diff options
author | jerous <jerous@gmail.com> | 2008-06-09 18:59:28 +0200 |
---|---|---|
committer | jerous <jerous@gmail.com> | 2008-06-09 18:59:28 +0200 |
commit | 111ba3b8e06a9a2e24b5cff6f5e737a529bdaa97 (patch) | |
tree | dd4d69d3b3341d7d381ec9b4dd85bd2a78c878f0 /winMain.py | |
parent | 6a24bd44fd1a7c79e826fa983302a8b0b84a51e2 (diff) |
first step in switching to plugin structure
Diffstat (limited to 'winMain.py')
-rw-r--r-- | winMain.py | 256 |
1 files changed, 6 insertions, 250 deletions
@@ -8,250 +8,17 @@ from misc import * from clSettings import settings,mpdSettings from clMonty import monty +from plugins import * + from winConnect import winConnect from winSettings import showSettingsWindow from wgSongList import SongList from wgPlaylist import Playlist -from wgLyrics import wgLyrics clrRowSel=QtGui.QColor(180,180,180) -class wgSongStatus(QtGui.QWidget): - """Displays the status of the current song, if playing.""" - " label containing the info" - lblInfo=None - def __init__(self, parent=None): - QtGui.QWidget.__init__(self, parent) - - self.lblInfo=QtGui.QLabel() - self.setMinimumWidth(400) - - layout=QtGui.QHBoxLayout() - self.setLayout(layout) - - layout.addWidget(self.lblInfo) - - monty.addListener('onSongChange', self.update) - monty.addListener('onTimeChange', self.update) - monty.addListener('onStateChange', self.update) - monty.addListener('onConnect', self.update) - monty.addListener('onDisconnect', self.update) - - def update(self, params): - status=monty.getStatus() - curSong=monty.getCurrentSong() - line=["Status:\t", "Song:\t", "Time:\t"] - - try: - line[0]="%s%s"%(line[0], {'play':'playing', 'stop':'not playing' - , 'pause':'paused'}[status['state']]) - if status['state']!='stop': - line[1]="%s%s by %s [%s]"% (line[1], curSong.getTitle(), - curSong.getArtist(), curSong.getAlbum()) - line[2]="%s%s/%s" % (line[2], sec2min(status['time']) - , sec2min(status['length'])) - except: - pass - # merge lines - self.lblInfo.setText("%s\n%s\n%s"%(line[0],line[1],line[2])) - - def text(self): - return self.lblInfo.text() - -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('onVolumeChange', self.onVolumeChange) - monty.addListener('onReady', self.onReady) - monty.addListener('onDisconnect', self.onDisconnect) - monty.addListener('onTimeChange', self.onTimeChange) - - def onStateChange(self, params): - newState=params['newState'] - - 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 onReady(self, params): - map(lambda o: o.setEnabled(True), self.objects) - 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 wgAlbumCover(QtGui.QWidget): - " container for the image" - img=None - def __init__(self,parent=None): - QtGui.QWidget.__init__(self,parent) - monty.addListener('onSongChange', self.onSongChange) - monty.addListener('onReady', self.onReady) - monty.addListener('onDisconnect', self.onDisconnect) - - self.setMinimumSize(64,64) - self.onSongChange(None) - - def mousePressEvent(self, event): - self.onSongChange(None) - - def paintEvent(self, event): - if not self.img: - return - l=min(self.width(),self.height()) - p=QtGui.QPainter(self) - rect=QtCore.QRectF((self.width()-l)/2,0,l,l) - if isinstance(self.img, QtSvg.QSvgRenderer): - self.img.render(p, rect) - else: - p.drawImage(rect,self.img) - - def onSongChange(self, params): - song=monty.getCurrentSong() - try: - song._data['file'] - except: - self.img=None - self.update() - return - - self.img=QtSvg.QSvgRenderer(self) - self.img.load('gfx/no-cd-cover.svg') - coverFiles=['cover.jpg', 'cover.jpeg'] - fInfo=QtCore.QFileInfo(song.getFilepath()) - path=str(fInfo.absoluteDir().dirName()) - for coverFile in coverFiles: - file='%s/%s/%s'%(mpdSettings.get('music_directory'), path, coverFile) - if QtCore.QFileInfo(file).exists(): - try: - self.img=QtGui.QImage() - self.img.load(file) - break - except: - print "Failed to load %s"%(file) - self.update() - - def onReady(self, params): - self.onSongChange(None) - self.update() - - def onDisconnect(self, params): - self.img=None - self.update() - class winMain(QtGui.QMainWindow): """The winMain class is mpc's main window, showing the playlists and control-interface""" "Elements" @@ -309,24 +76,13 @@ class winMain(QtGui.QMainWindow): dockPlaylist=QtGui.QDockWidget("Playlist", parent) dockPlaylist.setObjectName('Playlist') - dockPlayControl=QtGui.QDockWidget("Playcontrol", parent) - dockPlayControl.setObjectName('Playcontrol') - - dockStatus=QtGui.QDockWidget("Status", parent) - dockStatus.setObjectName('Status') - - dockCover=QtGui.QDockWidget("Album cover", parent) - dockCover.setObjectName('Cover') - - dockLyrics=QtGui.QDockWidget('Lyrics', parent) - dockLyrics.setObjectName('Lyrics') + dockPlayControl=pluginPlayControl(self).getDockWidget() + dockStatus=pluginSongStatus(self).getDockWidget() + dockCover=pluginAlbumCover(self).getDockWidget() + dockLyrics=pluginLyrics(self).getDockWidget() dockLibrary.setWidget(self.lstLibrary) dockPlaylist.setWidget(self.lstPlaylist) - dockPlayControl.setWidget(self.playControl) - dockStatus.setWidget(self.songStatus) - dockCover.setWidget(self.albumCover) - dockLyrics.setWidget(self.lyrics) opts=QtGui.QDockWidget.DockWidgetClosable|QtGui.QDockWidget.DockWidgetMovable #opts=QtGui.QDockWidget.AllDockWidgetFeatures |