diff options
author | Daniel Schürmann <daschuer@mixxx.org> | 2020-06-07 18:45:07 +0200 |
---|---|---|
committer | Daniel Schürmann <daschuer@mixxx.org> | 2020-06-07 18:45:07 +0200 |
commit | d53365cd259b2a2022118e5dbc4ddaf973ed5dc0 (patch) | |
tree | 6c5a5a9131c3e48e9514d038fac5dd578e9be932 /src/widget | |
parent | 8b9b6d5cd94d09cd972b427398eb4e94aa2847ac (diff) |
Added a Context menu to the WTrackWidgetGroup, ane accept() the context menu event in other widgets.
Diffstat (limited to 'src/widget')
-rw-r--r-- | src/widget/wcoverart.cpp | 14 | ||||
-rw-r--r-- | src/widget/wcoverart.h | 5 | ||||
-rw-r--r-- | src/widget/wcoverartlabel.cpp | 17 | ||||
-rw-r--r-- | src/widget/wcoverartlabel.h | 1 | ||||
-rw-r--r-- | src/widget/wtrackproperty.cpp | 13 | ||||
-rw-r--r-- | src/widget/wtrackproperty.h | 4 | ||||
-rw-r--r-- | src/widget/wtracktableview.cpp | 1 | ||||
-rw-r--r-- | src/widget/wtracktext.cpp | 1 | ||||
-rw-r--r-- | src/widget/wtracktext.h | 4 | ||||
-rw-r--r-- | src/widget/wtrackwidgetgroup.cpp | 28 | ||||
-rw-r--r-- | src/widget/wtrackwidgetgroup.h | 11 |
11 files changed, 75 insertions, 24 deletions
diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp index add4f52c4a..803d090fa7 100644 --- a/src/widget/wcoverart.cpp +++ b/src/widget/wcoverart.cpp @@ -234,15 +234,21 @@ void WCoverArt::resizeEvent(QResizeEvent* /*unused*/) { m_defaultCoverScaled = scaledCoverArt(m_defaultCover); } +void WCoverArt::contextMenuEvent(QContextMenuEvent* event) { + event->accept(); + if (m_loadedTrack) { + m_pMenu->setCoverArt(m_lastRequestedCover); + m_pMenu->popup(event->globalPos()); + } +} + void WCoverArt::mousePressEvent(QMouseEvent* event) { if (!m_bEnable) { return; } - if (event->button() == Qt::RightButton && m_loadedTrack) { // show context-menu - m_pMenu->setCoverArt(m_lastRequestedCover); - m_pMenu->popup(event->globalPos()); - } else if (event->button() == Qt::LeftButton) { + if (event->button() == Qt::LeftButton) { + event->accept(); // do nothing if left button is pressed, // wait for button release m_clickTimer.setSingleShot(true); diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h index 98b2ab32e9..590dace590 100644 --- a/src/widget/wcoverart.h +++ b/src/widget/wcoverart.h @@ -51,8 +51,9 @@ class WCoverArt : public QWidget, public WBaseWidget, public TrackDropTarget { protected: void paintEvent(QPaintEvent* /*unused*/) override; void resizeEvent(QResizeEvent* /*unused*/) override; - void mousePressEvent(QMouseEvent* /*unused*/) override; - void mouseReleaseEvent(QMouseEvent* /*unused*/) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + void contextMenuEvent(QContextMenuEvent* event) override; void dragEnterEvent(QDragEnterEvent *event) override; void dropEvent(QDropEvent *event) override; diff --git a/src/widget/wcoverartlabel.cpp b/src/widget/wcoverartlabel.cpp index 7bd9d1bbf2..78d0ea410c 100644 --- a/src/widget/wcoverartlabel.cpp +++ b/src/widget/wcoverartlabel.cpp @@ -16,13 +16,11 @@ WCoverArtLabel::WCoverArtLabel(QWidget* parent) setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); setFrameShape(QFrame::Box); setAlignment(Qt::AlignCenter); - setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, SIGNAL(customContextMenuRequested(QPoint)), - this, SLOT(slotCoverMenu(QPoint))); - connect(m_pCoverMenu, SIGNAL(coverInfoSelected(const CoverInfoRelative&)), - this, SIGNAL(coverInfoSelected(const CoverInfoRelative&))); - connect(m_pCoverMenu, SIGNAL(reloadCoverArt()), - this, SIGNAL(reloadCoverArt())); + connect(m_pCoverMenu, + &WCoverArtMenu::coverInfoSelected, + this, + &WCoverArtLabel::coverInfoSelected); + connect(m_pCoverMenu, &WCoverArtMenu::reloadCoverArt, this, &WCoverArtLabel::reloadCoverArt); m_defaultCover.setDevicePixelRatio(getDevicePixelRatioF(this)); m_defaultCover = m_defaultCover.scaled(s_labelDisplaySize * getDevicePixelRatioF(this), @@ -60,6 +58,11 @@ void WCoverArtLabel::slotCoverMenu(const QPoint& pos) { m_pCoverMenu->popup(mapToGlobal(pos)); } +void WCoverArtLabel::contextMenuEvent(QContextMenuEvent* event) { + event->accept(); + m_pCoverMenu->popup(event->globalPos()); +} + void WCoverArtLabel::loadTrack(TrackPointer pTrack) { m_pLoadedTrack = pTrack; } diff --git a/src/widget/wcoverartlabel.h b/src/widget/wcoverartlabel.h index 9ae4528c5e..fc073ad4c8 100644 --- a/src/widget/wcoverartlabel.h +++ b/src/widget/wcoverartlabel.h @@ -26,6 +26,7 @@ class WCoverArtLabel : public QLabel { protected: void mousePressEvent(QMouseEvent* event) override; + void contextMenuEvent(QContextMenuEvent* event) override; private slots: void slotCoverMenu(const QPoint& pos); diff --git a/src/widget/wtrackproperty.cpp b/src/widget/wtrackproperty.cpp index 42742c9cf2..f2c6179046 100644 --- a/src/widget/wtrackproperty.cpp +++ b/src/widget/wtrackproperty.cpp @@ -7,7 +7,7 @@ #include "util/dnd.h" namespace { -const WTrackMenu::Features trackMenuFeatures = +const WTrackMenu::Features kTrackMenuFeatures = WTrackMenu::Feature::Playlist | WTrackMenu::Feature::Crate | WTrackMenu::Feature::Metadata | @@ -26,7 +26,7 @@ WTrackProperty::WTrackProperty(QWidget* pParent, m_pGroup(group), m_pConfig(pConfig), m_pTrackMenu(make_parented<WTrackMenu>( - this, pConfig, pTrackCollectionManager, trackMenuFeatures)) { + this, pConfig, pTrackCollectionManager, kTrackMenuFeatures)) { setAcceptDrops(true); } @@ -77,21 +77,22 @@ void WTrackProperty::updateLabel() { setText(""); } -void WTrackProperty::mouseMoveEvent(QMouseEvent *event) { +void WTrackProperty::mouseMoveEvent(QMouseEvent* event) { if ((event->buttons() & Qt::LeftButton) && m_pCurrentTrack) { DragAndDropHelper::dragTrack(m_pCurrentTrack, this, m_pGroup); } } -void WTrackProperty::dragEnterEvent(QDragEnterEvent *event) { +void WTrackProperty::dragEnterEvent(QDragEnterEvent* event) { DragAndDropHelper::handleTrackDragEnterEvent(event, m_pGroup, m_pConfig); } -void WTrackProperty::dropEvent(QDropEvent *event) { +void WTrackProperty::dropEvent(QDropEvent* event) { DragAndDropHelper::handleTrackDropEvent(event, *this, m_pGroup, m_pConfig); } -void WTrackProperty::contextMenuEvent(QContextMenuEvent *event) { +void WTrackProperty::contextMenuEvent(QContextMenuEvent* event) { + event->accept(); if (m_pCurrentTrack) { m_pTrackMenu->loadTrack(m_pCurrentTrack); // Create the right-click menu diff --git a/src/widget/wtrackproperty.h b/src/widget/wtrackproperty.h index 138026d758..acfc8e941d 100644 --- a/src/widget/wtrackproperty.h +++ b/src/widget/wtrackproperty.h @@ -34,9 +34,11 @@ signals: void slotTrackLoaded(TrackPointer track); void slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack); + protected: + void contextMenuEvent(QContextMenuEvent* event) override; + private slots: void slotTrackChanged(TrackId); - void contextMenuEvent(QContextMenuEvent* event) override; private: void dragEnterEvent(QDragEnterEvent *event) override; diff --git a/src/widget/wtracktableview.cpp b/src/widget/wtracktableview.cpp index 057b312932..73e66ef048 100644 --- a/src/widget/wtracktableview.cpp +++ b/src/widget/wtracktableview.cpp @@ -431,6 +431,7 @@ void WTrackTableView::contextMenuEvent(QContextMenuEvent* event) { VERIFY_OR_DEBUG_ASSERT(m_pTrackMenu.get()) { initTrackMenu(); } + event->accept(); // Update track indices in context menu QModelIndexList indices = selectionModel()->selectedRows(); m_pTrackMenu->loadTrackModelIndices(indices); diff --git a/src/widget/wtracktext.cpp b/src/widget/wtracktext.cpp index dc33643313..d92c02a4ce 100644 --- a/src/widget/wtracktext.cpp +++ b/src/widget/wtracktext.cpp @@ -84,6 +84,7 @@ void WTrackText::dropEvent(QDropEvent *event) { } void WTrackText::contextMenuEvent(QContextMenuEvent* event) { + event->accept(); if (m_pCurrentTrack) { m_pTrackMenu->loadTrack(m_pCurrentTrack); // Create the right-click menu diff --git a/src/widget/wtracktext.h b/src/widget/wtracktext.h index 81f7b77c56..419de54358 100644 --- a/src/widget/wtracktext.h +++ b/src/widget/wtracktext.h @@ -31,9 +31,11 @@ class WTrackText : public WLabel, public TrackDropTarget { void slotTrackLoaded(TrackPointer track); void slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack); + protected: + void contextMenuEvent(QContextMenuEvent* event) override; + private slots: void slotTrackChanged(TrackId); - void contextMenuEvent(QContextMenuEvent* event) override; private: void dragEnterEvent(QDragEnterEvent *event) override; diff --git a/src/widget/wtrackwidgetgroup.cpp b/src/widget/wtrackwidgetgroup.cpp index 50aeb68aaa..644d3d6540 100644 --- a/src/widget/wtrackwidgetgroup.cpp +++ b/src/widget/wtrackwidgetgroup.cpp @@ -6,16 +6,31 @@ #include <QUrl> #include "control/controlobject.h" +#include "widget/wtrackmenu.h" namespace { int kDefaultTrackColorAplha = 255; +const WTrackMenu::Features kTrackMenuFeatures = + WTrackMenu::Feature::Playlist | + WTrackMenu::Feature::Crate | + WTrackMenu::Feature::Metadata | + WTrackMenu::Feature::Reset | + WTrackMenu::Feature::BPM | + WTrackMenu::Feature::Color | + WTrackMenu::Feature::FileBrowser | + WTrackMenu::Feature::Properties; + } // anonymous namespace -WTrackWidgetGroup::WTrackWidgetGroup(QWidget* pParent) +WTrackWidgetGroup::WTrackWidgetGroup(QWidget* pParent, + UserSettingsPointer pConfig, + TrackCollectionManager* pTrackCollectionManager) : WWidgetGroup(pParent), - m_trackColorAlpha(kDefaultTrackColorAplha) { + m_trackColorAlpha(kDefaultTrackColorAplha), + m_pTrackMenu(make_parented<WTrackMenu>( + this, pConfig, pTrackCollectionManager, kTrackMenuFeatures)) { } void WTrackWidgetGroup::setup(const QDomNode& node, const SkinContext& context) { @@ -76,3 +91,12 @@ void WTrackWidgetGroup::paintEvent(QPaintEvent* pe) { p.fillRect(rect(), QBrush(m_trackColor)); } } + +void WTrackWidgetGroup::contextMenuEvent(QContextMenuEvent* event) { + event->accept(); + if (m_pCurrentTrack) { + m_pTrackMenu->loadTrack(m_pCurrentTrack); + // Create the right-click menu + m_pTrackMenu->popup(event->globalPos()); + } +} diff --git a/src/widget/wtrackwidgetgroup.h b/src/widget/wtrackwidgetgroup.h index 4f1d5573c6..b8c5dc3c52 100644 --- a/src/widget/wtrackwidgetgroup.h +++ b/src/widget/wtrackwidgetgroup.h @@ -2,12 +2,18 @@ #include "skin/skincontext.h" #include "track/track.h" +#include "util/parented_ptr.h" #include "widget/wwidgetgroup.h" +class WTrackMenu; +class TrackCollectionManager; + class WTrackWidgetGroup : public WWidgetGroup { Q_OBJECT public: - WTrackWidgetGroup(QWidget* pParent); + WTrackWidgetGroup(QWidget* pParent, + UserSettingsPointer pConfig, + TrackCollectionManager* pTrackCollectionManager); void setup(const QDomNode& node, const SkinContext& context) override; public slots: @@ -16,6 +22,7 @@ class WTrackWidgetGroup : public WWidgetGroup { protected: void paintEvent(QPaintEvent* pe) override; + void contextMenuEvent(QContextMenuEvent* event) override; private slots: void slotTrackChanged(TrackId); @@ -26,4 +33,6 @@ class WTrackWidgetGroup : public WWidgetGroup { TrackPointer m_pCurrentTrack; QColor m_trackColor; int m_trackColorAlpha; + + const parented_ptr<WTrackMenu> m_pTrackMenu; }; |