diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ba00bf9535..8db7cdf3479 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1333,6 +1333,7 @@ set(MIXXX_LIB_PRECOMPILED_HEADER src/control/control.h src/control/controlaudiotaperpot.h src/control/controlbehavior.h + src/control/controlbuttonmode.h src/control/controlcompressingproxy.h src/control/controleffectknob.h src/control/controlencoder.h diff --git a/src/broadcast/broadcastmanager.cpp b/src/broadcast/broadcastmanager.cpp index 0298e596ea4..f3e9e25b6b4 100644 --- a/src/broadcast/broadcastmanager.cpp +++ b/src/broadcast/broadcastmanager.cpp @@ -22,7 +22,7 @@ BroadcastManager::BroadcastManager(SettingsManager* pSettingsManager, const bool persist = true; m_pBroadcastEnabled = new ControlPushButton( ConfigKey(BROADCAST_PREF_KEY,"enabled"), persist); - m_pBroadcastEnabled->setButtonMode(ControlPushButton::TOGGLE); + m_pBroadcastEnabled->setButtonMode(mixxx::control::ButtonMode::Toggle); connect(m_pBroadcastEnabled, &ControlPushButton::valueChanged, this, diff --git a/src/control/control.cpp b/src/control/control.cpp index c6a88b889f1..ef2066baf01 100644 --- a/src/control/control.cpp +++ b/src/control/control.cpp @@ -30,14 +30,14 @@ QWeakPointer s_pDefaultCO; } // namespace ControlDoublePrivate::ControlDoublePrivate() - : m_bPersistInConfiguration(false), - m_bIgnoreNops(true), - m_bTrack(false), - m_trackType(Stat::UNSPECIFIED), + : m_trackType(Stat::UNSPECIFIED), m_trackFlags(Stat::COUNT | Stat::SUM | Stat::AVERAGE | Stat::SAMPLE_VARIANCE | Stat::MIN | Stat::MAX), + m_bTrack(false), // default CO is read only m_confirmRequired(true), + m_bPersistInConfiguration(false), + m_bIgnoreNops(true), m_kbdRepeatable(false) { m_value.setValue(0.0); } @@ -51,13 +51,13 @@ ControlDoublePrivate::ControlDoublePrivate( double defaultValue) : m_key(key), m_pCreatorCO(pCreatorCO), - m_bPersistInConfiguration(bPersist), - m_bIgnoreNops(bIgnoreNops), - m_bTrack(bTrack), m_trackType(Stat::UNSPECIFIED), m_trackFlags(Stat::COUNT | Stat::SUM | Stat::AVERAGE | Stat::SAMPLE_VARIANCE | Stat::MIN | Stat::MAX), + m_bTrack(bTrack), m_confirmRequired(false), + m_bPersistInConfiguration(bPersist), + m_bIgnoreNops(bIgnoreNops), m_kbdRepeatable(false) { initialize(defaultValue); } diff --git a/src/control/control.h b/src/control/control.h index a33c4648f1f..ba7da689ca1 100644 --- a/src/control/control.h +++ b/src/control/control.h @@ -183,8 +183,31 @@ class ControlDoublePrivate : public QObject { const ConfigKey m_key; + QSharedPointer m_pBehavior; + + // User-visible, i18n name for what the control is. + QString m_name; + + // User-visible, i18n description for what the control does. + QString m_description; + + // The control value. + ControlValueAtomic m_value; + // The default control value. + ControlValueAtomic m_defaultValue; + QAtomicPointer m_pCreatorCO; + QString m_trackKey; + + // Note: keep the order of the members below to not introduce gaps due to + // memory alignment in this often used class. Whether to track value changes + // with the stats framework. + int m_trackType; + int m_trackFlags; + bool m_bTrack; + bool m_confirmRequired; + // Whether the control should persist in the Mixxx user configuration. The // value is loaded from configuration when the control is created and // written to the configuration when the control is deleted. @@ -193,28 +216,10 @@ class ControlDoublePrivate : public QObject { // Whether to ignore sets which would have no effect. bool m_bIgnoreNops; - // Whether to track value changes with the stats framework. - bool m_bTrack; - QString m_trackKey; - int m_trackType; - int m_trackFlags; - bool m_confirmRequired; - - // User-visible, i18n name for what the control is. - QString m_name; - - // User-visible, i18n description for what the control does. - QString m_description; // If true, this control will be issued repeatedly if the keyboard key is held. bool m_kbdRepeatable; - // The control value. - ControlValueAtomic m_value; - // The default control value. - ControlValueAtomic m_defaultValue; - - QSharedPointer m_pBehavior; }; /// The constant ControlDoublePrivate version is used as dummy for default diff --git a/src/control/controlbehavior.cpp b/src/control/controlbehavior.cpp index c4dbfddb869..33ab059de30 100644 --- a/src/control/controlbehavior.cpp +++ b/src/control/controlbehavior.cpp @@ -342,8 +342,8 @@ double ControlLinSteppedIntPotBehavior::parameterToValue(double dParam) { const int ControlPushButtonBehavior::kPowerWindowTimeMillis = 300; const int ControlPushButtonBehavior::kLongPressLatchingTimeMillis = 300; -ControlPushButtonBehavior::ControlPushButtonBehavior(ButtonMode buttonMode, - int iNumStates) +ControlPushButtonBehavior::ControlPushButtonBehavior(mixxx::control::ButtonMode buttonMode, + int iNumStates) : m_buttonMode(buttonMode), m_iNumStates(iNumStates) { } @@ -364,7 +364,7 @@ void ControlPushButtonBehavior::setValueFromMidi( } // This block makes push-buttons act as power window buttons. - if (m_buttonMode == POWERWINDOW && m_iNumStates == 2) { + if (m_buttonMode == mixxx::control::ButtonMode::PowerWindow && m_iNumStates == 2) { auto* timer = getTimer(); if (pressed) { // Toggle on press @@ -376,7 +376,8 @@ void ControlPushButtonBehavior::setValueFromMidi( // Disable after releasing a long press pControl->set(0., nullptr); } - } else if (m_buttonMode == TOGGLE || m_buttonMode == LONGPRESSLATCHING) { + } else if (m_buttonMode == mixxx::control::ButtonMode::Toggle || + m_buttonMode == mixxx::control::ButtonMode::LongPressLatching) { // This block makes push-buttons act as toggle buttons. if (m_iNumStates > 1) { // multistate button if (pressed) { @@ -387,14 +388,14 @@ void ControlPushButtonBehavior::setValueFromMidi( double value = pControl->get(); value = (int)(value + 1.) % m_iNumStates; pControl->set(value, nullptr); - if (m_buttonMode == LONGPRESSLATCHING) { + if (m_buttonMode == mixxx::control::ButtonMode::LongPressLatching) { auto* timer = getTimer(); timer->setSingleShot(true); timer->start(kLongPressLatchingTimeMillis); } } else { double value = pControl->get(); - if (m_buttonMode == LONGPRESSLATCHING && + if (m_buttonMode == mixxx::control::ButtonMode::LongPressLatching && getTimer()->isActive() && value >= 1.) { // revert toggle if button is released too early value = (int)(value - 1.) % m_iNumStates; diff --git a/src/control/controlbehavior.h b/src/control/controlbehavior.h index 9d87a346c47..52c0c14d173 100644 --- a/src/control/controlbehavior.h +++ b/src/control/controlbehavior.h @@ -1,8 +1,9 @@ #pragma once -#include #include +#include +#include "control/controlbuttonmode.h" #include "controllers/midi/midimessage.h" class ControlDoublePrivate; @@ -130,17 +131,7 @@ class ControlPushButtonBehavior : public ControlNumericBehavior { static const int kPowerWindowTimeMillis; static const int kLongPressLatchingTimeMillis; - // TODO(XXX) Duplicated from ControlPushButton. It's complicated and - // annoying to share them so I just copied them. - enum ButtonMode { - PUSH = 0, - TOGGLE, - POWERWINDOW, - LONGPRESSLATCHING, - TRIGGER - }; - - ControlPushButtonBehavior(ButtonMode buttonMode, int iNumStates); + ControlPushButtonBehavior(mixxx::control::ButtonMode buttonMode, int iNumStates); void setValueFromMidi( MidiOpCode o, double dParam, ControlDoublePrivate* pControl) override; @@ -154,7 +145,7 @@ class ControlPushButtonBehavior : public ControlNumericBehavior { } return m_pushTimer.data(); } - ButtonMode m_buttonMode; + mixxx::control::ButtonMode m_buttonMode; int m_iNumStates; QScopedPointer m_pushTimer; }; diff --git a/src/control/controlbuttonmode.h b/src/control/controlbuttonmode.h new file mode 100644 index 00000000000..8be1210a7b5 --- /dev/null +++ b/src/control/controlbuttonmode.h @@ -0,0 +1,23 @@ +#pragma once + +// required for Qt-Macros +#include + +namespace mixxx { + +namespace control { + +Q_NAMESPACE + +enum class ButtonMode { + Push, + Toggle, + PowerWindow, + LongPressLatching, + Trigger +}; + +Q_ENUM_NS(ButtonMode); + +} // namespace control +} // namespace mixxx diff --git a/src/control/controlmodel.cpp b/src/control/controlmodel.cpp index 142b050d6c3..73d818db4f4 100644 --- a/src/control/controlmodel.cpp +++ b/src/control/controlmodel.cpp @@ -20,6 +20,9 @@ ControlModel::ControlModel(QObject* pParent) QSet controlKeys; + // Reserve memory for m_controls, which will be used later in addControl + m_controls.reserve(controlsList.size()); + for (const QSharedPointer& pControl : controlsList) { if (!pControl) { continue; diff --git a/src/control/controlpushbutton.cpp b/src/control/controlpushbutton.cpp index 1a3b2a1f3b6..a3b44dc265e 100644 --- a/src/control/controlpushbutton.cpp +++ b/src/control/controlpushbutton.cpp @@ -8,39 +8,50 @@ -------- ------------------------------------------------------ */ ControlPushButton::ControlPushButton(const ConfigKey& key, bool bPersist, double defaultValue) : ControlObject(key, false, false, bPersist, defaultValue), - m_buttonMode(PUSH), + m_buttonMode(mixxx::control::ButtonMode::Push), m_iNoStates(2) { - if (m_pControl) { - m_pControl->setBehavior( - new ControlPushButtonBehavior( - static_cast(m_buttonMode), - m_iNoStates)); + updateBehavior(); +} + +ControlPushButton::~ControlPushButton() = default; + +void ControlPushButton::setButtonMode(mixxx::control::ButtonMode mode) { + if (m_buttonMode != mode) { + m_buttonMode = mode; + updateBehavior(); } } -ControlPushButton::~ControlPushButton() { +void ControlPushButton::setStates(int num_states) { + if (m_iNoStates != num_states) { + m_iNoStates = num_states; + updateBehavior(); + } } -// Tell this PushButton how to act on rising and falling edges -void ControlPushButton::setButtonMode(enum ButtonMode mode) { - //qDebug() << "Setting " << m_Key.group << m_Key.item << "as toggle"; - m_buttonMode = mode; +void ControlPushButton::setBehavior(mixxx::control::ButtonMode mode, int num_states) { + bool shouldUpdate = false; + if (m_buttonMode != mode) { + m_buttonMode = mode; + shouldUpdate = true; + } + if (m_iNoStates != num_states) { + m_iNoStates = num_states; + shouldUpdate = true; + } + + // If we would update unconditional, the state would be set always to the default value + if (shouldUpdate) { + updateBehavior(); + } +} +// private +void ControlPushButton::updateBehavior() { if (m_pControl) { m_pControl->setBehavior( new ControlPushButtonBehavior( - static_cast(m_buttonMode), + m_buttonMode, m_iNoStates)); } } - -void ControlPushButton::setStates(int num_states) { - m_iNoStates = num_states; - - if (m_pControl) { - m_pControl->setBehavior( - new ControlPushButtonBehavior( - static_cast(m_buttonMode), - m_iNoStates)); - } -} diff --git a/src/control/controlpushbutton.h b/src/control/controlpushbutton.h index d523ee53296..e914cd0c300 100644 --- a/src/control/controlpushbutton.h +++ b/src/control/controlpushbutton.h @@ -1,69 +1,40 @@ -/*************************************************************************** - controlpushbutton.h - description - ------------------- - begin : Wed Feb 20 2002 - copyright : (C) 2002 by Tue and Ken Haste Andersen - email : - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef CONTROLPUSHBUTTON_H -#define CONTROLPUSHBUTTON_H +#pragma once +#include "control/controlbuttonmode.h" #include "control/controlobject.h" -/** - *@author Tue and Ken Haste Andersen - */ - class ControlPushButton : public ControlObject { Q_OBJECT public: - enum ButtonMode { - PUSH = 0, - TOGGLE, - POWERWINDOW, - LONGPRESSLATCHING, - TRIGGER, - }; - - static QString buttonModeToString(int mode) { - switch(mode) { - case ControlPushButton::PUSH: - return "PUSH"; - case ControlPushButton::TOGGLE: - return "TOGGLE"; - case ControlPushButton::POWERWINDOW: - return "POWERWINDOW"; - case ControlPushButton::LONGPRESSLATCHING: - return "LONGPRESSLATCHING"; - case ControlPushButton::TRIGGER: - return "TRIGGER"; - default: - return "UNKNOWN"; + static QString buttonModeToString(mixxx::control::ButtonMode buttonMode) { + switch (buttonMode) { + case mixxx::control::ButtonMode::Push: + return QStringLiteral("Push"); + case mixxx::control::ButtonMode::Toggle: + return QStringLiteral("Toggle"); + case mixxx::control::ButtonMode::PowerWindow: + return QStringLiteral("PowerWindow"); + case mixxx::control::ButtonMode::LongPressLatching: + return QStringLiteral("LongPressLatching"); + case mixxx::control::ButtonMode::Trigger: + return QStringLiteral("Trigger"); } + DEBUG_ASSERT(false); + return "Unknown"; } ControlPushButton(const ConfigKey& key, bool bPersist = false, double defaultValue = 0.0); virtual ~ControlPushButton(); - inline ButtonMode getButtonMode() const { + inline mixxx::control::ButtonMode getButtonMode() const { return m_buttonMode; } - void setButtonMode(enum ButtonMode mode); + void setButtonMode(mixxx::control::ButtonMode mode); void setStates(int num_states); + void setBehavior(mixxx::control::ButtonMode mode, int num_states); private: - enum ButtonMode m_buttonMode; + void updateBehavior(); + enum mixxx::control::ButtonMode m_buttonMode; int m_iNoStates; }; - -#endif diff --git a/src/effects/effectbuttonparameterslot.cpp b/src/effects/effectbuttonparameterslot.cpp index 37d4ae6c8d3..e31a7ea7ed6 100644 --- a/src/effects/effectbuttonparameterslot.cpp +++ b/src/effects/effectbuttonparameterslot.cpp @@ -13,7 +13,7 @@ EffectButtonParameterSlot::EffectButtonParameterSlot(const QString& group, ConfigKey(m_group, itemPrefix + QString("_loaded"))); m_pControlValue = std::make_unique( ConfigKey(m_group, itemPrefix)); - m_pControlValue->setButtonMode(ControlPushButton::POWERWINDOW); + m_pControlValue->setButtonMode(mixxx::control::ButtonMode::PowerWindow); m_pControlType = std::make_unique( ConfigKey(m_group, itemPrefix + QString("_type"))); diff --git a/src/effects/effectchain.cpp b/src/effects/effectchain.cpp index e580aa75c41..0199b538de6 100644 --- a/src/effects/effectchain.cpp +++ b/src/effects/effectchain.cpp @@ -52,7 +52,7 @@ EffectChain::EffectChain(const QString& group, m_pControlChainEnabled = std::make_unique(ConfigKey(m_group, "enabled")); - m_pControlChainEnabled->setButtonMode(ControlPushButton::POWERWINDOW); + m_pControlChainEnabled->setButtonMode(mixxx::control::ButtonMode::PowerWindow); // Default to enabled. The skin might not show these buttons. m_pControlChainEnabled->setDefaultValue(true); m_pControlChainEnabled->set(true); @@ -82,8 +82,8 @@ EffectChain::EffectChain(const QString& group, m_pControlChainMixMode = std::make_unique(ConfigKey(m_group, "mix_mode")); - m_pControlChainMixMode->setButtonMode(ControlPushButton::TOGGLE); - m_pControlChainMixMode->setStates(EffectChainMixMode::kNumModes); + m_pControlChainMixMode->setBehavior( + mixxx::control::ButtonMode::Toggle, EffectChainMixMode::kNumModes); double mixModeCODefault = static_cast(EffectChainMixMode::DrySlashWet); m_pControlChainMixMode->setDefaultValue(mixModeCODefault); m_pControlChainMixMode->set(mixModeCODefault); @@ -127,21 +127,21 @@ EffectChain::EffectChain(const QString& group, // Refer to comment in header for full explanation. m_pControlChainShowFocus = std::make_unique( ConfigKey(m_group, "show_focus")); - m_pControlChainShowFocus->setButtonMode(ControlPushButton::TOGGLE); + m_pControlChainShowFocus->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pControlChainHasControllerFocus = std::make_unique( ConfigKey(m_group, "controller_input_active")); - m_pControlChainHasControllerFocus->setButtonMode(ControlPushButton::TOGGLE); + m_pControlChainHasControllerFocus->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pControlChainShowParameters = std::make_unique( ConfigKey(m_group, "show_parameters"), true); - m_pControlChainShowParameters->setButtonMode(ControlPushButton::TOGGLE); + m_pControlChainShowParameters->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pControlChainFocusedEffect = std::make_unique( ConfigKey(m_group, "focused_effect"), true); - m_pControlChainFocusedEffect->setButtonMode(ControlPushButton::TOGGLE); + m_pControlChainFocusedEffect->setButtonMode(mixxx::control::ButtonMode::Toggle); addToEngine(); } @@ -306,7 +306,7 @@ void EffectChain::registerInputChannel(const ChannelHandleAndGroup& handleGroup, true, initialValue); m_channelEnableButtons.insert(handleGroup, pEnableControl); - pEnableControl->setButtonMode(ControlPushButton::POWERWINDOW); + pEnableControl->setButtonMode(mixxx::control::ButtonMode::PowerWindow); if (pEnableControl->toBool()) { enableForInputChannel(handleGroup); } diff --git a/src/effects/effectknobparameterslot.cpp b/src/effects/effectknobparameterslot.cpp index b0dc63c1eeb..9f5e2dfae29 100644 --- a/src/effects/effectknobparameterslot.cpp +++ b/src/effects/effectknobparameterslot.cpp @@ -30,15 +30,14 @@ EffectKnobParameterSlot::EffectKnobParameterSlot( m_pControlLinkType = std::make_unique( ConfigKey(m_group, itemPrefix + QString("_link_type"))); - m_pControlLinkType->setButtonMode(ControlPushButton::TOGGLE); - m_pControlLinkType->setStates( + m_pControlLinkType->setBehavior(mixxx::control::ButtonMode::Toggle, static_cast(EffectManifestParameter::LinkType::NumLinkTypes)); m_pControlLinkType->connectValueChangeRequest( this, &EffectKnobParameterSlot::slotLinkTypeChanging); m_pControlLinkInverse = std::make_unique( ConfigKey(m_group, itemPrefix + QString("_link_inverse"))); - m_pControlLinkInverse->setButtonMode(ControlPushButton::TOGGLE); + m_pControlLinkInverse->setButtonMode(mixxx::control::ButtonMode::Toggle); connect(m_pControlLinkInverse.get(), &ControlObject::valueChanged, this, diff --git a/src/effects/effectslot.cpp b/src/effects/effectslot.cpp index 0df21a002fb..4cc0284766b 100644 --- a/src/effects/effectslot.cpp +++ b/src/effects/effectslot.cpp @@ -68,7 +68,7 @@ EffectSlot::EffectSlot(const QString& group, // Default to disabled to prevent accidental activation of effects // at the beginning of a set. m_pControlEnabled = std::make_unique(ConfigKey(m_group, "enabled")); - m_pControlEnabled->setButtonMode(ControlPushButton::POWERWINDOW); + m_pControlEnabled->setButtonMode(mixxx::control::ButtonMode::PowerWindow); connect(m_pControlEnabled.get(), &ControlObject::valueChanged, this, diff --git a/src/engine/channels/enginechannel.cpp b/src/engine/channels/enginechannel.cpp index 59c80d45d3c..8be2acc7c3e 100644 --- a/src/engine/channels/enginechannel.cpp +++ b/src/engine/channels/enginechannel.cpp @@ -20,15 +20,14 @@ EngineChannel::EngineChannel(const ChannelHandleAndGroup& handleGroup, m_bIsTalkoverChannel(isTalkoverChannel), m_channelIndex(-1) { m_pPFL = new ControlPushButton(ConfigKey(getGroup(), "pfl")); - m_pPFL->setButtonMode(ControlPushButton::TOGGLE); + m_pPFL->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pMainMix = new ControlPushButton(ConfigKey(getGroup(), "main_mix")); - m_pMainMix->setButtonMode(ControlPushButton::POWERWINDOW); + m_pMainMix->setButtonMode(mixxx::control::ButtonMode::PowerWindow); m_pMainMix->addAlias(ConfigKey(getGroup(), QStringLiteral("master"))); // crossfader assignment is persistent m_pOrientation = new ControlPushButton( ConfigKey(getGroup(), "orientation"), true, defaultOrientation); - m_pOrientation->setButtonMode(ControlPushButton::TOGGLE); - m_pOrientation->setStates(3); + m_pOrientation->setBehavior(mixxx::control::ButtonMode::Toggle, 3); m_pOrientationLeft = new ControlPushButton(ConfigKey(getGroup(), "orientation_left")); connect(m_pOrientationLeft, &ControlObject::valueChanged, this, &EngineChannel::slotOrientationLeft, Qt::DirectConnection); @@ -39,7 +38,7 @@ EngineChannel::EngineChannel(const ChannelHandleAndGroup& handleGroup, connect(m_pOrientationCenter, &ControlObject::valueChanged, this, &EngineChannel::slotOrientationCenter, Qt::DirectConnection); m_pTalkover = new ControlPushButton(ConfigKey(getGroup(), "talkover")); - m_pTalkover->setButtonMode(ControlPushButton::POWERWINDOW); + m_pTalkover->setButtonMode(mixxx::control::ButtonMode::PowerWindow); if (m_pEffectsManager != nullptr) { m_pEffectsManager->registerInputChannel(handleGroup); diff --git a/src/engine/channels/enginedeck.cpp b/src/engine/channels/enginedeck.cpp index 09f2474e4b5..45e30e0f472 100644 --- a/src/engine/channels/enginedeck.cpp +++ b/src/engine/channels/enginedeck.cpp @@ -38,7 +38,7 @@ EngineDeck::EngineDeck( m_pPassing(new ControlPushButton(ConfigKey(getGroup(), "passthrough"))) { m_pInputConfigured->setReadOnly(); // Set up passthrough utilities and fields - m_pPassing->setButtonMode(ControlPushButton::POWERWINDOW); + m_pPassing->setButtonMode(mixxx::control::ButtonMode::PowerWindow); m_bPassthroughIsActive = false; m_bPassthroughWasActive = false; diff --git a/src/engine/controls/bpmcontrol.cpp b/src/engine/controls/bpmcontrol.cpp index e249bb09bdf..c6a3dda6141 100644 --- a/src/engine/controls/bpmcontrol.cpp +++ b/src/engine/controls/bpmcontrol.cpp @@ -241,7 +241,7 @@ BpmControl::BpmControl(const QString& group, m_pBpmLock = std::make_unique( ConfigKey(group, "bpmlock"), false); - m_pBpmLock->setButtonMode(ControlPushButton::TOGGLE); + m_pBpmLock->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pBpmLock->connectValueChangeRequest( this, &BpmControl::slotToggleBpmLock, diff --git a/src/engine/controls/cuecontrol.cpp b/src/engine/controls/cuecontrol.cpp index f99a7816036..00fdadd8a1e 100644 --- a/src/engine/controls/cuecontrol.cpp +++ b/src/engine/controls/cuecontrol.cpp @@ -138,9 +138,9 @@ CueControl::~CueControl() { void CueControl::createControls() { m_pCueSet = std::make_unique(ConfigKey(m_group, "cue_set")); - m_pCueSet->setButtonMode(ControlPushButton::TRIGGER); + m_pCueSet->setButtonMode(mixxx::control::ButtonMode::Trigger); m_pCueClear = std::make_unique(ConfigKey(m_group, "cue_clear")); - m_pCueClear->setButtonMode(ControlPushButton::TRIGGER); + m_pCueClear->setButtonMode(mixxx::control::ButtonMode::Trigger); m_pCueGoto = std::make_unique(ConfigKey(m_group, "cue_goto")); m_pCueGotoAndPlay = std::make_unique(ConfigKey(m_group, "cue_gotoandplay")); m_pCuePlay = std::make_unique(ConfigKey(m_group, "cue_play")); diff --git a/src/engine/controls/keycontrol.cpp b/src/engine/controls/keycontrol.cpp index a759486176e..5d28cf58d60 100644 --- a/src/engine/controls/keycontrol.cpp +++ b/src/engine/controls/keycontrol.cpp @@ -53,9 +53,9 @@ KeyControl::KeyControl(const QString& group, // Fine adjust with semitone / 10 = 10 ct;. m_pPitchAdjust->setSmallStepCount(60); - m_keylockMode->setButtonMode(ControlPushButton::TOGGLE); + m_keylockMode->setButtonMode(mixxx::control::ButtonMode::Toggle); - m_keyunlockMode->setButtonMode(ControlPushButton::TOGGLE); + m_keyunlockMode->setButtonMode(mixxx::control::ButtonMode::Toggle); connect(m_pPitch.get(), &ControlObject::valueChanged, diff --git a/src/engine/controls/loopingcontrol.cpp b/src/engine/controls/loopingcontrol.cpp index fdb2cdc0891..b4120cf8da7 100644 --- a/src/engine/controls/loopingcontrol.cpp +++ b/src/engine/controls/loopingcontrol.cpp @@ -137,7 +137,7 @@ LoopingControl::LoopingControl(const QString& group, m_pCOLoopAnchor = new ControlPushButton(ConfigKey(group, "loop_anchor"), true, static_cast(LoopAnchorPoint::Start)); - m_pCOLoopAnchor->setButtonMode(ControlPushButton::TOGGLE); + m_pCOLoopAnchor->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pCOBeatLoopSize = new ControlObject(ConfigKey(group, "beatloop_size"), true, false, false, 4.0); @@ -237,7 +237,7 @@ LoopingControl::LoopingControl(const QString& group, this, &LoopingControl::slotLoopDouble); m_pLoopRemoveButton = new ControlPushButton(ConfigKey(group, "loop_remove")); - m_pLoopRemoveButton->setButtonMode(ControlPushButton::TRIGGER); + m_pLoopRemoveButton->setButtonMode(mixxx::control::ButtonMode::Trigger); connect(m_pLoopRemoveButton, &ControlObject::valueChanged, this, @@ -2013,7 +2013,7 @@ BeatLoopingControl::BeatLoopingControl(const QString& group, double size) // is the state of the beatloop control (1 for enabled, 0 for disabled). m_pLegacy = std::make_unique( keyForControl(group, "beatloop_%1", size)); - m_pLegacy->setButtonMode(ControlPushButton::TOGGLE); + m_pLegacy->setButtonMode(mixxx::control::ButtonMode::Toggle); connect(m_pLegacy.get(), &ControlObject::valueChanged, this, diff --git a/src/engine/controls/quantizecontrol.cpp b/src/engine/controls/quantizecontrol.cpp index 9cf89a2044a..233fc707cd7 100644 --- a/src/engine/controls/quantizecontrol.cpp +++ b/src/engine/controls/quantizecontrol.cpp @@ -12,7 +12,7 @@ QuantizeControl::QuantizeControl(const QString& group, : EngineControl(group, pConfig) { // Turn quantize OFF by default. See Bug #898213 m_pCOQuantizeEnabled = new ControlPushButton(ConfigKey(group, "quantize"), true); - m_pCOQuantizeEnabled->setButtonMode(ControlPushButton::TOGGLE); + m_pCOQuantizeEnabled->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pCONextBeat = new ControlObject(ConfigKey(group, "beat_next")); m_pCONextBeat->setKbdRepeatable(true); m_pCONextBeat->set(mixxx::audio::kInvalidFramePos.toEngineSamplePosMaybeInvalid()); diff --git a/src/engine/controls/vinylcontrolcontrol.cpp b/src/engine/controls/vinylcontrolcontrol.cpp index df4bc1bf740..12fc85280cc 100644 --- a/src/engine/controls/vinylcontrolcontrol.cpp +++ b/src/engine/controls/vinylcontrolcontrol.cpp @@ -31,22 +31,20 @@ VinylControlControl::VinylControlControl(const QString& group, UserSettingsPoint m_pControlVinylRate = new ControlObject(ConfigKey(group, "vinylcontrol_rate")); m_pControlVinylScratching = new ControlPushButton(ConfigKey(group, "vinylcontrol_scratching")); m_pControlVinylScratching->set(0); - m_pControlVinylScratching->setButtonMode(ControlPushButton::TOGGLE); + m_pControlVinylScratching->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pControlVinylEnabled = new ControlPushButton(ConfigKey(group, "vinylcontrol_enabled")); m_pControlVinylEnabled->set(0); - m_pControlVinylEnabled->setButtonMode(ControlPushButton::TOGGLE); + m_pControlVinylEnabled->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pControlVinylWantEnabled = new ControlPushButton(ConfigKey(group, "vinylcontrol_wantenabled")); m_pControlVinylWantEnabled->set(0); - m_pControlVinylWantEnabled->setButtonMode(ControlPushButton::TOGGLE); + m_pControlVinylWantEnabled->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pControlVinylMode = new ControlPushButton(ConfigKey(group, "vinylcontrol_mode")); - m_pControlVinylMode->setStates(3); - m_pControlVinylMode->setButtonMode(ControlPushButton::TOGGLE); + m_pControlVinylMode->setBehavior(mixxx::control::ButtonMode::Toggle, 3); m_pControlVinylCueing = new ControlPushButton(ConfigKey(group, "vinylcontrol_cueing")); - m_pControlVinylCueing->setStates(3); - m_pControlVinylCueing->setButtonMode(ControlPushButton::TOGGLE); + m_pControlVinylCueing->setBehavior(mixxx::control::ButtonMode::Toggle, 3); m_pControlVinylSignalEnabled = new ControlPushButton(ConfigKey(group, "vinylcontrol_signal_enabled")); m_pControlVinylSignalEnabled->set(1); - m_pControlVinylSignalEnabled->setButtonMode(ControlPushButton::TOGGLE); + m_pControlVinylSignalEnabled->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pPlayEnabled = new ControlProxy(group, "play", this); } diff --git a/src/engine/enginebuffer.cpp b/src/engine/enginebuffer.cpp index 4bfc4a3cf3a..cde6f49244a 100644 --- a/src/engine/enginebuffer.cpp +++ b/src/engine/enginebuffer.cpp @@ -116,7 +116,7 @@ EngineBuffer::EngineBuffer(const QString& group, // Play button m_playButton = new ControlPushButton(ConfigKey(m_group, "play")); - m_playButton->setButtonMode(ControlPushButton::TOGGLE); + m_playButton->setButtonMode(mixxx::control::ButtonMode::Toggle); m_playButton->connectValueChangeRequest( this, &EngineBuffer::slotControlPlayRequest, Qt::DirectConnection); @@ -141,7 +141,7 @@ EngineBuffer::EngineBuffer(const QString& group, // Start button m_startButton = new ControlPushButton(ConfigKey(m_group, "start")); - m_startButton->setButtonMode(ControlPushButton::TRIGGER); + m_startButton->setButtonMode(mixxx::control::ButtonMode::Trigger); connect(m_startButton, &ControlObject::valueChanged, this, &EngineBuffer::slotControlStart, Qt::DirectConnection); @@ -153,7 +153,7 @@ EngineBuffer::EngineBuffer(const QString& group, Qt::DirectConnection); m_pSlipButton = new ControlPushButton(ConfigKey(m_group, "slip_enabled")); - m_pSlipButton->setButtonMode(ControlPushButton::TOGGLE); + m_pSlipButton->setButtonMode(mixxx::control::ButtonMode::Toggle); m_playposSlider = new ControlLinPotmeter( ConfigKey(m_group, "playposition"), 0.0, 1.0, 0, 0, true); @@ -165,7 +165,7 @@ EngineBuffer::EngineBuffer(const QString& group, m_visualPlayPos = VisualPlayPosition::getVisualPlayPosition(m_group); m_pRepeat = new ControlPushButton(ConfigKey(m_group, "repeat")); - m_pRepeat->setButtonMode(ControlPushButton::TOGGLE); + m_pRepeat->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pSampleRate = new ControlProxy(kAppGroup, QStringLiteral("samplerate"), this); @@ -173,7 +173,7 @@ EngineBuffer::EngineBuffer(const QString& group, m_pTrackSampleRate = new ControlObject(ConfigKey(m_group, "track_samplerate")); m_pKeylock = new ControlPushButton(ConfigKey(m_group, "keylock"), true); - m_pKeylock->setButtonMode(ControlPushButton::TOGGLE); + m_pKeylock->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pReplayGain = new ControlProxy(m_group, QStringLiteral("replaygain"), this); diff --git a/src/engine/enginemixer.cpp b/src/engine/enginemixer.cpp index fe68d85f0b9..a322d60dd03 100644 --- a/src/engine/enginemixer.cpp +++ b/src/engine/enginemixer.cpp @@ -138,7 +138,7 @@ EngineMixer::EngineMixer( // Main / Headphone split-out mode (for devices with only one output). m_pHeadSplitEnabled = new ControlPushButton(ConfigKey(group, "headSplit")); - m_pHeadSplitEnabled->setButtonMode(ControlPushButton::TOGGLE); + m_pHeadSplitEnabled->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pHeadSplitEnabled->set(0.0); m_pTalkoverDucking = new EngineTalkoverDucking(pConfig, group); @@ -170,7 +170,7 @@ EngineMixer::EngineMixer( // X-Fader Setup m_pXFaderMode = new ControlPushButton( ConfigKey(EngineXfader::kXfaderConfigKey, "xFaderMode")); - m_pXFaderMode->setButtonMode(ControlPushButton::TOGGLE); + m_pXFaderMode->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pXFaderCurve = new ControlPotmeter( ConfigKey(EngineXfader::kXfaderConfigKey, "xFaderCurve"), @@ -180,7 +180,7 @@ EngineMixer::EngineMixer( 0.3, 1., true); m_pXFaderReverse = new ControlPushButton( ConfigKey(EngineXfader::kXfaderConfigKey, "xFaderReverse")); - m_pXFaderReverse->setButtonMode(ControlPushButton::TOGGLE); + m_pXFaderReverse->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pKeylockEngine = new ControlObject(ConfigKey(kAppGroup, QStringLiteral("keylock_engine"))); m_pKeylockEngine->set(static_cast( @@ -887,7 +887,7 @@ void EngineMixer::addChannel(EngineChannel* pChannel) { pChannelInfo->m_pVolumeControl->set(1.0); pChannelInfo->m_pMuteControl = new ControlPushButton( ConfigKey(group, "mute")); - pChannelInfo->m_pMuteControl->setButtonMode(ControlPushButton::POWERWINDOW); + pChannelInfo->m_pMuteControl->setButtonMode(mixxx::control::ButtonMode::PowerWindow); pChannelInfo->m_pBuffer = mixxx::SampleBuffer(kMaxEngineSamples); pChannelInfo->m_pBuffer.clear(); m_channels.append(pChannelInfo); diff --git a/src/engine/enginetalkoverducking.cpp b/src/engine/enginetalkoverducking.cpp index 75253d9f72a..60246a3b063 100644 --- a/src/engine/enginetalkoverducking.cpp +++ b/src/engine/enginetalkoverducking.cpp @@ -37,8 +37,7 @@ EngineTalkoverDucking::EngineTalkoverDucking( static_cast(m_pSampleRate->get() / 2)); m_pTalkoverDucking = new ControlPushButton(ConfigKey(m_group, "talkoverDucking")); - m_pTalkoverDucking->setButtonMode(ControlPushButton::TOGGLE); - m_pTalkoverDucking->setStates(3); + m_pTalkoverDucking->setBehavior(mixxx::control::ButtonMode::Toggle, 3); m_pTalkoverDucking->set( m_pConfig->getValue( ConfigKey(m_group, "duckMode"), AUTO)); diff --git a/src/engine/sync/internalclock.cpp b/src/engine/sync/internalclock.cpp index e5ba10d363c..2a2ed0c2902 100644 --- a/src/engine/sync/internalclock.cpp +++ b/src/engine/sync/internalclock.cpp @@ -44,8 +44,7 @@ InternalClock::InternalClock(const QString& group, SyncableListener* pEngineSync m_pSyncLeaderEnabled.reset( new ControlPushButton(ConfigKey(m_group, "sync_leader"))); - m_pSyncLeaderEnabled->setButtonMode(ControlPushButton::TOGGLE); - m_pSyncLeaderEnabled->setStates(3); + m_pSyncLeaderEnabled->setBehavior(mixxx::control::ButtonMode::Toggle, 3); m_pSyncLeaderEnabled->connectValueChangeRequest( this, &InternalClock::slotSyncLeaderEnabledChangeRequest, Qt::DirectConnection); m_pSyncLeaderEnabled->addAlias(ConfigKey(m_group, QStringLiteral("sync_master"))); diff --git a/src/engine/sync/synccontrol.cpp b/src/engine/sync/synccontrol.cpp index 66655a34656..2ed856443d0 100644 --- a/src/engine/sync/synccontrol.cpp +++ b/src/engine/sync/synccontrol.cpp @@ -45,22 +45,21 @@ SyncControl::SyncControl(const QString& group, m_pPlayButton->connectValueChanged(this, &SyncControl::slotControlPlay, Qt::DirectConnection); m_pSyncMode.reset(new ControlPushButton(ConfigKey(group, "sync_mode"))); - m_pSyncMode->setButtonMode(ControlPushButton::TOGGLE); - m_pSyncMode->setStates(static_cast(SyncMode::NumModes)); + m_pSyncMode->setBehavior(mixxx::control::ButtonMode::Toggle, + static_cast(SyncMode::NumModes)); m_pSyncMode->connectValueChangeRequest( this, &SyncControl::slotSyncModeChangeRequest, Qt::DirectConnection); m_pSyncLeaderEnabled.reset( new ControlPushButton(ConfigKey(group, "sync_leader"))); - m_pSyncLeaderEnabled->setButtonMode(ControlPushButton::TOGGLE); - m_pSyncLeaderEnabled->setStates(3); + m_pSyncLeaderEnabled->setBehavior(mixxx::control::ButtonMode::Toggle, 3); m_pSyncLeaderEnabled->connectValueChangeRequest( this, &SyncControl::slotSyncLeaderEnabledChangeRequest, Qt::DirectConnection); m_pSyncLeaderEnabled->addAlias(ConfigKey(group, QStringLiteral("sync_master"))); m_pSyncEnabled.reset( new ControlPushButton(ConfigKey(group, "sync_enabled"))); - m_pSyncEnabled->setButtonMode(ControlPushButton::LONGPRESSLATCHING); + m_pSyncEnabled->setButtonMode(mixxx::control::ButtonMode::LongPressLatching); m_pSyncEnabled->connectValueChangeRequest( this, &SyncControl::slotSyncEnabledChangeRequest, Qt::DirectConnection); diff --git a/src/library/autodj/autodjprocessor.cpp b/src/library/autodj/autodjprocessor.cpp index f1fc74f2508..165d2c6c4c9 100644 --- a/src/library/autodj/autodjprocessor.cpp +++ b/src/library/autodj/autodjprocessor.cpp @@ -149,7 +149,7 @@ AutoDJProcessor::AutoDJProcessor( m_pEnabledAutoDJ = new ControlPushButton( ConfigKey("[AutoDJ]", "enabled")); - m_pEnabledAutoDJ->setButtonMode(ControlPushButton::TOGGLE); + m_pEnabledAutoDJ->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pEnabledAutoDJ->connectValueChangeRequest(this, &AutoDJProcessor::controlEnableChangeRequest); diff --git a/src/library/librarycontrol.cpp b/src/library/librarycontrol.cpp index 3d5e9cac1fa..0b69650eb51 100644 --- a/src/library/librarycontrol.cpp +++ b/src/library/librarycontrol.cpp @@ -221,7 +221,7 @@ LibraryControl::LibraryControl(Library* pLibrary) // This CO is never actually set or read so the value just needs to be not 0 m_pRefocusPrevWidgetCO = std::make_unique( ConfigKey("[Library]", "refocus_prev_widget")); - m_pRefocusPrevWidgetCO->setButtonMode(ControlPushButton::TRIGGER); + m_pRefocusPrevWidgetCO->setButtonMode(mixxx::control::ButtonMode::Trigger); #ifdef MIXXX_USE_QML if (!CmdlineArgs::Instance().isQml()) #endif @@ -285,7 +285,7 @@ LibraryControl::LibraryControl(Library* pLibrary) // Sort controls m_pSortColumn = std::make_unique(ConfigKey("[Library]", "sort_column")); m_pSortOrder = std::make_unique(ConfigKey("[Library]", "sort_order")); - m_pSortOrder->setButtonMode(ControlPushButton::TOGGLE); + m_pSortOrder->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pSortColumnToggle = std::make_unique(ConfigKey("[Library]", "sort_column_toggle"), false); m_pSortFocusedColumn = std::make_unique( ConfigKey("[Library]", "sort_focused_column")); diff --git a/src/skin/legacy/legacyskinparser.cpp b/src/skin/legacy/legacyskinparser.cpp index 401336323b0..5a4dfe5b970 100644 --- a/src/skin/legacy/legacyskinparser.cpp +++ b/src/skin/legacy/legacyskinparser.cpp @@ -117,7 +117,7 @@ ControlObject* LegacySkinParser::controlFromConfigKey( // Since the usual behavior here is to create a skin-defined push // button, actually make it a push button and set it to toggle. ControlPushButton* controlButton = new ControlPushButton(key, bPersist); - controlButton->setButtonMode(ControlPushButton::TOGGLE); + controlButton->setButtonMode(mixxx::control::ButtonMode::Toggle); if (pCreated) { *pCreated = true; diff --git a/src/skin/skincontrols.cpp b/src/skin/skincontrols.cpp index 45e0935c16b..7bf2bc49a89 100644 --- a/src/skin/skincontrols.cpp +++ b/src/skin/skincontrols.cpp @@ -43,18 +43,18 @@ SkinControls::SkinControls() m_showVinylControl(ConfigKey(kSkinGroup, QStringLiteral("show_vinylcontrol")), true, false) { - m_showEffectRack.setButtonMode(ControlPushButton::TOGGLE); - m_showLibraryCoverArt.setButtonMode(ControlPushButton::TOGGLE); - m_showMicrophones.setButtonMode(ControlPushButton::TOGGLE); - m_showPreviewDecks.setButtonMode(ControlPushButton::TOGGLE); - m_showSamplers.setButtonMode(ControlPushButton::TOGGLE); - m_show4EffectUnits.setButtonMode(ControlPushButton::TOGGLE); - m_showCoverArt.setButtonMode(ControlPushButton::TOGGLE); - m_showMaximizedLibrary.setButtonMode(ControlPushButton::TOGGLE); - m_showMixer.setButtonMode(ControlPushButton::TOGGLE); - m_showSettings.setButtonMode(ControlPushButton::TOGGLE); - m_showSpinnies.setButtonMode(ControlPushButton::TOGGLE); - m_showVinylControl.setButtonMode(ControlPushButton::TOGGLE); + m_showEffectRack.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showLibraryCoverArt.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showMicrophones.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showPreviewDecks.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showSamplers.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_show4EffectUnits.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showCoverArt.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showMaximizedLibrary.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showMixer.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showSettings.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showSpinnies.setButtonMode(mixxx::control::ButtonMode::Toggle); + m_showVinylControl.setButtonMode(mixxx::control::ButtonMode::Toggle); m_showEffectRack.addAlias(ConfigKey(QStringLiteral("[EffectRack1]"), QStringLiteral("show"))); m_showLibraryCoverArt.addAlias(ConfigKey( diff --git a/src/skin/skinloader.cpp b/src/skin/skinloader.cpp index a91a2fda62b..a2795f8b4b6 100644 --- a/src/skin/skinloader.cpp +++ b/src/skin/skinloader.cpp @@ -230,22 +230,22 @@ void SkinLoader::setupSpinnyCoverControls() { m_pShowCover = make_parented("[Skin]", "show_coverart", this); m_pSelectBigSpinnyCover = std::make_unique( ConfigKey("[Skin]", "select_big_spinny_or_cover"), true); - m_pSelectBigSpinnyCover->setButtonMode(ControlPushButton::TOGGLE); + m_pSelectBigSpinnyCover->setButtonMode(mixxx::control::ButtonMode::Toggle); // This is 1 if [Skin], show_spinnies == 1 OR [Skin],show_coverart == 1 m_pShowSpinnyAndOrCover = std::make_unique( ConfigKey("[Skin]", "show_spinny_or_cover")); - m_pShowSpinnyAndOrCover->setButtonMode(ControlPushButton::TOGGLE); + m_pShowSpinnyAndOrCover->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pShowSpinnyAndOrCover->setReadOnly(); // This is 1 if [Skin],show_spinny_cover == 1 AND [Skin],select_big_spinny_coverart == 0 m_pShowSmallSpinnyCover = std::make_unique( ConfigKey("[Skin]", "show_small_spinny_or_cover")); - m_pShowSmallSpinnyCover->setButtonMode(ControlPushButton::TOGGLE); + m_pShowSmallSpinnyCover->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pShowSmallSpinnyCover->setReadOnly(); // This is 1 if [Skin],show_spinny_cover == 1 AND [Skin],select_big_spinny_coverart == 1 m_pShowBigSpinnyCover = std::make_unique( ConfigKey("[Skin]", "show_big_spinny_or_cover")); - m_pShowBigSpinnyCover->setButtonMode(ControlPushButton::TOGGLE); + m_pShowBigSpinnyCover->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pShowBigSpinnyCover->setReadOnly(); m_pShowSpinny->connectValueChanged(this, &SkinLoader::updateSpinnyCoverControls); @@ -285,7 +285,7 @@ void SkinLoader::setupMicDuckingControls() { // This is 1 if at least one microphone device is configured m_pShowDuckingControls = std::make_unique( ConfigKey("[Skin]", "show_ducking_controls")); - m_pShowDuckingControls->setButtonMode(ControlPushButton::TOGGLE); + m_pShowDuckingControls->setButtonMode(mixxx::control::ButtonMode::Toggle); m_pShowDuckingControls->setReadOnly(); m_pNumMics = make_parented( diff --git a/src/test/autodjprocessor_test.cpp b/src/test/autodjprocessor_test.cpp index 4cebd3b7b9b..7d4c3c5f7cc 100644 --- a/src/test/autodjprocessor_test.cpp +++ b/src/test/autodjprocessor_test.cpp @@ -33,7 +33,7 @@ class FakeMixer { FakeMixer() : crossfader(ConfigKey("[Master]", "crossfader"), -1.0, 1.0), crossfaderReverse(ConfigKey("[Mixer Profile]", "xFaderReverse")) { - crossfaderReverse.setButtonMode(ControlPushButton::TOGGLE); + crossfaderReverse.setButtonMode(mixxx::control::ButtonMode::Toggle); } ControlPotmeter crossfader; @@ -55,8 +55,8 @@ class FakeDeck : public BaseTrackPlayer { outroStartPos(ConfigKey(group, "outro_start_position")), outroEndPos(ConfigKey(group, "outro_end_position")), orientation(ConfigKey(group, "orientation")) { - play.setButtonMode(ControlPushButton::TOGGLE); - repeat.setButtonMode(ControlPushButton::TOGGLE); + play.setButtonMode(mixxx::control::ButtonMode::Toggle); + repeat.setButtonMode(mixxx::control::ButtonMode::Toggle); outroStartPos.set(Cue::kNoPosition); outroEndPos.set(Cue::kNoPosition); orientation.set(orient); diff --git a/src/test/midicontrollertest.cpp b/src/test/midicontrollertest.cpp index 17488adcdb9..83811eb5fe8 100644 --- a/src/test/midicontrollertest.cpp +++ b/src/test/midicontrollertest.cpp @@ -262,7 +262,7 @@ TEST_F(MidiControllerTest, ReceiveMessage_ToggleCO_PushOnOff) { // (NOTE_OFF, 0x00) for release. ConfigKey key("[Channel1]", "keylock"); ControlPushButton cpb(key); - cpb.setButtonMode(ControlPushButton::TOGGLE); + cpb.setButtonMode(mixxx::control::ButtonMode::Toggle); unsigned char channel = 0x01; unsigned char control = 0x10; @@ -297,7 +297,7 @@ TEST_F(MidiControllerTest, ReceiveMessage_ToggleCO_PushOnOn) { // (NOTE_ON, 0x00) for release. ConfigKey key("[Channel1]", "keylock"); ControlPushButton cpb(key); - cpb.setButtonMode(ControlPushButton::TOGGLE); + cpb.setButtonMode(mixxx::control::ButtonMode::Toggle); unsigned char channel = 0x01; unsigned char control = 0x10; @@ -327,7 +327,7 @@ TEST_F(MidiControllerTest, ReceiveMessage_ToggleCO_ToggleOnOff_ButtonMidiOption) // push button. ConfigKey key("[Channel1]", "keylock"); ControlPushButton cpb(key); - cpb.setButtonMode(ControlPushButton::TOGGLE); + cpb.setButtonMode(mixxx::control::ButtonMode::Toggle); unsigned char channel = 0x01; unsigned char control = 0x10; @@ -367,7 +367,7 @@ TEST_F(MidiControllerTest, ReceiveMessage_ToggleCO_ToggleOnOff_SwitchMidiOption) // button rather than a momentary push button. ConfigKey key("[Channel1]", "keylock"); ControlPushButton cpb(key); - cpb.setButtonMode(ControlPushButton::TOGGLE); + cpb.setButtonMode(mixxx::control::ButtonMode::Toggle); unsigned char channel = 0x01; unsigned char control = 0x10; @@ -423,7 +423,7 @@ TEST_F(MidiControllerTest, ReceiveMessage_ToggleCO_PushCC) { // as (CC, 0x7f) for press and (CC, 0x00) for release. ConfigKey key("[Channel1]", "keylock"); ControlPushButton cpb(key); - cpb.setButtonMode(ControlPushButton::TOGGLE); + cpb.setButtonMode(mixxx::control::ButtonMode::Toggle); unsigned char channel = 0x01; unsigned char control = 0x10; diff --git a/src/test/wpushbutton_test.cpp b/src/test/wpushbutton_test.cpp index c866cb2a777..1f3f328c450 100644 --- a/src/test/wpushbutton_test.cpp +++ b/src/test/wpushbutton_test.cpp @@ -32,10 +32,11 @@ class WPushButtonTest : public MixxxTest { TEST_F(WPushButtonTest, QuickPressNoLatchTest) { QScopedPointer pPushControl( new ControlPushButton(ConfigKey("[Test]", "push"))); - pPushControl->setButtonMode(ControlPushButton::LONGPRESSLATCHING); + pPushControl->setButtonMode(mixxx::control::ButtonMode::LongPressLatching); - m_pButton.reset(new WPushButton(NULL, ControlPushButton::LONGPRESSLATCHING, - ControlPushButton::PUSH)); + m_pButton.reset(new WPushButton(NULL, + mixxx::control::ButtonMode::LongPressLatching, + mixxx::control::ButtonMode::Push)); m_pButton->setStates(2); m_pButton->addLeftConnection( new ControlParameterWidgetConnection( @@ -58,10 +59,11 @@ TEST_F(WPushButtonTest, QuickPressNoLatchTest) { TEST_F(WPushButtonTest, LongPressLatchTest) { QScopedPointer pPushControl( new ControlPushButton(ConfigKey("[Test]", "push"))); - pPushControl->setButtonMode(ControlPushButton::LONGPRESSLATCHING); + pPushControl->setButtonMode(mixxx::control::ButtonMode::LongPressLatching); - m_pButton.reset(new WPushButton(NULL, ControlPushButton::LONGPRESSLATCHING, - ControlPushButton::PUSH)); + m_pButton.reset(new WPushButton(NULL, + mixxx::control::ButtonMode::LongPressLatching, + mixxx::control::ButtonMode::Push)); m_pButton->setStates(2); m_pButton->addLeftConnection( new ControlParameterWidgetConnection( diff --git a/src/widget/wpushbutton.cpp b/src/widget/wpushbutton.cpp index e6e54ccfbe2..5cc3c188203 100644 --- a/src/widget/wpushbutton.cpp +++ b/src/widget/wpushbutton.cpp @@ -17,13 +17,14 @@ WPushButton::WPushButton(QWidget* pParent) : WWidget(pParent), - m_leftButtonMode(ControlPushButton::PUSH), - m_rightButtonMode(ControlPushButton::PUSH) { + m_leftButtonMode(mixxx::control::ButtonMode::Push), + m_rightButtonMode(mixxx::control::ButtonMode::Push) { setStates(0); } -WPushButton::WPushButton(QWidget* pParent, ControlPushButton::ButtonMode leftButtonMode, - ControlPushButton::ButtonMode rightButtonMode) +WPushButton::WPushButton(QWidget* pParent, + mixxx::control::ButtonMode leftButtonMode, + mixxx::control::ButtonMode rightButtonMode) : WWidget(pParent), m_leftButtonMode(leftButtonMode), m_rightButtonMode(rightButtonMode) { @@ -141,7 +142,7 @@ void WPushButton::setup(const QDomNode& node, const SkinContext& context) { if (leftConnection) { bool leftClickForcePush = context.selectBool(node, "LeftClickIsPushButton", false); - m_leftButtonMode = ControlPushButton::PUSH; + m_leftButtonMode = mixxx::control::ButtonMode::Push; if (!leftClickForcePush) { const ConfigKey& configKey = leftConnection->getKey(); ControlPushButton* p = qobject_cast( @@ -153,22 +154,22 @@ void WPushButton::setup(const QDomNode& node, const SkinContext& context) { if (leftConnection->getEmitOption() & ControlParameterWidgetConnection::EMIT_DEFAULT) { switch (m_leftButtonMode) { - case ControlPushButton::PUSH: - case ControlPushButton::POWERWINDOW: + case mixxx::control::ButtonMode::Push: + case mixxx::control::ButtonMode::PowerWindow: leftConnection->setEmitOption( ControlParameterWidgetConnection::EMIT_ON_PRESS_AND_RELEASE); break; - case ControlPushButton::LONGPRESSLATCHING: - leftConnection->setEmitOption( - ControlParameterWidgetConnection::EMIT_ON_PRESS_AND_RELEASE); - m_pLongPressLatching = std::make_unique(this); - break; - case ControlPushButton::TOGGLE: - case ControlPushButton::TRIGGER: - default: - leftConnection->setEmitOption( - ControlParameterWidgetConnection::EMIT_ON_PRESS); - break; + case mixxx::control::ButtonMode::LongPressLatching: + leftConnection->setEmitOption( + ControlParameterWidgetConnection::EMIT_ON_PRESS_AND_RELEASE); + m_pLongPressLatching = std::make_unique(this); + break; + case mixxx::control::ButtonMode::Toggle: + case mixxx::control::ButtonMode::Trigger: + default: + leftConnection->setEmitOption( + ControlParameterWidgetConnection::EMIT_ON_PRESS); + break; } } if (leftConnection->getDirectionOption() & @@ -188,20 +189,20 @@ void WPushButton::setup(const QDomNode& node, const SkinContext& context) { if (!m_rightConnections.isEmpty()) { ControlParameterWidgetConnection* rightConnection = m_rightConnections.at(0); bool rightClickForcePush = context.selectBool(node, "RightClickIsPushButton", false); - m_rightButtonMode = ControlPushButton::PUSH; + m_rightButtonMode = mixxx::control::ButtonMode::Push; if (!rightClickForcePush) { const ConfigKey configKey = rightConnection->getKey(); ControlPushButton* p = qobject_cast( ControlObject::getControl(configKey)); if (p) { m_rightButtonMode = p->getButtonMode(); - if (m_rightButtonMode != ControlPushButton::PUSH && - m_rightButtonMode != ControlPushButton::TOGGLE && - m_rightButtonMode != ControlPushButton::TRIGGER) { + if (m_rightButtonMode != mixxx::control::ButtonMode::Push && + m_rightButtonMode != mixxx::control::ButtonMode::Toggle && + m_rightButtonMode != mixxx::control::ButtonMode::Trigger) { SKIN_WARNING(node, context, "WPushButton::setup: Connecting a Pushbutton not " - "in PUSH, TRIGGER or TOGGLE mode is not " + "in Push, Trigger or Toggle mode is not " "implemented\n Please consider to set " "true"); @@ -211,18 +212,18 @@ void WPushButton::setup(const QDomNode& node, const SkinContext& context) { if (rightConnection->getEmitOption() & ControlParameterWidgetConnection::EMIT_DEFAULT) { switch (m_rightButtonMode) { - case ControlPushButton::PUSH: - case ControlPushButton::POWERWINDOW: - case ControlPushButton::LONGPRESSLATCHING: - rightConnection->setEmitOption( - ControlParameterWidgetConnection::EMIT_ON_PRESS_AND_RELEASE); - break; - case ControlPushButton::TOGGLE: - case ControlPushButton::TRIGGER: - default: - rightConnection->setEmitOption( - ControlParameterWidgetConnection::EMIT_ON_PRESS); - break; + case mixxx::control::ButtonMode::Push: + case mixxx::control::ButtonMode::PowerWindow: + case mixxx::control::ButtonMode::LongPressLatching: + rightConnection->setEmitOption( + ControlParameterWidgetConnection::EMIT_ON_PRESS_AND_RELEASE); + break; + case mixxx::control::ButtonMode::Toggle: + case mixxx::control::ButtonMode::Trigger: + default: + rightConnection->setEmitOption( + ControlParameterWidgetConnection::EMIT_ON_PRESS); + break; } } if (rightConnection->getDirectionOption() & @@ -373,8 +374,7 @@ void WPushButton::mousePressEvent(QMouseEvent * e) { const bool leftClick = e->button() == Qt::LeftButton; const bool rightClick = e->button() == Qt::RightButton; - if (m_leftButtonMode == ControlPushButton::POWERWINDOW - && m_iNoStates == 2) { + if (m_leftButtonMode == mixxx::control::ButtonMode::PowerWindow && m_iNoStates == 2) { if (leftClick) { m_clickTimer.setSingleShot(true); m_clickTimer.start(ControlPushButtonBehavior::kPowerWindowTimeMillis); @@ -384,15 +384,15 @@ void WPushButton::mousePressEvent(QMouseEvent * e) { setControlParameterLeftDown(emitValue); restyleAndRepaint(); } - // discharge right clicks here, because is used for latching in POWERWINDOW mode + // discharge right clicks here, because is used for latching in PowerWindow mode return; } if (rightClick) { // This is the secondary button function always a Pushbutton // due the lack of visual feedback we do not allow a toggle function - if (m_rightButtonMode == ControlPushButton::PUSH || - m_rightButtonMode == ControlPushButton::TRIGGER || + if (m_rightButtonMode == mixxx::control::ButtonMode::Push || + m_rightButtonMode == mixxx::control::ButtonMode::Trigger || m_iNoStates == 1) { m_bPressed = true; setControlParameterRightDown(1.0); @@ -404,8 +404,7 @@ void WPushButton::mousePressEvent(QMouseEvent * e) { if (leftClick) { m_bPressed = true; double emitValue; - if (m_leftButtonMode == ControlPushButton::PUSH - || m_iNoStates == 1) { + if (m_leftButtonMode == mixxx::control::ButtonMode::Push || m_iNoStates == 1) { // This is either forced to behave like a push button on left-click // or this is a push button. emitValue = 1.0; @@ -416,7 +415,7 @@ void WPushButton::mousePressEvent(QMouseEvent * e) { if (!util_isnan(emitValue) && m_iNoStates > 0) { emitValue = static_cast(emitValue + 1.0) % m_iNoStates; } - if (m_leftButtonMode == ControlPushButton::LONGPRESSLATCHING) { + if (m_leftButtonMode == mixxx::control::ButtonMode::LongPressLatching) { m_clickTimer.setSingleShot(true); m_clickTimer.start(ControlPushButtonBehavior::kLongPressLatchingTimeMillis); if (oldValue == 0.0 && m_pLongPressLatching) { @@ -480,8 +479,7 @@ void WPushButton::mouseReleaseEvent(QMouseEvent * e) { m_pLongPressLatching->stop(); } - if (m_leftButtonMode == ControlPushButton::POWERWINDOW - && m_iNoStates == 2) { + if (m_leftButtonMode == mixxx::control::ButtonMode::PowerWindow && m_iNoStates == 2) { if (leftClick) { const bool rightButtonDown = QApplication::mouseButtons() & Qt::RightButton; if (m_bPressed && !m_clickTimer.isActive() && !rightButtonDown) { @@ -502,8 +500,7 @@ void WPushButton::mouseReleaseEvent(QMouseEvent * e) { // due the leak of visual feedback we do not allow a toggle // function m_bPressed = false; - if (m_rightButtonMode == ControlPushButton::PUSH - || m_iNoStates == 1) { + if (m_rightButtonMode == mixxx::control::ButtonMode::Push || m_iNoStates == 1) { setControlParameterRightUp(0.0); } restyleAndRepaint(); @@ -513,13 +510,12 @@ void WPushButton::mouseReleaseEvent(QMouseEvent * e) { if (leftClick) { m_bPressed = false; double emitValue = getControlParameterLeft(); - if (m_leftButtonMode == ControlPushButton::PUSH - || m_iNoStates == 1) { + if (m_leftButtonMode == mixxx::control::ButtonMode::Push || m_iNoStates == 1) { // This is a Pushbutton emitValue = 0.0; } else { - if (m_leftButtonMode == ControlPushButton::LONGPRESSLATCHING - && m_clickTimer.isActive() && emitValue >= 1.0) { + if (m_leftButtonMode == mixxx::control::ButtonMode::LongPressLatching && + m_clickTimer.isActive() && emitValue >= 1.0) { // revert toggle if button is released too early if (!util_isnan(emitValue) && m_iNoStates > 0) { emitValue = static_cast(emitValue - 1.0) % m_iNoStates; diff --git a/src/widget/wpushbutton.h b/src/widget/wpushbutton.h index a1970cf02ae..1e4ff3ddf09 100644 --- a/src/widget/wpushbutton.h +++ b/src/widget/wpushbutton.h @@ -19,8 +19,9 @@ class WPushButton : public WWidget { public: explicit WPushButton(QWidget* pParent = nullptr); // Used by WPushButtonTest. - WPushButton(QWidget* pParent, ControlPushButton::ButtonMode leftButtonMode, - ControlPushButton::ButtonMode rightButtonMode); + WPushButton(QWidget* pParent, + mixxx::control::ButtonMode leftButtonMode, + mixxx::control::ButtonMode rightButtonMode); Q_PROPERTY(bool pressed READ isPressed); @@ -109,8 +110,8 @@ class WPushButton : public WWidget { PaintablePointer m_pPixmapBack; // short click toggle button long click push button - ControlPushButton::ButtonMode m_leftButtonMode; - ControlPushButton::ButtonMode m_rightButtonMode; + mixxx::control::ButtonMode m_leftButtonMode; + mixxx::control::ButtonMode m_rightButtonMode; QTimer m_clickTimer; QVector m_align;