diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | build/depends.py | 1 | ||||
-rw-r--r-- | res/skins/Deere/hotcue_button.xml | 7 | ||||
-rw-r--r-- | res/skins/LateNight/button_hotcue.xml | 7 | ||||
-rw-r--r-- | res/skins/Shade/hotcue_button.xml | 6 | ||||
-rw-r--r-- | res/skins/Tango/button_hotcue_deck.xml | 6 | ||||
-rw-r--r-- | res/skins/Tango/button_hotcue_sam_pre.xml | 6 | ||||
-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 |
13 files changed, 157 insertions, 50 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 7959253ab4..e581293c3d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -680,6 +680,7 @@ add_library(mixxx-lib STATIC EXCLUDE_FROM_ALL src/widget/weffectparameterknobcomposed.cpp src/widget/weffectpushbutton.cpp src/widget/weffectselector.cpp + src/widget/whotcuebutton.cpp src/widget/wimagestore.cpp src/widget/wkey.cpp src/widget/wknob.cpp diff --git a/build/depends.py b/build/depends.py index e13d2df5b3..eee9463315 100644 --- a/build/depends.py +++ b/build/depends.py @@ -960,6 +960,7 @@ class MixxxCore(Feature): "src/widget/wvumeter.cpp", "src/widget/wpushbutton.cpp", "src/widget/weffectpushbutton.cpp", + "src/widget/whotcuebutton.cpp", "src/widget/wslidercomposed.cpp", "src/widget/wstatuslight.cpp", "src/widget/woverview.cpp", diff --git a/res/skins/Deere/hotcue_button.xml b/res/skins/Deere/hotcue_button.xml index 2712d6eb0f..247351615b 100644 --- a/res/skins/Deere/hotcue_button.xml +++ b/res/skins/Deere/hotcue_button.xml @@ -8,13 +8,16 @@ SmallSquareButtonSize: the button size --> <Template> - <PushButton> + <HotcueButton> <TooltipId>hotcue</TooltipId> <ObjectName>HotcueButton</ObjectName> <MinimumSize>18,22</MinimumSize> <MaximumSize>22,22</MaximumSize> <SizePolicy>me,f</SizePolicy> <NumberStates>2</NumberStates> + <Group><Variable name="group"/></Group> + <Hotcue><Variable name="hotcue"/></Hotcue> + <LeftClickIsPushButton><Variable name="LeftClickIsPushButton"/></LeftClickIsPushButton> <RightClickIsPushButton><Variable name="RightClickIsPushButton"/></RightClickIsPushButton> <State> @@ -49,5 +52,5 @@ <ConfigKey><Variable name="group"/>,hotcue_<Variable name="hotcue"/>_color</ConfigKey> <BindProperty>backgroundColorRgba</BindProperty> </Connection> - </PushButton> + </HotcueButton> </Template> diff --git a/res/skins/LateNight/button_hotcue.xml b/res/skins/LateNight/button_hotcue.xml index 920ffc05d3..05afcc6b23 100644 --- a/res/skins/LateNight/button_hotcue.xml +++ b/res/skins/LateNight/button_hotcue.xml @@ -7,13 +7,16 @@ <SizePolicy>me,f</SizePolicy> <Layout>horizontal</Layout> <Children> - <PushButton> + <HotcueButton> <TooltipId>hotcue</TooltipId> <ObjectName>HotcueButton</ObjectName> <MinimumSize>26,26</MinimumSize> <MaximumSize>26,26</MaximumSize> <SizePolicy>me,f</SizePolicy> <NumberStates>2</NumberStates> + <Group><Variable name="group"/></Group> + <Hotcue><Variable name="number"/></Hotcue> + <State> <Number>0</Number> <Unpressed scalemode="STRETCH">skin:/buttons_<Variable name="btn_scheme"/>/btn_<Variable name="btn_type"/>_square.svg</Unpressed> @@ -40,7 +43,7 @@ <ConfigKey><Variable name="group"/>,hotcue_<Variable name="number"/>_color</ConfigKey> <BindProperty>backgroundColorRgba</BindProperty> </Connection> - </PushButton> + </HotcueButton> </Children> </WidgetGroup> </Template> diff --git a/res/skins/Shade/hotcue_button.xml b/res/skins/Shade/hotcue_button.xml index 40149e41b8..a12d94bd8b 100644 --- a/res/skins/Shade/hotcue_button.xml +++ b/res/skins/Shade/hotcue_button.xml @@ -1,9 +1,11 @@ <Template> - <PushButton> + <HotcueButton> <TooltipId>hotcue</TooltipId> <ObjectName>HotcueButton</ObjectName> <Pos><Variable name="pos"/></Pos> <NumberStates>2</NumberStates> + <Group><Variable name="group"/></Group> + <Hotcue><Variable name="hotcue"/></Hotcue> <State> <Number>0</Number> <Pressed>skin:/btn/btn_hotcue_<Variable name="hotcue"/>.png</Pressed> @@ -30,5 +32,5 @@ <ConfigKey><Variable name="group"/>,hotcue_<Variable name="hotcue"/>_color</ConfigKey> <BindProperty>backgroundColorRgba</BindProperty> </Connection> - </PushButton> + </HotcueButton> </Template> diff --git a/res/skins/Tango/button_hotcue_deck.xml b/res/skins/Tango/button_hotcue_deck.xml index eb0785f234..6627b1e062 100644 --- a/res/skins/Tango/button_hotcue_deck.xml +++ b/res/skins/Tango/button_hotcue_deck.xml @@ -8,13 +8,15 @@ Variables: HotCue: hotcue number --> <Template> - <PushButton> + <HotcueButton> <TooltipId>hotcue</TooltipId> <ObjectName>HotcueButton</ObjectName> <MinimumSize>15,24</MinimumSize> <MaximumSize>23,24</MaximumSize> <SizePolicy>me,f</SizePolicy> <NumberStates>2</NumberStates> + <Group><Variable name="group"/></Group> + <Hotcue><Variable name="HotCue"/></Hotcue> <State> <Number>0</Number> <Text><Variable name="HotCue"/></Text> @@ -41,5 +43,5 @@ Variables: <ConfigKey><Variable name="group"/>,hotcue_<Variable name="HotCue"/>_color</ConfigKey> <BindProperty>backgroundColorRgba</BindProperty> </Connection> - </PushButton> + </HotcueButton> </Template> diff --git a/res/skins/Tango/button_hotcue_sam_pre.xml b/res/skins/Tango/button_hotcue_sam_pre.xml index 5f13a21662..214612e669 100644 --- a/res/skins/Tango/button_hotcue_sam_pre.xml +++ b/res/skins/Tango/button_hotcue_sam_pre.xml @@ -9,13 +9,15 @@ Variables: HotCue: hotcue number --> <Template> - <PushButton> + <HotcueButton> <TooltipId>hotcue</TooltipId> <ObjectName>HotcueButton</ObjectName> <MinimumSize>14,18</MinimumSize> <MaximumSize>20,18</MaximumSize> <SizePolicy>me,f</SizePolicy> <NumberStates>2</NumberStates> + <Group><Variable name="group"/></Group> + <Hotcue><Variable name="HotCue"/></Hotcue> <State> <Number>0</Number> <Text><Variable name="HotCue"/></Text> @@ -38,5 +40,5 @@ Variables: <ConfigKey><Variable name="group"/>,hotcue_<Variable name="HotCue"/>_enabled</ConfigKey> <ConnectValueFromWidget>false</ConnectValueFromWidget> </Connection> - </PushButton> + </HotcueButton> </Template> 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; |