Skip to content

Commit

Permalink
Merge pull request #13656 from acolombier/fix/controller-setting-inte…
Browse files Browse the repository at this point in the history
…ger-negative-range

fix: allow controller setting integer to have a negative range
Swiftb0y authored Sep 20, 2024
2 parents cf62f3a + 9cf405f commit 5b895b8
Showing 2 changed files with 53 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/controllers/legacycontrollersettings.h
Original file line number Diff line number Diff line change
@@ -6,6 +6,16 @@
#include "controllers/legacycontrollersettingslayout.h"
#include "util/parented_ptr.h"

namespace {
template<class T>
bool valid_range(T min, T max, T step) {
VERIFY_OR_DEBUG_ASSERT(step >= 0) {
return false;
}
return step > 0 && ((min <= 0 && min + step <= max) || (max >= 0 && max - step >= min));
}
} // namespace

class QSpinBox;
class QDoubleSpinBox;

@@ -218,7 +228,13 @@ class LegacyControllerNumberSetting
}
m_defaultValue = ValueDeserializer(element.attribute("default"), &isOk);
if (!isOk) {
m_defaultValue = 0;
if (0 > m_maxValue) {
m_defaultValue = m_maxValue;
} else if (0 < m_minValue) {
m_defaultValue = m_minValue;
} else {
m_defaultValue = 0;
}
}
reset();
save();
@@ -263,7 +279,7 @@ class LegacyControllerNumberSetting
m_defaultValue >= m_minValue && m_savedValue >= m_minValue &&
m_editedValue >= m_minValue && m_defaultValue <= m_maxValue &&
m_savedValue <= m_maxValue && m_editedValue <= m_maxValue &&
m_stepValue > 0 && m_stepValue < m_maxValue;
valid_range(m_minValue, m_maxValue, m_stepValue);
}

static AbstractLegacyControllerSetting* createFrom(const QDomElement& element) {
35 changes: 35 additions & 0 deletions src/test/controller_mapping_settings_test.cpp
Original file line number Diff line number Diff line change
@@ -511,3 +511,38 @@ TEST_F(LegacyControllerMappingSettingsTest, discardDuplicateSettings) {
ASSERT_EQ(settings.at(1)->value().toNumber(), 50);
ASSERT_EQ(settings.at(2)->value().toString(), "myOptionValue1");
}

TEST_F(LegacyControllerMappingSettingsTest, handleNumberWithNegativeRange) {
QDomDocument doc;
QString dom;
QTextStream(&dom)
<< QString(kValidInteger).arg("0", "-500", "0", "1");
doc.setContent(
QString("<?xml version=\"1.0\" "
"encoding=\"utf-8\"?><MixxxControllerPreset><settings>%1</"
"settings></MixxxControllerPreset>")
.arg(dom));

auto pMapping = LegacyDummyMappingFileHandler::loadDummyMapping(
doc.documentElement(), "/fake/path");

ASSERT_EQ(pMapping->getSettings().size(), 1);
ASSERT_EQ(pMapping->getSettings().at(0)->variableName(), "myInteger1");
ASSERT_EQ(pMapping->getSettings().at(0)->value().toNumber(), 0);

dom.clear();
QTextStream(&dom)
<< QString(kValidInteger).arg("20", "-100", "100", "50");
doc.setContent(
QString("<?xml version=\"1.0\" "
"encoding=\"utf-8\"?><MixxxControllerPreset><settings>%1</"
"settings></MixxxControllerPreset>")
.arg(dom));

pMapping = LegacyDummyMappingFileHandler::loadDummyMapping(
doc.documentElement(), "/fake/path");

ASSERT_EQ(pMapping->getSettings().size(), 1);
ASSERT_EQ(pMapping->getSettings().at(0)->variableName(), "myInteger1");
ASSERT_EQ(pMapping->getSettings().at(0)->value().toNumber(), 20);
}

0 comments on commit 5b895b8

Please sign in to comment.