From 5ef00f49a8450ee5f732df5fef39d1b8f5b7cb0f Mon Sep 17 00:00:00 2001 From: RJ Ryan Date: Mon, 27 Oct 2014 11:11:33 -0400 Subject: Rework WCoverArt <-> WTrackTableView signal flow. * Communicate selected track instead of cover art. * Support connecting a WCoverArt to the track currently loaded to a deck. --- src/widget/wcoverart.cpp | 56 +++++++++++++++++++++++++++++------------- src/widget/wcoverart.h | 11 ++++++--- src/widget/wlibrarytableview.h | 2 +- src/widget/wtracktableview.cpp | 44 ++++++++++----------------------- src/widget/wtracktableview.h | 1 - 5 files changed, 60 insertions(+), 54 deletions(-) (limited to 'src/widget') diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp index 942ce56976..fd21390ca5 100644 --- a/src/widget/wcoverart.cpp +++ b/src/widget/wcoverart.cpp @@ -11,12 +11,12 @@ #include "library/coverartutils.h" WCoverArt::WCoverArt(QWidget* parent, - TrackCollection* pTrackCollection) + const QString& group) : QWidget(parent), WBaseWidget(this), + m_group(group), m_bEnable(true), m_pMenu(new WCoverArtMenu(this)), - m_trackDAO(pTrackCollection->getTrackDAO()), m_pDlgFullSize(new DlgCoverArtFullSize()) { CoverArtCache* pCache = CoverArtCache::instance(); if (pCache != NULL) { @@ -74,26 +74,36 @@ void WCoverArt::slotCoverLocationUpdated(const QString& newLoc, QPixmap newCover) { Q_UNUSED(oldLoc); Q_UNUSED(newCover); - TrackPointer pTrack = m_trackDAO.getTrack(m_lastRequestedCover.trackId); - if (pTrack) { - CoverArt art; - art.info.coverLocation = newLoc; - art.info.source = CoverInfo::USER_SELECTED; - art.info.type = CoverInfo::FILE; - pTrack->setCoverArt(art); + + if (m_loadedTrack.isNull()) { + return; } + + CoverArt art; + art.info.coverLocation = newLoc; + art.info.source = CoverInfo::USER_SELECTED; + art.info.type = CoverInfo::FILE; + // TODO(rryan): hash + m_loadedTrack->setCoverArt(art); } void WCoverArt::slotEnable(bool enable) { + bool wasDisabled = !m_bEnable && enable; m_bEnable = enable; int h = (float) parentWidget()->height() / 3; h = m_bEnable ? h : 0; setMinimumHeight(h); setMaximumHeight(h); + + if (wasDisabled) { + slotLoadTrack(m_loadedTrack); + } + update(); } void WCoverArt::slotReset() { + m_loadedTrack = TrackPointer(); m_lastRequestedCover = CoverInfo(); m_loadedCover = QPixmap(); m_loadedCoverScaled = QPixmap(); @@ -111,14 +121,26 @@ void WCoverArt::slotPixmapFound(int trackId, QPixmap pixmap) { } } -void WCoverArt::slotLoadCoverArt(CoverInfo info, bool cachedOnly) { +void WCoverArt::slotLoadTrack(TrackPointer pTrack) { + qDebug() << "WCoverArt::slotLoadTrack" << pTrack; + m_lastRequestedCover = CoverInfo(); + m_loadedCover = QPixmap(); + m_loadedCoverScaled = QPixmap(); + m_loadedTrack = pTrack; + if (!m_bEnable) { return; } - m_lastRequestedCover = info; - CoverArtCache* pCache = CoverArtCache::instance(); - if (pCache != NULL) { - pCache->requestCover(info, QSize(0,0), cachedOnly); + + 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, QSize(0,0), false); + } } } @@ -173,9 +195,9 @@ void WCoverArt::mousePressEvent(QMouseEvent* event) { return; } - if (event->button() == Qt::RightButton) { // show context-menu - TrackPointer pTrack = m_trackDAO.getTrack(m_lastRequestedCover.trackId); - m_pMenu->show(event->globalPos(), m_lastRequestedCover, pTrack); + + if (event->button() == Qt::RightButton && m_loadedTrack) { // show context-menu + m_pMenu->show(event->globalPos(), m_lastRequestedCover, m_loadedTrack); } else if (event->button() == Qt::LeftButton) { // init/close fullsize cover if (m_pDlgFullSize->isVisible()) { m_pDlgFullSize->close(); diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h index 63bc09075c..9f57ec0ea6 100644 --- a/src/widget/wcoverart.h +++ b/src/widget/wcoverart.h @@ -9,7 +9,6 @@ #include "dlgcoverartfullsize.h" #include "trackinfoobject.h" #include "library/coverartcache.h" -#include "library/trackcollection.h" #include "skin/skincontext.h" #include "widget/wbasewidget.h" #include "widget/wcoverartmenu.h" @@ -17,15 +16,18 @@ class WCoverArt : public QWidget, public WBaseWidget { Q_OBJECT public: - WCoverArt(QWidget* parent, TrackCollection* pTrackCollection); + WCoverArt(QWidget* parent, const QString& group); virtual ~WCoverArt(); void setup(QDomNode node, const SkinContext& context); public slots: + void slotLoadTrack(TrackPointer); void slotReset(); void slotEnable(bool); - void slotLoadCoverArt(CoverInfo info, bool cachedOnly); + + signals: + void trackDropped(QString filename, QString group); private slots: void slotPixmapFound(int trackId, QPixmap pixmap); @@ -42,13 +44,14 @@ class WCoverArt : public QWidget, public WBaseWidget { private: QPixmap scaledCoverArt(const QPixmap& normal); + QString m_group; bool m_bEnable; WCoverArtMenu* m_pMenu; + TrackPointer m_loadedTrack; QPixmap m_loadedCover; QPixmap m_loadedCoverScaled; QPixmap m_defaultCover; QPixmap m_defaultCoverScaled; - TrackDAO& m_trackDAO; CoverInfo m_lastRequestedCover; DlgCoverArtFullSize* m_pDlgFullSize; }; diff --git a/src/widget/wlibrarytableview.h b/src/widget/wlibrarytableview.h index 1eef425014..66bb303b98 100644 --- a/src/widget/wlibrarytableview.h +++ b/src/widget/wlibrarytableview.h @@ -27,7 +27,7 @@ class WLibraryTableView : public QTableView, public virtual LibraryView { void loadTrack(TrackPointer pTrack); void loadTrackToPlayer(TrackPointer pTrack, QString group, bool play = false); - void loadCoverArt(CoverInfo info, bool cachedOnly); + void trackSelected(TrackPointer pTrack); void onlyCachedCoverArt(bool); void scrollValueChanged(int); diff --git a/src/widget/wtracktableview.cpp b/src/widget/wtracktableview.cpp index 3414e9653d..8f2c13c384 100644 --- a/src/widget/wtracktableview.cpp +++ b/src/widget/wtracktableview.cpp @@ -159,10 +159,20 @@ void WTrackTableView::slotScrollValueChanged(int) { enableCachedOnly(); } -void WTrackTableView::selectionChanged(const QItemSelection &selected, - const QItemSelection &deselected) { +void WTrackTableView::selectionChanged(const QItemSelection& selected, + const QItemSelection& deselected) { enableCachedOnly(); - emitLoadCoverArt(true); + + const QModelIndexList indices = selectionModel()->selectedRows(); + if (indices.size() > 0 && indices.last().isValid()) { + TrackModel* trackModel = getTrackModel(); + if (trackModel) { + TrackPointer pTrack = trackModel->getTrack(indices.last()); + if (pTrack) { + emit(trackSelected(pTrack)); + } + } + } QTableView::selectionChanged(selected, deselected); } @@ -171,7 +181,6 @@ void WTrackTableView::slotGuiTickTime(double cpuTime) { // if the user is stopped in the same row for more than 0.1 s, // we load un-cached cover arts as well. if (m_loadCachedOnly && cpuTime >= m_lastSelection + 0.1) { - emitLoadCoverArt(false); // it will allows CoverCache to load and search covers normally emit(onlyCachedCoverArt(false)); m_loadCachedOnly = false; @@ -187,33 +196,6 @@ void WTrackTableView::slotGuiTickTime(double cpuTime) { } } -void WTrackTableView::emitLoadCoverArt(bool cachedOnly) { - if (m_iCoverSourceColumn < 0 || m_iCoverTypeColumn < 0 || - m_iCoverLocationColumn < 0 || m_iCoverHashColumn < 0) { - return; - } - - CoverInfo info; - const QModelIndexList indices = selectionModel()->selectedRows(); - if (indices.size() > 0 && indices.last().isValid()) { - TrackModel* trackModel = getTrackModel(); - if (trackModel) { - QModelIndex idx = indices.last(); - info.source = static_cast( - idx.sibling(idx.row(), m_iCoverSourceColumn).data().toInt()); - info.type = static_cast( - idx.sibling(idx.row(), m_iCoverTypeColumn).data().toInt()); - info.hash = idx.sibling(idx.row(), m_iCoverHashColumn).data().toString(); - info.trackId = trackModel->getTrackId(idx); - info.coverLocation = idx.sibling( - idx.row(), m_iCoverLocationColumn).data().toString(); - info.trackLocation = idx.sibling( - idx.row(), m_iTrackLocationColumn).data().toString(); - } - } - emit(loadCoverArt(info, cachedOnly)); -} - // slot void WTrackTableView::loadTrackModel(QAbstractItemModel *model) { //qDebug() << "WTrackTableView::loadTrackModel()" << model; diff --git a/src/widget/wtracktableview.h b/src/widget/wtracktableview.h index be2e130200..e293a8e2ae 100644 --- a/src/widget/wtracktableview.h +++ b/src/widget/wtracktableview.h @@ -82,7 +82,6 @@ class WTrackTableView : public WLibraryTableView { void dropEvent(QDropEvent * event); void lockBpm(bool lock); - void emitLoadCoverArt(bool cachedOnly); void enableCachedOnly(); void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); -- cgit v1.2.3