diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/skin/legacyskinparser.cpp | 79 | ||||
-rw-r--r-- | src/skin/skincontext.h | 4 | ||||
-rw-r--r-- | src/widget/whotcuebutton.cpp | 59 | ||||
-rw-r--r-- | src/widget/whotcuebutton.h | 26 | ||||
-rw-r--r-- | src/widget/woverview.cpp | 2 | ||||
-rw-r--r-- | src/widget/woverview.h | 3 |
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; |