summaryrefslogtreecommitdiffstats
path: root/src/widget
diff options
context:
space:
mode:
authorRJ Ryan <rryan@mixxx.org>2014-10-27 11:11:33 -0400
committerRJ Ryan <rryan@mixxx.org>2014-10-27 11:11:33 -0400
commit5ef00f49a8450ee5f732df5fef39d1b8f5b7cb0f (patch)
treeefe4ed9be333e920a9d9efc394664261c9098fc7 /src/widget
parenta5f2fc5052fa4fea931b3b70cd2492ba720ecc46 (diff)
Rework WCoverArt <-> WTrackTableView signal flow.
* Communicate selected track instead of cover art. * Support connecting a WCoverArt to the track currently loaded to a deck.
Diffstat (limited to 'src/widget')
-rw-r--r--src/widget/wcoverart.cpp56
-rw-r--r--src/widget/wcoverart.h11
-rw-r--r--src/widget/wlibrarytableview.h2
-rw-r--r--src/widget/wtracktableview.cpp44
-rw-r--r--src/widget/wtracktableview.h1
5 files changed, 60 insertions, 54 deletions
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<CoverInfo::Source>(
- idx.sibling(idx.row(), m_iCoverSourceColumn).data().toInt());
- info.type = static_cast<CoverInfo::Type>(
- 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);