def __init__ (self, collaggr=None, songs=None, view=None): QAbstractTableModel.__init__ (self, view) # TODO: different delegate for editing tags: one with completion self.view_= view self.playlist= view.playlist self.edited= False if songs is None: self.collaggr= collaggr self.collections= self.collaggr.collections self.signalMapper= QSignalMapper () for collNo, collection in enumerate (self.collections): collection.newSongs.connect (self.signalMapper.map) self.signalMapper.setMapping (collection, collNo) self.signalMapper.mapped.connect (self.addRows) else: self.collaggr= CollectionAggregator (self, songs=songs) self.attrNames= ('artist', 'year', 'collection', 'diskno', 'album', 'trackno', 'title', 'length', 'filepath') self.headers= (u'Artist', u'Year', u'Collection', u'CD', u'Album', u'Track', u'Title', u'Length', u'Path') # FIXME: kinda hacky self.fontMetrics= QFontMetrics (KGlobalSettings.generalFont ()) # FIXME: (even more) hackish self.columnWidths= ("M"*15, "M"*4, "M"*15, "M"*3, "M"*20, "M"*3, "M"*25, "M"*5, "M"*200) logger.debug ("QPLM: ", self)
def connectUi (self, player): self.player= player self.playlist= player.playlist # connect buttons! self.ui.prevButton.clicked.connect (self.player.prev) # the QPushButton.clicked() emits a bool, # and it's False on normal (non-checkable) buttons # no, it's not false, it's 0, which is indistinguishable from play(0) # so lambda the 'bool' away self.ui.playButton.clicked.connect (lambda b: self.player.play ()) self.ui.pauseButton.clicked.connect (self.player.pause) self.ui.stopButton.clicked.connect (self.player.stop) self.ui.nextButton.clicked.connect (self.player.next) self.ui.randomCheck.setChecked (self.playlist.random) self.ui.randomCheck.clicked.connect (self.playlist.toggleRandom) self.playlist.randomChanged.connect (self.ui.randomCheck.setChecked) self.ui.stopAfterCheck.setChecked (self.player.stopAfter) self.ui.stopAfterCheck.clicked.connect (self.player.toggleStopAfter) self.player.stopAfterChanged.connect (self.ui.stopAfterCheck.setChecked) self.ui.searchEntry.textChanged.connect (self.search) majV, minV, patchL= utils.phononVersion () if (majV>4) or (majV==4 and minV>3) or (majV==4 and minV==3 and patchL>1): # each second self.player.media.setTickInterval (1000); self.player.media.tick.connect (self.updateTimes) self.ui.seekSlider.setMediaObject (self.player.media) # TODO: self.ui.volumeSlider # TODO: better name? self.appModel= QPlayListModel (collaggr=self.playlist.collaggr, view=self) # TODO: connect after the collection has been scanned/populated self.appModel.dataChanged.connect (self.copyEditToSelection) self.copying= False self.setModel (self.appModel) self.renamer= Renamer (self.model.collaggr) self.playlist.songChanged.connect (self.showSong) self.playlist.queued.connect (self.appModel.dirtyRow) self.playlist.dequeued.connect (self.appModel.dirtyRow) self.ui.songsList.activated.connect (self.changeSong) self.player.songChanged.connect (self.nowPlaying) # FIXME: kinda hacky self.fontMetrics= QFontMetrics (KGlobalSettings.generalFont ()) for i, w in enumerate (self.model.columnWidths): self.ui.songsList.setColumnWidth (i, self.fontMetrics.width (w)) # this is much much slower! # self.ui.songsList.verticalHeader ().setResizeMode (QHeaderView.ResizeToContents) # FIXME: temporarily until I resolve the showSong() at boot time self.modelIndex= None self.songIndexSelectedByUser= None actions.create (self, self.actionCollection ())