summaryrefslogtreecommitdiffstats
path: root/src/widget
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-08-16 15:47:34 +0200
committerJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-08-16 15:47:34 +0200
commitc85d1bf6153c1b10e4dd8277781e524ff7a87f5b (patch)
treea8af17b78a6bf1610c73409610749bda21876ce0 /src/widget
parentd44c98793395412cff947a57232fdad16967a626 (diff)
parentabf8134bc63cf74c7e9757ee648a21d80b213fe0 (diff)
Merge branch '2.3' of github.com:mixxxdj/mixxx into master
Diffstat (limited to 'src/widget')
-rw-r--r--src/widget/wcoverart.cpp16
-rw-r--r--src/widget/wcoverart.h5
-rw-r--r--src/widget/wcoverartlabel.cpp17
-rw-r--r--src/widget/wcoverartlabel.h1
-rw-r--r--src/widget/wtrackproperty.cpp32
-rw-r--r--src/widget/wtrackproperty.h6
-rw-r--r--src/widget/wtracktableview.cpp1
-rw-r--r--src/widget/wtracktext.cpp20
-rw-r--r--src/widget/wtracktext.h4
-rw-r--r--src/widget/wtrackwidgetgroup.cpp126
-rw-r--r--src/widget/wtrackwidgetgroup.h51
11 files changed, 238 insertions, 41 deletions
diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp
index bc435cc3f7..6d42242017 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);
@@ -266,7 +272,7 @@ void WCoverArt::mouseReleaseEvent(QMouseEvent* event) {
}
void WCoverArt::mouseMoveEvent(QMouseEvent* event) {
- if ((event->buttons() & Qt::LeftButton) && m_loadedTrack) {
+ if ((event->buttons().testFlag(Qt::LeftButton)) && m_loadedTrack) {
DragAndDropHelper::dragTrack(m_loadedTrack, this, m_group);
}
}
diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h
index 35dcbc51d4..f4c3b4cf4f 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 c7098b20f5..b923f78974 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),
@@ -64,6 +62,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 cf96c79721..8b7d5d4884 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 |
@@ -27,7 +27,7 @@ WTrackProperty::WTrackProperty(
m_group(group),
m_pConfig(pConfig),
m_pTrackMenu(make_parented<WTrackMenu>(
- this, pConfig, pTrackCollectionManager, trackMenuFeatures)) {
+ this, pConfig, pTrackCollectionManager, kTrackMenuFeatures)) {
setAcceptDrops(true);
}
@@ -41,15 +41,16 @@ void WTrackProperty::setup(const QDomNode& node, const SkinContext& context) {
m_property = context.selectString(node, "Property");
}
-void WTrackProperty::slotTrackLoaded(TrackPointer track) {
- if (track) {
- m_pCurrentTrack = track;
- connect(track.get(),
- &Track::changed,
- this,
- &WTrackProperty::slotTrackChanged);
- updateLabel();
+void WTrackProperty::slotTrackLoaded(TrackPointer pTrack) {
+ if (!pTrack) {
+ return;
}
+ m_pCurrentTrack = pTrack;
+ connect(pTrack.get(),
+ &Track::changed,
+ this,
+ &WTrackProperty::slotTrackChanged);
+ updateLabel();
}
void WTrackProperty::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack) {
@@ -78,8 +79,8 @@ void WTrackProperty::updateLabel() {
setText("");
}
-void WTrackProperty::mouseMoveEvent(QMouseEvent *event) {
- if ((event->buttons() & Qt::LeftButton) && m_pCurrentTrack) {
+void WTrackProperty::mouseMoveEvent(QMouseEvent* event) {
+ if (event->buttons().testFlag(Qt::LeftButton) && m_pCurrentTrack) {
DragAndDropHelper::dragTrack(m_pCurrentTrack, this, m_group);
}
}
@@ -91,15 +92,16 @@ void WTrackProperty::mouseDoubleClickEvent(QMouseEvent* event) {
}
}
-void WTrackProperty::dragEnterEvent(QDragEnterEvent *event) {
+void WTrackProperty::dragEnterEvent(QDragEnterEvent* event) {
DragAndDropHelper::handleTrackDragEnterEvent(event, m_group, m_pConfig);
}
-void WTrackProperty::dropEvent(QDropEvent *event) {
+void WTrackProperty::dropEvent(QDropEvent* event) {
DragAndDropHelper::handleTrackDropEvent(event, *this, m_group, 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 487dde81ed..75e14b36f7 100644
--- a/src/widget/wtrackproperty.h
+++ b/src/widget/wtrackproperty.h
@@ -31,12 +31,14 @@ signals:
void cloneDeck(QString source_group, QString target_group) override;
public slots:
- void slotTrackLoaded(TrackPointer track);
+ void slotTrackLoaded(TrackPointer pTrack);
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 da1f43bfb8..7111b7319c 100644
--- a/src/widget/wtracktableview.cpp
+++ b/src/widget/wtracktableview.cpp
@@ -430,6 +430,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 4c3c838760..24875a1295 100644
--- a/src/widget/wtracktext.cpp
+++ b/src/widget/wtracktext.cpp
@@ -35,15 +35,16 @@ WTrackText::~WTrackText() {
// Required to allow forward declaration of WTrackMenu in header
}
-void WTrackText::slotTrackLoaded(TrackPointer track) {
- if (track) {
- m_pCurrentTrack = track;
- connect(track.get(),
- &Track::changed,
- this,
- &WTrackText::slotTrackChanged);
- updateLabel();
+void WTrackText::slotTrackLoaded(TrackPointer pTrack) {
+ if (!pTrack) {
+ return;
}
+ m_pCurrentTrack = pTrack;
+ connect(pTrack.get(),
+ &Track::changed,
+ this,
+ &WTrackText::slotTrackChanged);
+ updateLabel();
}
void WTrackText::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack) {
@@ -70,7 +71,7 @@ void WTrackText::updateLabel() {
}
void WTrackText::mouseMoveEvent(QMouseEvent *event) {
- if ((event->buttons() & Qt::LeftButton) && m_pCurrentTrack) {
+ if (event->buttons().testFlag(Qt::LeftButton) && m_pCurrentTrack) {
DragAndDropHelper::dragTrack(m_pCurrentTrack, this, m_group);
}
}
@@ -92,6 +93,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 e5a24d4dae..30a5e94304 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
new file mode 100644
index 0000000000..c721059e85
--- /dev/null
+++ b/src/widget/wtrackwidgetgroup.cpp
@@ -0,0 +1,126 @@
+
+#include "widget/wtrackwidgetgroup.h"
+
+#include <QDebug>
+#include <QStylePainter>
+#include <QUrl>
+
+#include "control/controlobject.h"
+#include "util/dnd.h"
+#include "widget/wtrackmenu.h"
+
+namespace {
+
+constexpr int kDefaultTrackColorAlpha = 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,
+ UserSettingsPointer pConfig,
+ TrackCollectionManager* pTrackCollectionManager,
+ const QString& group)
+ : WWidgetGroup(pParent),
+ m_group(group),
+ m_pConfig(pConfig),
+ m_trackColorAlpha(kDefaultTrackColorAlpha),
+ m_pTrackMenu(make_parented<WTrackMenu>(
+ this, pConfig, pTrackCollectionManager, kTrackMenuFeatures)) {
+ setAcceptDrops(true);
+}
+
+WTrackWidgetGroup::~WTrackWidgetGroup() = default;
+
+void WTrackWidgetGroup::setup(const QDomNode& node, const SkinContext& context) {
+ WWidgetGroup::setup(node, context);
+
+ bool ok = false;
+ int trackColorAlpha = context.selectInt(
+ node,
+ QStringLiteral("TrackColorAlpha"),
+ &ok);
+ if (ok && trackColorAlpha >= 0 && trackColorAlpha <= 255) {
+ m_trackColorAlpha = trackColorAlpha;
+ }
+}
+
+void WTrackWidgetGroup::slotTrackLoaded(TrackPointer pTrack) {
+ if (!pTrack) {
+ return;
+ }
+ m_pCurrentTrack = pTrack;
+ connect(pTrack.get(),
+ &Track::changed,
+ this,
+ &WTrackWidgetGroup::slotTrackChanged);
+ updateColor();
+}
+
+void WTrackWidgetGroup::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack) {
+ Q_UNUSED(pNewTrack);
+ Q_UNUSED(pOldTrack);
+ if (m_pCurrentTrack) {
+ disconnect(m_pCurrentTrack.get(), nullptr, this, nullptr);
+ }
+ m_pCurrentTrack.reset();
+ updateColor();
+}
+
+void WTrackWidgetGroup::slotTrackChanged(TrackId trackId) {
+ Q_UNUSED(trackId);
+ updateColor();
+}
+
+void WTrackWidgetGroup::updateColor() {
+ if (m_pCurrentTrack) {
+ m_trackColor = mixxx::RgbColor::toQColor(m_pCurrentTrack->getColor());
+ if (m_trackColor.isValid()) {
+ m_trackColor.setAlpha(m_trackColorAlpha);
+ }
+ } else {
+ m_trackColor = QColor();
+ }
+ update();
+}
+
+void WTrackWidgetGroup::paintEvent(QPaintEvent* pe) {
+ WWidgetGroup::paintEvent(pe);
+
+ if (m_trackColor.isValid()) {
+ QStylePainter p(this);
+
+ p.fillRect(rect(), QBrush(m_trackColor));
+ }
+}
+
+void WTrackWidgetGroup::mouseMoveEvent(QMouseEvent* event) {
+ if (event->buttons().testFlag(Qt::LeftButton) && m_pCurrentTrack) {
+ DragAndDropHelper::dragTrack(m_pCurrentTrack, this, m_group);
+ }
+}
+
+void WTrackWidgetGroup::dragEnterEvent(QDragEnterEvent* event) {
+ DragAndDropHelper::handleTrackDragEnterEvent(event, m_group, m_pConfig);
+}
+
+void WTrackWidgetGroup::dropEvent(QDropEvent* event) {
+ DragAndDropHelper::handleTrackDropEvent(event, *this, m_group, m_pConfig);
+}
+
+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
new file mode 100644
index 0000000000..bfd5f6046e
--- /dev/null
+++ b/src/widget/wtrackwidgetgroup.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "skin/skincontext.h"
+#include "track/track.h"
+#include "util/parented_ptr.h"
+#include "widget/trackdroptarget.h"
+#include "widget/wwidgetgroup.h"
+
+class WTrackMenu;
+class TrackCollectionManager;
+
+class WTrackWidgetGroup : public WWidgetGroup, public TrackDropTarget {
+ Q_OBJECT
+ public:
+ WTrackWidgetGroup(QWidget* pParent,
+ UserSettingsPointer pConfig,
+ TrackCollectionManager* pTrackCollectionManager,
+ const QString& group);
+ ~WTrackWidgetGroup() override;
+ void setup(const QDomNode& node, const SkinContext& context) override;
+
+ signals:
+ void trackDropped(QString fileName, QString group) override;
+ void cloneDeck(QString source_group, QString target_group) override;
+
+ public slots:
+ void slotTrackLoaded(TrackPointer pTrack);
+ void slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack);
+
+ protected:
+ void paintEvent(QPaintEvent* pe) override;
+ void contextMenuEvent(QContextMenuEvent* event) override;
+
+ private slots:
+ void slotTrackChanged(TrackId);
+
+ private:
+ void dragEnterEvent(QDragEnterEvent* event) override;
+ void dropEvent(QDropEvent* event) override;
+ void mouseMoveEvent(QMouseEvent* event) override;
+
+ void updateColor();
+
+ const QString m_group;
+ const UserSettingsPointer m_pConfig;
+ TrackPointer m_pCurrentTrack;
+ QColor m_trackColor;
+ int m_trackColorAlpha;
+
+ const parented_ptr<WTrackMenu> m_pTrackMenu;
+};