diff options
author | be_ <be.0@gmx.com> | 2017-03-28 13:59:59 -0500 |
---|---|---|
committer | be_ <be.0@gmx.com> | 2017-03-28 13:59:59 -0500 |
commit | 977acee8a987805a250c0043bd767f9573c5f053 (patch) | |
tree | af085f433ee4fae65d147fd706ade8ff7fd88605 /src/widget | |
parent | 03557a7a6d2a6717389035fa97a08dd7744d101f (diff) |
DlgCoverArtFullSize revamp
* let DlgCoverArtFullSize have a border
* set DlgCoverArtFullSize window title to "Album Artist - Album (Year)"
(or Album instead of Album Artist if there is no Album Artist)
* let DlgCoverArtFullSize be resized either by dragging the window
border or using a mouse scroll wheel
* update DlgCoverArtFullSize when cover art is changed
* update DlgCoverArtFullSize when track is reloaded
* show WCoverArtMenu on right click of DlgCoverArtFullSize
* show WCoverArtMenu on right click of WSpinny when the track does not
have cover art set
* update WSpinny tooltip
* don't hide DlgCoverArtFullSize when moving mouse off of WCoverArtLabel
Diffstat (limited to 'src/widget')
-rw-r--r-- | src/widget/wcoverart.cpp | 18 | ||||
-rw-r--r-- | src/widget/wcoverart.h | 4 | ||||
-rw-r--r-- | src/widget/wcoverartlabel.cpp | 11 | ||||
-rw-r--r-- | src/widget/wcoverartlabel.h | 4 | ||||
-rw-r--r-- | src/widget/wspinny.cpp | 55 | ||||
-rw-r--r-- | src/widget/wspinny.h | 9 |
6 files changed, 83 insertions, 18 deletions
diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp index 68fc9093aa..a14e9efeab 100644 --- a/src/widget/wcoverart.cpp +++ b/src/widget/wcoverart.cpp @@ -17,14 +17,16 @@ WCoverArt::WCoverArt(QWidget* parent, UserSettingsPointer pConfig, - const QString& group) + const QString& group, + BaseTrackPlayer* pPlayer) : QWidget(parent), WBaseWidget(this), m_group(group), m_pConfig(pConfig), m_bEnable(true), m_pMenu(new WCoverArtMenu(this)), - m_pDlgFullSize(new DlgCoverArtFullSize()) { + m_pPlayer(pPlayer), + m_pDlgFullSize(new DlgCoverArtFullSize(parent, pPlayer)) { // Accept drops if we have a group to load tracks into. setAcceptDrops(!m_group.isEmpty()); @@ -39,6 +41,16 @@ WCoverArt::WCoverArt(QWidget* parent, this, SLOT(slotCoverInfoSelected(const CoverInfo&))); connect(m_pMenu, SIGNAL(reloadCoverArt()), this, SLOT(slotReloadCoverArt())); + + if (m_pPlayer != nullptr) { + connect(m_pPlayer, SIGNAL(newTrackLoaded(TrackPointer)), + this, SLOT(slotLoadTrack(TrackPointer))); + connect(m_pPlayer, SIGNAL(loadingTrack(TrackPointer, TrackPointer)), + this, SLOT(slotLoadingTrack(TrackPointer, TrackPointer))); + + // just in case a track is already loaded + slotLoadTrack(m_pPlayer->getLoadedTrack()); + } } WCoverArt::~WCoverArt() { @@ -223,7 +235,7 @@ void WCoverArt::mousePressEvent(QMouseEvent* event) { if (m_pDlgFullSize->isVisible()) { m_pDlgFullSize->close(); } else { - m_pDlgFullSize->init(m_loadedCover); + m_pDlgFullSize->init(m_loadedTrack); } } } diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h index b69f4dc954..af348d3d26 100644 --- a/src/widget/wcoverart.h +++ b/src/widget/wcoverart.h @@ -6,6 +6,7 @@ #include <QMouseEvent> #include <QWidget> +#include "mixer/basetrackplayer.h" #include "preferences/usersettings.h" #include "track/track.h" #include "library/coverartcache.h" @@ -19,7 +20,7 @@ class WCoverArt : public QWidget, public WBaseWidget { Q_OBJECT public: WCoverArt(QWidget* parent, UserSettingsPointer pConfig, - const QString& group); + const QString& group, BaseTrackPlayer* pPlayer); ~WCoverArt() override; void setup(const QDomNode& node, const SkinContext& context); @@ -62,6 +63,7 @@ class WCoverArt : public QWidget, public WBaseWidget { QPixmap m_defaultCover; QPixmap m_defaultCoverScaled; CoverInfo m_lastRequestedCover; + BaseTrackPlayer* m_pPlayer; DlgCoverArtFullSize* m_pDlgFullSize; }; diff --git a/src/widget/wcoverartlabel.cpp b/src/widget/wcoverartlabel.cpp index 451b4f90b1..0758d7aab2 100644 --- a/src/widget/wcoverartlabel.cpp +++ b/src/widget/wcoverartlabel.cpp @@ -10,7 +10,7 @@ static const QSize s_labelDisplaySize = QSize(100, 100); WCoverArtLabel::WCoverArtLabel(QWidget* parent) : QLabel(parent), m_pCoverMenu(new WCoverArtMenu(this)), - m_pDlgFullSize(new DlgCoverArtFullSize()), + m_pDlgFullSize(new DlgCoverArtFullSize(this, nullptr)), m_defaultCover(CoverArtUtils::defaultCoverLocation()) { setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); setFrameShape(QFrame::Box); @@ -59,6 +59,10 @@ void WCoverArtLabel::slotCoverMenu(const QPoint& pos) { m_pCoverMenu->popup(mapToGlobal(pos)); } +void WCoverArtLabel::loadTrack(TrackPointer pTrack) { + m_pLoadedTrack = pTrack; +} + void WCoverArtLabel::mousePressEvent(QMouseEvent* event) { if (m_pCoverMenu->isVisible()) { return; @@ -68,11 +72,8 @@ void WCoverArtLabel::mousePressEvent(QMouseEvent* event) { if (m_pDlgFullSize->isVisible()) { m_pDlgFullSize->close(); } else { - m_pDlgFullSize->init(m_loadedCover); + m_pDlgFullSize->init(m_pLoadedTrack); } } } -void WCoverArtLabel::leaveEvent(QEvent* /*unused*/) { - m_pDlgFullSize->close(); -} diff --git a/src/widget/wcoverartlabel.h b/src/widget/wcoverartlabel.h index c9138f0107..0864a2e9b5 100644 --- a/src/widget/wcoverartlabel.h +++ b/src/widget/wcoverartlabel.h @@ -6,6 +6,7 @@ #include <QWidget> #include <QPixmap> +#include "track/track.h" #include "widget/wcoverartmenu.h" class DlgCoverArtFullSize; @@ -17,13 +18,13 @@ class WCoverArtLabel : public QLabel { ~WCoverArtLabel() override; void setCoverArt(const CoverInfo& coverInfo, QPixmap px); + void loadTrack(TrackPointer pTrack); signals: void coverInfoSelected(const CoverInfo& coverInfo); void reloadCoverArt(); protected: - void leaveEvent(QEvent* /*unused*/) override; void mousePressEvent(QMouseEvent* event) override; private slots: @@ -31,6 +32,7 @@ class WCoverArtLabel : public QLabel { private: QPixmap m_loadedCover; + TrackPointer m_pLoadedTrack; WCoverArtMenu* m_pCoverMenu; DlgCoverArtFullSize* m_pDlgFullSize; QPixmap m_defaultCover; diff --git a/src/widget/wspinny.cpp b/src/widget/wspinny.cpp index fc792dcb3f..fd4e938dbd 100644 --- a/src/widget/wspinny.cpp +++ b/src/widget/wspinny.cpp @@ -19,7 +19,8 @@ // The SampleBuffers format enables antialiasing. WSpinny::WSpinny(QWidget* parent, const QString& group, UserSettingsPointer pConfig, - VinylControlManager* pVCMan) + VinylControlManager* pVCMan, + BaseTrackPlayer* pPlayer) : QGLWidget(QGLFormat(QGL::SampleBuffers), parent, SharedGLContext::getWidget()), WBaseWidget(this), m_group(group), @@ -60,7 +61,9 @@ WSpinny::WSpinny(QWidget* parent, const QString& group, m_bClampFailedWarning(false), m_bGhostPlayback(false), m_bWidgetDirty(false), - m_pDlgCoverArt(new DlgCoverArtFullSize()) { + m_pPlayer(pPlayer), + m_pDlgCoverArt(new DlgCoverArtFullSize(parent, pPlayer)), + m_pCoverMenu(new WCoverArtMenu(this)) { #ifdef __VINYLCONTROL__ m_pVCManager = pVCMan; #endif @@ -78,6 +81,19 @@ WSpinny::WSpinny(QWidget* parent, const QString& group, const CoverInfo&, QPixmap, bool))); } + if (m_pPlayer != nullptr) { + connect(m_pPlayer, SIGNAL(newTrackLoaded(TrackPointer)), + this, SLOT(slotLoadTrack(TrackPointer))); + connect(m_pPlayer, SIGNAL(loadingTrack(TrackPointer, TrackPointer)), + this, SLOT(slotLoadingTrack(TrackPointer, TrackPointer))); + // just in case a track is already loaded + slotLoadTrack(m_pPlayer->getLoadedTrack()); + } + + connect(m_pCoverMenu, SIGNAL(coverInfoSelected(const CoverInfo&)), + this, SLOT(slotCoverInfoSelected(const CoverInfo&))); + connect(m_pCoverMenu, SIGNAL(reloadCoverArt()), + this, SLOT(slotReloadCoverArt())); } WSpinny::~WSpinny() { @@ -277,6 +293,21 @@ void WSpinny::slotCoverFound(const QObject* pRequestor, } } +void WSpinny::slotCoverInfoSelected(const CoverInfo& coverInfo) { + if (m_loadedTrack) { + // Will trigger slotTrackCoverArtUpdated(). + m_loadedTrack->setCoverInfo(coverInfo); + } +} + +void WSpinny::slotReloadCoverArt() { + if (m_loadedTrack) { + CoverArtCache* pCache = CoverArtCache::instance(); + if (pCache) { + pCache->requestGuessCover(m_loadedTrack); + } + } +} void WSpinny::paintEvent(QPaintEvent *e) { Q_UNUSED(e); //ditch unused param warning @@ -541,11 +572,20 @@ void WSpinny::mouseMoveEvent(QMouseEvent * e) { } void WSpinny::mousePressEvent(QMouseEvent * e) { + if (m_loadedTrack == nullptr) { + return; + } + if (m_pDlgCoverArt->isVisible()) { m_pDlgCoverArt->close(); return; } + if (m_pCoverMenu->isVisible()) { + m_pCoverMenu->close(); + return; + } + if (e->button() == Qt::LeftButton) { int y = e->y(); int x = e->x(); @@ -576,8 +616,12 @@ void WSpinny::mousePressEvent(QMouseEvent * e) { // Trigger a mouse move to immediately line up the vinyl with the cursor mouseMoveEvent(e); } - } else if (m_bShowCover) { - m_pDlgCoverArt->init(m_loadedCover); + } else { + if (!m_loadedCover.isNull()) { + m_pDlgCoverArt->init(m_loadedTrack); + } else if (!m_pDlgCoverArt->isVisible()) { + m_pCoverMenu->popup(e->pos()); + } } } @@ -587,9 +631,6 @@ void WSpinny::mouseReleaseEvent(QMouseEvent * e) QApplication::restoreOverrideCursor(); m_pScratchToggle->set(0.0); m_iFullRotations = 0; - if (e->button() == Qt::RightButton) { - m_pSlipEnabled->set(0.0); - } } } diff --git a/src/widget/wspinny.h b/src/widget/wspinny.h index 4ee2dcb44d..d7b91ab138 100644 --- a/src/widget/wspinny.h +++ b/src/widget/wspinny.h @@ -8,11 +8,13 @@ #include <QEvent> #include "library/dlgcoverartfullsize.h" +#include "mixer/basetrackplayer.h" #include "preferences/usersettings.h" #include "skin/skincontext.h" #include "track/track.h" #include "vinylcontrol/vinylsignalquality.h" #include "widget/wbasewidget.h" +#include "widget/wcoverartmenu.h" #include "widget/wwidget.h" class ControlProxy; @@ -24,7 +26,8 @@ class WSpinny : public QGLWidget, public WBaseWidget, public VinylSignalQualityL public: WSpinny(QWidget* parent, const QString& group, UserSettingsPointer pConfig, - VinylControlManager* pVCMan); + VinylControlManager* pVCMan, + BaseTrackPlayer* pPlayer); ~WSpinny() override; void onVinylSignalQualityUpdate(const VinylSignalQualityReport& report) override; @@ -45,6 +48,8 @@ class WSpinny : public QGLWidget, public WBaseWidget, public VinylSignalQualityL void maybeUpdate(); void slotCoverFound(const QObject* pRequestor, const CoverInfo& info, QPixmap pixmap, bool fromCache); + void slotCoverInfoSelected(const CoverInfo& coverInfo); + void slotReloadCoverArt(); void slotTrackCoverArtUpdated(); @@ -121,7 +126,9 @@ class WSpinny : public QGLWidget, public WBaseWidget, public VinylSignalQualityL bool m_bGhostPlayback; bool m_bWidgetDirty; + BaseTrackPlayer* m_pPlayer; DlgCoverArtFullSize* m_pDlgCoverArt; + WCoverArtMenu* m_pCoverMenu; }; #endif //_WSPINNY_H |