diff options
author | RJ Ryan <rryan@mixxx.org> | 2014-10-27 23:12:51 -0400 |
---|---|---|
committer | RJ Ryan <rryan@mixxx.org> | 2014-10-27 23:12:51 -0400 |
commit | 8e11ac56af316f28d99ee65b86bafad637a7559c (patch) | |
tree | 3f9358b6b51d36958caa7d8d2f16aee795dd37ca /src | |
parent | fb7570ed35c65257f7acdf1a523bf07a19ce099c (diff) |
Add coverArtUpdated signal to TrackInfoObject.
Listen to the signal in WCoverArt.
Diffstat (limited to 'src')
-rw-r--r-- | src/dlgtrackinfo.cpp | 6 | ||||
-rw-r--r-- | src/trackinfoobject.cpp | 4 | ||||
-rw-r--r-- | src/trackinfoobject.h | 1 | ||||
-rw-r--r-- | src/widget/wcoverart.cpp | 43 | ||||
-rw-r--r-- | src/widget/wcoverart.h | 1 |
5 files changed, 39 insertions, 16 deletions
diff --git a/src/dlgtrackinfo.cpp b/src/dlgtrackinfo.cpp index 25577142dc..161c0b75a7 100644 --- a/src/dlgtrackinfo.cpp +++ b/src/dlgtrackinfo.cpp @@ -174,6 +174,7 @@ void DlgTrackInfo::populateFields(TrackPointer pTrack) { m_loadedCover = pTrack->getCoverInfo(); m_loadedCover.trackId = pTrack->getId(); m_loadedCover.trackLocation = pTrack->getLocation(); + m_pWCoverArtLabel->setCoverArt(pTrack, m_loadedCover, QPixmap()); CoverArtCache* pCache = CoverArtCache::instance(); if (pCache != NULL) { pCache->requestCover(m_loadedCover); @@ -192,6 +193,9 @@ void DlgTrackInfo::loadTrack(TrackPointer pTrack) { populateCues(m_pLoadedTrack); disconnect(this, SLOT(updateTrackMetadata())); + + // We already listen to changed() so we don't need to listen to individual + // signals such as cuesUpdates, coverArtUpdated(), etc. connect(pTrack.data(), SIGNAL(changed(TrackInfoObject*)), this, SLOT(updateTrackMetadata())); } @@ -424,7 +428,7 @@ void DlgTrackInfo::clear() { cueTable->setRowCount(0); m_loadedCover = CoverInfo(); - m_pWCoverArtLabel->setCoverArt(TrackPointer(), CoverInfo(), QPixmap()); + m_pWCoverArtLabel->setCoverArt(TrackPointer(), m_loadedCover, QPixmap()); } void DlgTrackInfo::slotBpmDouble() { diff --git a/src/trackinfoobject.cpp b/src/trackinfoobject.cpp index 50b7ec7b89..c10dc48178 100644 --- a/src/trackinfoobject.cpp +++ b/src/trackinfoobject.cpp @@ -1023,6 +1023,8 @@ void TrackInfoObject::setCoverInfo(const CoverInfo& info) { m_coverArt = CoverArt(); m_coverArt.info = info; setDirty(true); + lock.unlock(); + emit(coverArtUpdated()); } } @@ -1036,6 +1038,8 @@ void TrackInfoObject::setCoverArt(const CoverArt& cover) { if (cover != m_coverArt) { m_coverArt = cover; setDirty(true); + lock.unlock(); + emit(coverArtUpdated()); } } diff --git a/src/trackinfoobject.h b/src/trackinfoobject.h index 7cf5534a40..4ca054028c 100644 --- a/src/trackinfoobject.h +++ b/src/trackinfoobject.h @@ -280,6 +280,7 @@ class TrackInfoObject : public QObject { signals: void waveformUpdated(); void waveformSummaryUpdated(); + void coverArtUpdated(); void analyserProgress(int progress); void bpmUpdated(double bpm); void beatsUpdated(); diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp index 521f381b2c..b7e4b3ec7a 100644 --- a/src/widget/wcoverart.cpp +++ b/src/widget/wcoverart.cpp @@ -76,12 +76,10 @@ void WCoverArt::setup(QDomNode node, const SkinContext& context) { } void WCoverArt::slotCoverArtSelected(const CoverArt& art) { - if (m_loadedTrack.isNull()) { - return; + if (m_loadedTrack) { + // Will trigger slotTrackCoverArtUpdated(). + m_loadedTrack->setCoverArt(art); } - m_loadedTrack->setCoverArt(art); - // TODO(rryan): listen to TIO signal instead - slotLoadTrack(m_loadedTrack); } void WCoverArt::slotEnable(bool enable) { @@ -96,6 +94,10 @@ void WCoverArt::slotEnable(bool enable) { } void WCoverArt::slotReset() { + if (m_loadedTrack) { + disconnect(m_loadedTrack.data(), SIGNAL(coverArtUpdated()), + this, SLOT(slotTrackCoverArtUpdated())); + } m_loadedTrack = TrackPointer(); m_lastRequestedCover = CoverInfo(); m_loadedCover = QPixmap(); @@ -114,26 +116,37 @@ void WCoverArt::slotPixmapFound(int trackId, QPixmap pixmap) { } } +void WCoverArt::slotTrackCoverArtUpdated() { + if (m_loadedTrack) { + m_lastRequestedCover = m_loadedTrack->getCoverInfo(); + m_lastRequestedCover.trackId = m_loadedTrack->getId(); + m_lastRequestedCover.trackLocation = m_loadedTrack->getLocation(); + CoverArtCache* pCache = CoverArtCache::instance(); + if (pCache != NULL) { + pCache->requestCover(m_lastRequestedCover); + } + } +} + void WCoverArt::slotLoadTrack(TrackPointer pTrack) { + if (m_loadedTrack) { + disconnect(m_loadedTrack.data(), SIGNAL(coverArtUpdated()), + this, SLOT(slotTrackCoverArtUpdated())); + } m_lastRequestedCover = CoverInfo(); m_loadedCover = QPixmap(); m_loadedCoverScaled = QPixmap(); m_loadedTrack = pTrack; + if (m_loadedTrack) { + connect(m_loadedTrack.data(), SIGNAL(coverArtUpdated()), + this, SLOT(slotTrackCoverArtUpdated())); + } if (!m_bEnable) { return; } - if (m_loadedTrack) { - m_lastRequestedCover = m_loadedTrack->getCoverInfo(); - m_lastRequestedCover.trackId = m_loadedTrack->getId(); - m_lastRequestedCover.trackLocation = m_loadedTrack->getLocation(); - - CoverArtCache* pCache = CoverArtCache::instance(); - if (pCache != NULL) { - pCache->requestCover(m_lastRequestedCover); - } - } + slotTrackCoverArtUpdated(); } QPixmap WCoverArt::scaledCoverArt(const QPixmap& normal) { diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h index d071b3ee1b..fcd27f725c 100644 --- a/src/widget/wcoverart.h +++ b/src/widget/wcoverart.h @@ -34,6 +34,7 @@ class WCoverArt : public QWidget, public WBaseWidget { private slots: void slotPixmapFound(int trackId, QPixmap pixmap); void slotCoverArtSelected(const CoverArt& art); + void slotTrackCoverArtUpdated(); protected: void paintEvent(QPaintEvent*); |