summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@mixxx.org>2020-03-15 17:20:01 +0100
committerDaniel Schürmann <daschuer@mixxx.org>2020-03-17 23:51:27 +0100
commitd13f3ab486125b3ddbce8926f2330cf83e795468 (patch)
tree2698b225b533b009e0cf4609f5670628d5604b12 /src
parent7ece3ef9525a0957178d04b3923964d41c0051f6 (diff)
Added WHotcueButton featuring a right click context menu
Diffstat (limited to 'src')
-rw-r--r--src/skin/legacyskinparser.cpp79
-rw-r--r--src/skin/skincontext.h4
-rw-r--r--src/widget/whotcuebutton.cpp59
-rw-r--r--src/widget/whotcuebutton.h26
-rw-r--r--src/widget/woverview.cpp2
-rw-r--r--src/widget/woverview.h3
6 files changed, 133 insertions, 40 deletions
diff --git a/src/skin/legacyskinparser.cpp b/src/skin/legacyskinparser.cpp
index 19ee2fc857..30cd1c3ae7 100644
--- a/src/skin/legacyskinparser.cpp
+++ b/src/skin/legacyskinparser.cpp
@@ -32,59 +32,60 @@
#include "recording/recordingmanager.h"
+#include "util/cmdlineargs.h"
+#include "util/timer.h"
+#include "util/valuetransformer.h"
+#include "waveform/waveformwidgetfactory.h"
#include "widget/controlwidgetconnection.h"
#include "widget/wbasewidget.h"
+#include "widget/wbattery.h"
+#include "widget/wbeatspinbox.h"
+#include "widget/wcombobox.h"
#include "widget/wcoverart.h"
-#include "widget/wwidget.h"
+#include "widget/wdisplay.h"
+#include "widget/weffect.h"
+#include "widget/weffectbuttonparameter.h"
+#include "widget/weffectchain.h"
+#include "widget/weffectparameter.h"
+#include "widget/weffectparameterbase.h"
+#include "widget/weffectparameterknob.h"
+#include "widget/weffectparameterknobcomposed.h"
+#include "widget/weffectpushbutton.h"
+#include "widget/weffectselector.h"
+#include "widget/whotcuebutton.h"
+#include "widget/wkey.h"
#include "widget/wknob.h"
#include "widget/wknobcomposed.h"
-#include "widget/wslidercomposed.h"
-#include "widget/wpushbutton.h"
-#include "widget/weffectpushbutton.h"
-#include "widget/wdisplay.h"
-#include "widget/wvumeter.h"
-#include "widget/wstatuslight.h"
#include "widget/wlabel.h"
-#include "widget/wtime.h"
-#include "widget/wrecordingduration.h"
-#include "widget/wtracktext.h"
-#include "widget/wtrackproperty.h"
-#include "widget/wstarrating.h"
+#include "widget/wlibrary.h"
+#include "widget/wlibrarysidebar.h"
#include "widget/wnumber.h"
#include "widget/wnumberdb.h"
#include "widget/wnumberpos.h"
#include "widget/wnumberrate.h"
-#include "widget/weffectchain.h"
-#include "widget/weffect.h"
-#include "widget/weffectselector.h"
-#include "widget/weffectparameter.h"
-#include "widget/weffectparameterknob.h"
-#include "widget/weffectparameterknobcomposed.h"
-#include "widget/weffectbuttonparameter.h"
-#include "widget/weffectparameterbase.h"
-#include "widget/wbeatspinbox.h"
-#include "widget/woverviewlmh.h"
#include "widget/woverviewhsv.h"
+#include "widget/woverviewlmh.h"
#include "widget/woverviewrgb.h"
-#include "widget/wspinny.h"
-#include "widget/wwaveformviewer.h"
-#include "waveform/waveformwidgetfactory.h"
-#include "widget/wsearchlineedit.h"
-#include "widget/wlibrary.h"
-#include "widget/wlibrarysidebar.h"
-#include "widget/wskincolor.h"
#include "widget/wpixmapstore.h"
-#include "widget/wwidgetstack.h"
+#include "widget/wpushbutton.h"
+#include "widget/wrecordingduration.h"
+#include "widget/wsearchlineedit.h"
+#include "widget/wsingletoncontainer.h"
#include "widget/wsizeawarestack.h"
-#include "widget/wwidgetgroup.h"
-#include "widget/wkey.h"
-#include "widget/wbattery.h"
-#include "widget/wcombobox.h"
+#include "widget/wskincolor.h"
+#include "widget/wslidercomposed.h"
+#include "widget/wspinny.h"
#include "widget/wsplitter.h"
-#include "widget/wsingletoncontainer.h"
-#include "util/valuetransformer.h"
-#include "util/cmdlineargs.h"
-#include "util/timer.h"
+#include "widget/wstarrating.h"
+#include "widget/wstatuslight.h"
+#include "widget/wtime.h"
+#include "widget/wtrackproperty.h"
+#include "widget/wtracktext.h"
+#include "widget/wvumeter.h"
+#include "widget/wwaveformviewer.h"
+#include "widget/wwidget.h"
+#include "widget/wwidgetgroup.h"
+#include "widget/wwidgetstack.h"
using mixxx::skin::SkinManifest;
@@ -505,6 +506,8 @@ QList<QWidget*> LegacySkinParser::parseNode(const QDomElement& node) {
result = wrapWidget(parseStandardWidget<WPushButton>(node));
} else if (nodeName == "EffectPushButton") {
result = wrapWidget(parseEffectPushButton(node));
+ } else if (nodeName == "HotcueButton") {
+ result = wrapWidget(parseStandardWidget<WHotcueButton>(node));
} else if (nodeName == "ComboBox") {
result = wrapWidget(parseStandardWidget<WComboBox>(node));
} else if (nodeName == "Overview") {
diff --git a/src/skin/skincontext.h b/src/skin/skincontext.h
index 8898b337f3..2095e26dca 100644
--- a/src/skin/skincontext.h
+++ b/src/skin/skincontext.h
@@ -257,6 +257,10 @@ class SkinContext {
return m_scaleFactor;
}
+ UserSettingsPointer getConfig() const {
+ return m_pConfig;
+ }
+
private:
PixmapSource getPixmapSourceInner(const QString& filename) const;
diff --git a/src/widget/whotcuebutton.cpp b/src/widget/whotcuebutton.cpp
new file mode 100644
index 0000000000..de177abfe3
--- /dev/null
+++ b/src/widget/whotcuebutton.cpp
@@ -0,0 +1,59 @@
+#include "widget/whotcuebutton.h"
+
+#include <QtDebug>
+#include "mixer/playerinfo.h"
+
+WHotcueButton::WHotcueButton(QWidget* pParent)
+ : WPushButton(pParent),
+ m_hotcue(Cue::kNoHotCue) {
+}
+
+void WHotcueButton::setup(const QDomNode& node, const SkinContext& context) {
+ // Setup parent class.
+ WPushButton::setup(node, context);
+
+ m_group = context.selectString(node, "Group");
+ bool ok;
+ int hotcue = context.selectString(node, "Hotcue").toInt(&ok);
+ if (ok && hotcue > 0) {
+ m_hotcue = hotcue - 1;
+ }
+
+ m_pCueMenuPopup = make_parented<WCueMenuPopup>(context.getConfig(), this);
+ ColorPaletteSettings colorPaletteSettings(context.getConfig());
+ auto colorPalette = colorPaletteSettings.getHotcueColorPalette();
+ m_pCueMenuPopup->setColorPalette(colorPalette);
+
+ setFocusPolicy(Qt::NoFocus);
+}
+
+void WHotcueButton::mousePressEvent(QMouseEvent* e) {
+ const bool rightClick = e->button() == Qt::RightButton;
+ if (rightClick) {
+ if (readDisplayValue() == 1) {
+ // hot cue is set
+ TrackPointer pTrack = PlayerInfo::instance().getTrackInfo(m_group);
+ if (!pTrack) {
+ return;
+ }
+
+ CuePointer pHotCue;
+ QList<CuePointer> cueList = pTrack->getCuePoints();
+ for (const auto& pCue : cueList) {
+ if (pCue->getHotCue() == m_hotcue) {
+ pHotCue = pCue;
+ break;
+ }
+ }
+ if (!pHotCue) {
+ return;
+ }
+ m_pCueMenuPopup->setTrackAndCue(pTrack, pHotCue);
+ m_pCueMenuPopup->popup(e->globalPos());
+ }
+ return;
+ }
+
+ // Pass all other press events to the base class.
+ WPushButton::mousePressEvent(e);
+}
diff --git a/src/widget/whotcuebutton.h b/src/widget/whotcuebutton.h
new file mode 100644
index 0000000000..0f2d81b176
--- /dev/null
+++ b/src/widget/whotcuebutton.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#include <QDomNode>
+#include <QMouseEvent>
+#include <QWidget>
+
+#include "skin/skincontext.h"
+#include "util/parented_ptr.h"
+#include "widget/wcuemenupopup.h"
+#include "widget/wpushbutton.h"
+
+class WHotcueButton : public WPushButton {
+ Q_OBJECT
+ public:
+ WHotcueButton(QWidget* pParent);
+
+ void setup(const QDomNode& node, const SkinContext& context) override;
+
+ protected:
+ void mousePressEvent(QMouseEvent* e) override;
+
+ private:
+ QString m_group;
+ int m_hotcue;
+ parented_ptr<WCueMenuPopup> m_pCueMenuPopup;
+};
diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp
index 4fb65c6fbf..a6475491f7 100644
--- a/src/widget/woverview.cpp
+++ b/src/widget/woverview.cpp
@@ -54,7 +54,7 @@ WOverview::WOverview(
m_group(group),
m_pConfig(pConfig),
m_endOfTrack(false),
- m_pCueMenuPopup(std::make_unique<WCueMenuPopup>(pConfig, this)),
+ m_pCueMenuPopup(make_parented<WCueMenuPopup>(pConfig, this)),
m_bShowCueTimes(true),
m_iPosSeconds(0),
m_bLeftClickDragging(false),
diff --git a/src/widget/woverview.h b/src/widget/woverview.h
index 25ce680bd1..a3e6a93d44 100644
--- a/src/widget/woverview.h
+++ b/src/widget/woverview.h
@@ -25,6 +25,7 @@
#include "widget/wwidget.h"
#include "util/color/color.h"
+#include "util/parented_ptr.h"
#include "waveform/renderers/waveformsignalcolors.h"
#include "waveform/renderers/waveformmarkset.h"
@@ -141,7 +142,7 @@ class WOverview : public WWidget, public TrackDropTarget {
TrackPointer m_pCurrentTrack;
ConstWaveformPointer m_pWaveform;
- std::unique_ptr<WCueMenuPopup> m_pCueMenuPopup;
+ parented_ptr<WCueMenuPopup> m_pCueMenuPopup;
bool m_bShowCueTimes;
int m_iPosSeconds;