summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-06-21 00:53:00 +0200
committerJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-06-21 14:03:08 +0200
commitc1278323b93d602611ec7ad27b94ef4c42e6691d (patch)
tree17ab64d5a2b61a79185a820b767e3c0e2252e047 /src
parent3658fb1dc50e8a06b95b6353b25af8e94a46c0be (diff)
control: Use assertions in ControlDoublePrivate if warn is true
Diffstat (limited to 'src')
-rw-r--r--src/control/control.cpp28
-rw-r--r--src/control/control.h20
-rw-r--r--src/control/controlobject.cpp13
-rw-r--r--src/control/controlobject.h8
-rw-r--r--src/control/controlobjectscript.cpp2
-rw-r--r--src/control/controlproxy.cpp16
-rw-r--r--src/control/controlproxy.h16
-rw-r--r--src/controllers/controllerengine.cpp16
-rw-r--r--src/controllers/midi/midioutputhandler.cpp4
-rw-r--r--src/mixer/playermanager.cpp49
-rw-r--r--src/mixxx.cpp2
-rw-r--r--src/skin/legacyskinparser.cpp2
-rw-r--r--src/test/beatstranslatetest.cpp4
-rw-r--r--src/widget/wmainmenubar.cpp2
14 files changed, 109 insertions, 73 deletions
diff --git a/src/control/control.cpp b/src/control/control.cpp
index 78f6484eb8..9256d148e0 100644
--- a/src/control/control.cpp
+++ b/src/control/control.cpp
@@ -102,17 +102,19 @@ void ControlDoublePrivate::insertAlias(const ConfigKey& alias, const ConfigKey&
// static
QSharedPointer<ControlDoublePrivate> ControlDoublePrivate::getControl(
- const ConfigKey& key, bool warn, ControlObject* pCreatorCO,
- bool bIgnoreNops, bool bTrack, bool bPersist, double defaultValue) {
- if (key.isEmpty()) {
- if (warn) {
- qWarning() << "ControlDoublePrivate::getControl returning NULL"
- << "for empty ConfigKey.";
- }
+ const ConfigKey& key,
+ ControlFlags flags,
+ ControlObject* pCreatorCO,
+ bool bIgnoreNops,
+ bool bTrack,
+ bool bPersist,
+ double defaultValue) {
+ VERIFY_OR_DEBUG_ASSERT(!key.isEmpty()) {
+ qWarning() << "ControlDoublePrivate::getControl returning NULL"
+ << "for empty ConfigKey.";
return QSharedPointer<ControlDoublePrivate>();
}
-
QSharedPointer<ControlDoublePrivate> pControl;
// Scope for MMutexLocker.
{
@@ -120,9 +122,8 @@ QSharedPointer<ControlDoublePrivate> ControlDoublePrivate::getControl(
auto it = s_qCOHash.constFind(key);
if (it != s_qCOHash.constEnd()) {
if (pCreatorCO) {
- if (warn) {
- qDebug() << "ControlObject" << key.group << key.item << "already created";
- }
+ qDebug() << "ControlObject" << key.group << key.item << "already created";
+ DEBUG_ASSERT(!"ControlObject already created");
} else {
pControl = it.value();
}
@@ -137,9 +138,12 @@ QSharedPointer<ControlDoublePrivate> ControlDoublePrivate::getControl(
MMutexLocker locker(&s_qCOHashMutex);
//qDebug() << "ControlDoublePrivate::s_qCOHash.insert(" << key.group << "," << key.item << ")";
s_qCOHash.insert(key, pControl);
- } else if (warn) {
+ } else if (!flags.testFlag(ControlFlag::NoWarnIfMissing)) {
qWarning() << "ControlDoublePrivate::getControl returning NULL for ("
<< key.group << "," << key.item << ")";
+ if (!flags.testFlag(ControlFlag::NoAssertIfMissing)) {
+ DEBUG_ASSERT(!"ControlObject not found");
+ }
}
}
return pControl;
diff --git a/src/control/control.h b/src/control/control.h
index f0d87ec6eb..dbf6183a89 100644
--- a/src/control/control.h
+++ b/src/control/control.h
@@ -13,6 +13,15 @@
class ControlObject;
+enum class ControlFlag {
+ None = 0,
+ NoWarnIfMissing = 1,
+ NoAssertIfMissing = 2,
+};
+
+Q_DECLARE_FLAGS(ControlFlags, ControlFlag)
+Q_DECLARE_OPERATORS_FOR_FLAGS(ControlFlags)
+
class ControlDoublePrivate : public QObject {
Q_OBJECT
public:
@@ -33,10 +42,13 @@ class ControlDoublePrivate : public QObject {
// Gets the ControlDoublePrivate matching the given ConfigKey. If pCreatorCO
// is non-NULL, allocates a new ControlDoublePrivate for the ConfigKey if
// one does not exist.
- static QSharedPointer<ControlDoublePrivate> getControl(
- const ConfigKey& key, bool warn = true,
- ControlObject* pCreatorCO = NULL, bool bIgnoreNops = true, bool bTrack = false,
- bool bPersist = false, double defaultValue = 0.0);
+ static QSharedPointer<ControlDoublePrivate> getControl(const ConfigKey& key,
+ ControlFlags flags = ControlFlag::None,
+ ControlObject* pCreatorCO = NULL,
+ bool bIgnoreNops = true,
+ bool bTrack = false,
+ bool bPersist = false,
+ double defaultValue = 0.0);
// Adds all ControlDoublePrivate that currently exist to pControlList
static void getControls(QList<QSharedPointer<ControlDoublePrivate> >* pControlsList);
diff --git a/src/control/controlobject.cpp b/src/control/controlobject.cpp
index db41618534..2de1c38683 100644
--- a/src/control/controlobject.cpp
+++ b/src/control/controlobject.cpp
@@ -33,8 +33,13 @@ ControlObject::ControlObject(ConfigKey key, bool bIgnoreNops, bool bTrack,
: m_key(key) {
// Don't bother looking up the control if key is NULL. Prevents log spew.
if (!m_key.isNull()) {
- m_pControl = ControlDoublePrivate::getControl(m_key, true, this,
- bIgnoreNops, bTrack, bPersist, defaultValue);
+ m_pControl = ControlDoublePrivate::getControl(m_key,
+ ControlFlag::None,
+ this,
+ bIgnoreNops,
+ bTrack,
+ bPersist,
+ defaultValue);
}
// getControl can fail and return a NULL control even with the create flag.
@@ -62,9 +67,9 @@ void ControlObject::privateValueChanged(double dValue, QObject* pSender) {
}
// static
-ControlObject* ControlObject::getControl(const ConfigKey& key, bool warn) {
+ControlObject* ControlObject::getControl(const ConfigKey& key, ControlFlags flags) {
//qDebug() << "ControlObject::getControl for (" << key.group << "," << key.item << ")";
- QSharedPointer<ControlDoublePrivate> pCDP = ControlDoublePrivate::getControl(key, warn);
+ QSharedPointer<ControlDoublePrivate> pCDP = ControlDoublePrivate::getControl(key, flags);
if (pCDP) {
return pCDP->getCreatorCO();
}
diff --git a/src/control/controlobject.h b/src/control/controlobject.h
index 75bbd39418..fd3f34247f 100644
--- a/src/control/controlobject.h
+++ b/src/control/controlobject.h
@@ -42,10 +42,12 @@ class ControlObject : public QObject {
virtual ~ControlObject();
// Returns a pointer to the ControlObject matching the given ConfigKey
- static ControlObject* getControl(const ConfigKey& key, bool warn = true);
- static inline ControlObject* getControl(const QString& group, const QString& item, bool warn = true) {
+ static ControlObject* getControl(const ConfigKey& key, ControlFlags flags = ControlFlag::None);
+ static inline ControlObject* getControl(const QString& group,
+ const QString& item,
+ ControlFlags flags = ControlFlag::None) {
ConfigKey key(group, item);
- return getControl(key, warn);
+ return getControl(key, flags);
}
QString name() const {
diff --git a/src/control/controlobjectscript.cpp b/src/control/controlobjectscript.cpp
index cb6ced8715..d95d0c0176 100644
--- a/src/control/controlobjectscript.cpp
+++ b/src/control/controlobjectscript.cpp
@@ -3,7 +3,7 @@
#include "control/controlobjectscript.h"
ControlObjectScript::ControlObjectScript(const ConfigKey& key, QObject* pParent)
- : ControlProxy(key, pParent) {
+ : ControlProxy(key, pParent, ControlFlag::NoAssertIfMissing) {
}
bool ControlObjectScript::addScriptConnection(const ScriptConnection& conn) {
diff --git a/src/control/controlproxy.cpp b/src/control/controlproxy.cpp
index 9434ed6e71..d450b9ee2b 100644
--- a/src/control/controlproxy.cpp
+++ b/src/control/controlproxy.cpp
@@ -8,26 +8,26 @@ ControlProxy::ControlProxy(QObject* pParent)
m_pControl(NULL) {
}
-ControlProxy::ControlProxy(const QString& g, const QString& i, QObject* pParent)
+ControlProxy::ControlProxy(const QString& g, const QString& i, QObject* pParent, ControlFlags flags)
: QObject(pParent) {
- initialize(ConfigKey(g, i));
+ initialize(ConfigKey(g, i), flags);
}
-ControlProxy::ControlProxy(const char* g, const char* i, QObject* pParent)
+ControlProxy::ControlProxy(const char* g, const char* i, QObject* pParent, ControlFlags flags)
: QObject(pParent) {
- initialize(ConfigKey(g, i));
+ initialize(ConfigKey(g, i), flags);
}
-ControlProxy::ControlProxy(const ConfigKey& key, QObject* pParent)
+ControlProxy::ControlProxy(const ConfigKey& key, QObject* pParent, ControlFlags flags)
: QObject(pParent) {
- initialize(key);
+ initialize(key, flags);
}
-void ControlProxy::initialize(const ConfigKey& key, bool warn) {
+void ControlProxy::initialize(const ConfigKey& key, ControlFlags flags) {
m_key = key;
// Don't bother looking up the control if key is NULL. Prevents log spew.
if (!key.isNull()) {
- m_pControl = ControlDoublePrivate::getControl(key, warn);
+ m_pControl = ControlDoublePrivate::getControl(key, flags);
}
}
diff --git a/src/control/controlproxy.h b/src/control/controlproxy.h
index 4e70c3d974..daf15121ab 100644
--- a/src/control/controlproxy.h
+++ b/src/control/controlproxy.h
@@ -20,12 +20,20 @@ class ControlProxy : public QObject {
Q_OBJECT
public:
ControlProxy(QObject* pParent = NULL);
- ControlProxy(const QString& g, const QString& i, QObject* pParent = NULL);
- ControlProxy(const char* g, const char* i, QObject* pParent = NULL);
- ControlProxy(const ConfigKey& key, QObject* pParent = NULL);
+ ControlProxy(const QString& g,
+ const QString& i,
+ QObject* pParent = NULL,
+ ControlFlags flags = ControlFlag::None);
+ ControlProxy(const char* g,
+ const char* i,
+ QObject* pParent = NULL,
+ ControlFlags flags = ControlFlag::None);
+ ControlProxy(const ConfigKey& key,
+ QObject* pParent = NULL,
+ ControlFlags flags = ControlFlag::None);
virtual ~ControlProxy();
- void initialize(const ConfigKey& key, bool warn = true);
+ void initialize(const ConfigKey& key, ControlFlags flags = ControlFlag::None);
const ConfigKey& getKey() const {
return m_key;
diff --git a/src/controllers/controllerengine.cpp b/src/controllers/controllerengine.cpp
index cc298e4f07..9ca07d0cc9 100644
--- a/src/controllers/controllerengine.cpp
+++ b/src/controllers/controllerengine.cpp
@@ -676,14 +676,14 @@ void ControllerEngine::setValue(QString group, QString name, double newValue) {
ControlObjectScript* coScript = getControlObjectScript(group, name);
if (coScript != nullptr) {
- ControlObject* pControl = ControlObject::getControl(coScript->getKey());
+ ControlObject* pControl = ControlObject::getControl(
+ coScript->getKey(), ControlFlag::NoAssertIfMissing);
if (pControl && !m_st.ignore(pControl, coScript->getParameterForValue(newValue))) {
coScript->slotSet(newValue);
}
}
}
-
/* -------- ------------------------------------------------------
Purpose: Returns the normalized value of a Mixxx control (for scripts)
Input: Control group (e.g. [Channel1]), Key name (e.g. [filterHigh])
@@ -713,7 +713,8 @@ void ControllerEngine::setParameter(QString group, QString name, double newParam
ControlObjectScript* coScript = getControlObjectScript(group, name);
if (coScript != nullptr) {
- ControlObject* pControl = ControlObject::getControl(coScript->getKey());
+ ControlObject* pControl = ControlObject::getControl(
+ coScript->getKey(), ControlFlag::NoAssertIfMissing);
if (pControl && !m_st.ignore(pControl, newParameter)) {
coScript->setParameter(newParameter);
}
@@ -1440,7 +1441,8 @@ bool ControllerEngine::isScratching(int deck) {
Output: -
-------- ------------------------------------------------------ */
void ControllerEngine::softTakeover(QString group, QString name, bool set) {
- ControlObject* pControl = ControlObject::getControl(ConfigKey(group, name));
+ ControlObject* pControl = ControlObject::getControl(
+ ConfigKey(group, name), ControlFlag::NoAssertIfMissing);
if (!pControl) {
return;
}
@@ -1460,8 +1462,10 @@ void ControllerEngine::softTakeover(QString group, QString name, bool set) {
Input: ControlObject group and key values
Output: -
-------- ------------------------------------------------------ */
-void ControllerEngine::softTakeoverIgnoreNextValue(QString group, const QString name) {
- ControlObject* pControl = ControlObject::getControl(ConfigKey(group, name));
+void ControllerEngine::softTakeoverIgnoreNextValue(
+ QString group, const QString name) {
+ ControlObject* pControl = ControlObject::getControl(
+ ConfigKey(group, name), ControlFlag::NoAssertIfMissing);
if (!pControl) {
return;
}
diff --git a/src/controllers/midi/midioutputhandler.cpp b/src/controllers/midi/midioutputhandler.cpp
index 6c3a045f65..f2ad6aac90 100644
--- a/src/controllers/midi/midioutputhandler.cpp
+++ b/src/controllers/midi/midioutputhandler.cpp
@@ -14,10 +14,10 @@
#include "control/controlobject.h"
MidiOutputHandler::MidiOutputHandler(MidiController* controller,
- const MidiOutputMapping& mapping)
+ const MidiOutputMapping& mapping)
: m_pController(controller),
m_mapping(mapping),
- m_cos(mapping.controlKey, this),
+ m_cos(mapping.controlKey, this, ControlFlag::NoAssertIfMissing),
m_lastVal(-1) { // -1 = virgin
m_cos.connectValueChanged(this, &MidiOutputHandler::controlChanged);
}
diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp
index 347fc5cb31..dcca65e325 100644
--- a/src/mixer/playermanager.cpp
+++ b/src/mixer/playermanager.cpp
@@ -42,30 +42,31 @@ QAtomicPointer<ControlProxy> PlayerManager::m_pCOPNumSamplers;
QAtomicPointer<ControlProxy> PlayerManager::m_pCOPNumPreviewDecks;
PlayerManager::PlayerManager(UserSettingsPointer pConfig,
- SoundManager* pSoundManager,
- EffectsManager* pEffectsManager,
- VisualsManager* pVisualsManager,
- EngineMaster* pEngine) :
- m_mutex(QMutex::Recursive),
- m_pConfig(pConfig),
- m_pSoundManager(pSoundManager),
- m_pEffectsManager(pEffectsManager),
- m_pVisualsManager(pVisualsManager),
- m_pEngine(pEngine),
- // NOTE(XXX) LegacySkinParser relies on these controls being Controls
- // and not ControlProxies.
- m_pCONumDecks(new ControlObject(
- ConfigKey("[Master]", "num_decks"), true, true)),
- m_pCONumSamplers(new ControlObject(
- ConfigKey("[Master]", "num_samplers"), true, true)),
- m_pCONumPreviewDecks(new ControlObject(
- ConfigKey("[Master]", "num_preview_decks"), true, true)),
- m_pCONumMicrophones(new ControlObject(
- ConfigKey("[Master]", "num_microphones"), true, true)),
- m_pCONumAuxiliaries(new ControlObject(
- ConfigKey("[Master]", "num_auxiliaries"), true, true)),
- m_pAutoDjEnabled(make_parented<ControlProxy>("[AutoDJ]", "enabled", this)),
- m_pTrackAnalysisScheduler(TrackAnalysisScheduler::NullPointer()) {
+ SoundManager* pSoundManager,
+ EffectsManager* pEffectsManager,
+ VisualsManager* pVisualsManager,
+ EngineMaster* pEngine)
+ : m_mutex(QMutex::Recursive),
+ m_pConfig(pConfig),
+ m_pSoundManager(pSoundManager),
+ m_pEffectsManager(pEffectsManager),
+ m_pVisualsManager(pVisualsManager),
+ m_pEngine(pEngine),
+ // NOTE(XXX) LegacySkinParser relies on these controls being Controls
+ // and not ControlProxies.
+ m_pCONumDecks(new ControlObject(
+ ConfigKey("[Master]", "num_decks"), true, true)),
+ m_pCONumSamplers(new ControlObject(
+ ConfigKey("[Master]", "num_samplers"), true, true)),
+ m_pCONumPreviewDecks(new ControlObject(
+ ConfigKey("[Master]", "num_preview_decks"), true, true)),
+ m_pCONumMicrophones(new ControlObject(
+ ConfigKey("[Master]", "num_microphones"), true, true)),
+ m_pCONumAuxiliaries(new ControlObject(
+ ConfigKey("[Master]", "num_auxiliaries"), true, true)),
+ m_pAutoDjEnabled(make_parented<ControlProxy>(
+ "[AutoDJ]", "enabled", this, ControlFlag::NoWarnIfMissing)),
+ m_pTrackAnalysisScheduler(TrackAnalysisScheduler::NullPointer()) {
m_pCONumDecks->connectValueChangeRequest(this,
&PlayerManager::slotChangeNumDecks, Qt::DirectConnection);
m_pCONumSamplers->connectValueChangeRequest(this,
diff --git a/src/mixxx.cpp b/src/mixxx.cpp
index a6dc42563a..0fd9dde2a6 100644
--- a/src/mixxx.cpp
+++ b/src/mixxx.cpp
@@ -804,7 +804,7 @@ void MixxxMainWindow::finalize() {
// A deletion early in the list may trigger a destructor
// for a control later in the list, so we check for a null
// pointer each time.
- ControlObject* pCo = ControlObject::getControl(key, false);
+ ControlObject* pCo = ControlObject::getControl(key, ControlFlag::NoAssertIfMissing);
if (pCo) {
delete pCo;
}
diff --git a/src/skin/legacyskinparser.cpp b/src/skin/legacyskinparser.cpp
index f6db4add2f..6d2919c336 100644
--- a/src/skin/legacyskinparser.cpp
+++ b/src/skin/legacyskinparser.cpp
@@ -102,7 +102,7 @@ ControlObject* controlFromConfigKey(const ConfigKey& key, bool bPersist,
}
// Don't warn if the control doesn't exist. Skins use this to create
// controls.
- ControlObject* pControl = ControlObject::getControl(key, false);
+ ControlObject* pControl = ControlObject::getControl(key, ControlFlag::NoWarnIfMissing);
if (pControl) {
if (pCreated) {
diff --git a/src/test/beatstranslatetest.cpp b/src/test/beatstranslatetest.cpp
index f2a183eba4..1352a8f1a1 100644
--- a/src/test/beatstranslatetest.cpp
+++ b/src/test/beatstranslatetest.cpp
@@ -26,8 +26,8 @@ TEST_F(BeatsTranslateTest, SimpleTranslateMatch) {
EXPECT_TRUE(m_pChannel1->getEngineBuffer()->getVisualPlayPos() > 0);
// Make both decks playing.
- ControlObject::getControl(m_sGroup1, "play", true)->set(1.0);
- ControlObject::getControl(m_sGroup2, "play", true)->set(1.0);
+ ControlObject::getControl(m_sGroup1, "play", ControlFlag::None)->set(1.0);
+ ControlObject::getControl(m_sGroup2, "play", ControlFlag::None)->set(1.0);
ProcessBuffer();
// Manually set the "bpm" control... I would like to figure out why this
// doesn't get set naturally, but this will do for now.
diff --git a/src/widget/wmainmenubar.cpp b/src/widget/wmainmenubar.cpp
index 4014382b48..623779447a 100644
--- a/src/widget/wmainmenubar.cpp
+++ b/src/widget/wmainmenubar.cpp
@@ -691,7 +691,7 @@ void VisibilityControlConnection::slotClearControl() {
void VisibilityControlConnection::slotReconnectControl() {
m_pControl.reset(new ControlProxy(this));
- m_pControl->initialize(m_key, false);
+ m_pControl->initialize(m_key, ControlFlag::NoAssertIfMissing);
m_pControl->connectValueChanged(this, &VisibilityControlConnection::slotControlChanged);
m_pAction->setEnabled(m_pControl->valid());
slotControlChanged();