summaryrefslogtreecommitdiff
path: root/winMain.py
diff options
context:
space:
mode:
authorjerous <jerous@gmail.com>2008-06-09 18:59:28 +0200
committerjerous <jerous@gmail.com>2008-06-09 18:59:28 +0200
commit111ba3b8e06a9a2e24b5cff6f5e737a529bdaa97 (patch)
treedd4d69d3b3341d7d381ec9b4dd85bd2a78c878f0 /winMain.py
parent6a24bd44fd1a7c79e826fa983302a8b0b84a51e2 (diff)
first step in switching to plugin structure
Diffstat (limited to 'winMain.py')
-rw-r--r--winMain.py256
1 files changed, 6 insertions, 250 deletions
diff --git a/winMain.py b/winMain.py
index 79decc1..b627dbe 100644
--- a/winMain.py
+++ b/winMain.py
@@ -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