Skip to content

Commit 6315896

Browse files
committed
Add enable checkbox to MIDI delay
1 parent adee23e commit 6315896

11 files changed

Lines changed: 114 additions & 54 deletions

File tree

src/application/models/column_settings_model.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ void ColumnSettingsModel::reset()
3434
m_settings = {};
3535

3636
emit delayChanged();
37+
emit midiDelayEnabledChanged();
3738
emit midiDelayLinesChanged();
3839
emit midiDelayFeedbackChanged();
3940
emit midiDelayMaxRepetitionsChanged();
@@ -61,6 +62,7 @@ void ColumnSettingsModel::requestData()
6162
void ColumnSettingsModel::setColumnSettings(const ColumnSettings & settings)
6263
{
6364
const bool delayChanged = m_settings.delay != settings.delay;
65+
const bool midiDelayEnabledChanged = m_settings.midiDelayEnabled != settings.midiDelayEnabled;
6466
const bool midiDelayLinesChanged = m_settings.midiDelayLines != settings.midiDelayLines;
6567
const bool midiDelayFeedbackChanged = m_settings.midiDelayFeedback != settings.midiDelayFeedback;
6668
const bool midiDelayMaxRepetitionsChanged = m_settings.midiDelayMaxRepetitions != settings.midiDelayMaxRepetitions;
@@ -84,6 +86,9 @@ void ColumnSettingsModel::setColumnSettings(const ColumnSettings & settings)
8486
if (delayChanged) {
8587
emit this->delayChanged();
8688
}
89+
if (midiDelayEnabledChanged) {
90+
emit this->midiDelayEnabledChanged();
91+
}
8792
if (midiDelayLinesChanged) {
8893
emit this->midiDelayLinesChanged();
8994
}
@@ -176,6 +181,19 @@ void ColumnSettingsModel::setDelay(int delay)
176181
}
177182
}
178183

184+
bool ColumnSettingsModel::midiDelayEnabled() const
185+
{
186+
return m_settings.midiDelayEnabled;
187+
}
188+
189+
void ColumnSettingsModel::setMidiDelayEnabled(bool enabled)
190+
{
191+
if (m_settings.midiDelayEnabled != enabled) {
192+
m_settings.midiDelayEnabled = enabled;
193+
emit midiDelayEnabledChanged();
194+
}
195+
}
196+
179197
double ColumnSettingsModel::midiDelayLines() const
180198
{
181199
return m_settings.midiDelayLines;

src/application/models/column_settings_model.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class ColumnSettingsModel : public QObject
3030
Q_PROPERTY(quint64 columnIndex READ columnIndex WRITE setColumnIndex NOTIFY columnIndexChanged)
3131

3232
Q_PROPERTY(int delay READ delay WRITE setDelay NOTIFY delayChanged)
33+
Q_PROPERTY(bool midiDelayEnabled READ midiDelayEnabled WRITE setMidiDelayEnabled NOTIFY midiDelayEnabledChanged)
3334
Q_PROPERTY(double midiDelayLines READ midiDelayLines WRITE setMidiDelayLines NOTIFY midiDelayLinesChanged)
3435
Q_PROPERTY(int midiDelayFeedback READ midiDelayFeedback WRITE setMidiDelayFeedback NOTIFY midiDelayFeedbackChanged)
3536
Q_PROPERTY(int midiDelayMaxRepetitions READ midiDelayMaxRepetitions WRITE setMidiDelayMaxRepetitions NOTIFY midiDelayMaxRepetitionsChanged)
@@ -68,6 +69,9 @@ class ColumnSettingsModel : public QObject
6869
int delay() const;
6970
void setDelay(int delay);
7071

72+
bool midiDelayEnabled() const;
73+
void setMidiDelayEnabled(bool enabled);
74+
7175
double midiDelayLines() const;
7276
void setMidiDelayLines(double midiDelayLines);
7377

@@ -124,6 +128,7 @@ class ColumnSettingsModel : public QObject
124128
void columnIndexChanged();
125129

126130
void delayChanged();
131+
void midiDelayEnabledChanged();
127132
void midiDelayLinesChanged();
128133
void midiDelayFeedbackChanged();
129134
void midiDelayMaxRepetitionsChanged();

src/common/constants.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,11 @@ QString xmlKeyDelay()
234234
return "delay";
235235
}
236236

237+
QString xmlKeyMidiDelayEnabled()
238+
{
239+
return "midiDelayEnabled";
240+
}
241+
237242
QString xmlKeyMidiDelayLines()
238243
{
239244
return "midiDelayLines";

src/common/constants.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ QString xmlKeyEnabled();
8484
QString xmlKeyCutoff();
8585

8686
QString xmlKeyDelay();
87+
QString xmlKeyMidiDelayEnabled();
8788
QString xmlKeyMidiDelayLines();
8889
QString xmlKeyMidiDelayFeedback();
8990
QString xmlKeyMidiDelayMaxRepetitions();

src/domain/column_settings.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ void ColumnSettings::serializeToXml(QXmlStreamWriter & writer) const
3535
writer.writeStartElement(Constants::NahdXml::xmlKeyColumnSettings());
3636

3737
writer.writeAttribute(Constants::NahdXml::xmlKeyDelay(), QString::number(delay.count()));
38+
writer.writeAttribute(Constants::NahdXml::xmlKeyMidiDelayEnabled(), midiDelayEnabled ? Constants::NahdXml::xmlValueTrue() : Constants::NahdXml::xmlValueFalse());
3839
writer.writeAttribute(Constants::NahdXml::xmlKeyMidiDelayLines(), QString::number(midiDelayLines));
3940
writer.writeAttribute(Constants::NahdXml::xmlKeyMidiDelayFeedback(), QString::number(midiDelayFeedback));
4041
writer.writeAttribute(Constants::NahdXml::xmlKeyMidiDelayMaxRepetitions(), QString::number(midiDelayMaxRepetitions));
@@ -64,6 +65,7 @@ ColumnSettings::ColumnSettingsU ColumnSettings::deserializeFromXml(QXmlStreamRea
6465
auto settings = std::make_unique<ColumnSettings>();
6566

6667
settings->delay = std::chrono::milliseconds { Utils::Xml::readIntAttribute(reader, Constants::NahdXml::xmlKeyDelay(), false).value_or(0) };
68+
settings->midiDelayEnabled = Utils::Xml::readBoolAttribute(reader, Constants::NahdXml::xmlKeyMidiDelayEnabled(), false).value_or(false);
6769
settings->midiDelayLines = Utils::Xml::readDoubleAttribute(reader, Constants::NahdXml::xmlKeyMidiDelayLines(), false).value_or(0.0);
6870
settings->midiDelayFeedback = Utils::Xml::readIntAttribute(reader, Constants::NahdXml::xmlKeyMidiDelayFeedback(), false).value_or(100);
6971
settings->midiDelayMaxRepetitions = Utils::Xml::readIntAttribute(reader, Constants::NahdXml::xmlKeyMidiDelayMaxRepetitions(), false).value_or(8);
@@ -88,8 +90,9 @@ ColumnSettings::ColumnSettingsU ColumnSettings::deserializeFromXml(QXmlStreamRea
8890

8991
QString ColumnSettings::toString() const
9092
{
91-
return QStringLiteral("ColumnSettings(delay=%1, midiDelayLines=%2, midiDelayFeedback=%3, midiDelayMaxRepetitions=%4, transpose=%5, chordAutomation: note1(offset=%6, velocity=%7, delay=%8), note2(offset=%9, velocity=%10, delay=%11), note3(offset=%12, velocity=%13, delay=%14))")
93+
return QStringLiteral("ColumnSettings(delay=%1, midiDelayEnabled=%2, midiDelayLines=%3, midiDelayFeedback=%4, midiDelayMaxRepetitions=%5, transpose=%6, chordAutomation: note1(offset=%7, velocity=%8, delay=%9), note2(offset=%10, velocity=%11, delay=%12), note3(offset=%13, velocity=%14, delay=%15))")
9294
.arg(delay.count())
95+
.arg(midiDelayEnabled)
9396
.arg(midiDelayLines)
9497
.arg(midiDelayFeedback)
9598
.arg(midiDelayMaxRepetitions)

src/domain/column_settings.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class ColumnSettings
3838

3939
int transpose { 0 };
4040

41+
bool midiDelayEnabled { false };
4142
double midiDelayLines { 0.0 };
4243
int midiDelayFeedback { 100 };
4344
int midiDelayMaxRepetitions { 8 };
@@ -70,7 +71,7 @@ class ColumnSettings
7071

7172
bool isEnabled() const
7273
{
73-
return delay.count() || transpose || midiDelayLines != 0.0 || chordAutomationSettings.isEnabled();
74+
return delay.count() || transpose || midiDelayEnabled || chordAutomationSettings.isEnabled();
7475
}
7576

7677
void serializeToXml(QXmlStreamWriter & writer) const;

src/domain/song.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ Song::EventList Song::generateAutoNoteOffsForDanglingNotes(size_t tick, ActiveNo
657657
}
658658

659659
const auto settings = columnSettings(noteData->track(), noteData->column());
660-
if (!settings || settings->midiDelayLines <= 0.0) {
660+
if (!settings || !settings->midiDelayEnabled || settings->midiDelayLines <= 0.0) {
661661
continue;
662662
}
663663

src/unit_tests/column_settings_model_test/column_settings_model_test.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ void ColumnSettingsModelTest::test_initialValues()
2525
QCOMPARE(model.trackIndex(), 0);
2626
QCOMPARE(model.columnIndex(), 0);
2727
QCOMPARE(model.delay(), 0);
28+
QCOMPARE(model.midiDelayEnabled(), false);
2829
QCOMPARE(model.chordNote1Offset(), 0);
2930
QCOMPARE(model.chordNote1Velocity(), 100);
3031
QCOMPARE(model.chordNote1Delay(), 0);
@@ -43,6 +44,9 @@ void ColumnSettingsModelTest::test_settersAndGetters()
4344
model.setDelay(123);
4445
QCOMPARE(model.delay(), 123);
4546

47+
model.setMidiDelayEnabled(true);
48+
QCOMPARE(model.midiDelayEnabled(), true);
49+
4650
model.setChordNote1Offset(12);
4751
QCOMPARE(model.chordNote1Offset(), 12);
4852

@@ -96,6 +100,10 @@ void ColumnSettingsModelTest::test_signals()
96100
model.setDelay(1);
97101
QCOMPARE(delaySpy.count(), 1);
98102

103+
QSignalSpy midiDelayEnabledSpy { &model, &ColumnSettingsModel::midiDelayEnabledChanged };
104+
model.setMidiDelayEnabled(true);
105+
QCOMPARE(midiDelayEnabledSpy.count(), 1);
106+
99107
QSignalSpy note1OffsetSpy { &model, &ColumnSettingsModel::chordNote1OffsetChanged };
100108
model.setChordNote1Offset(1);
101109
QCOMPARE(note1OffsetSpy.count(), 1);
@@ -125,12 +133,14 @@ void ColumnSettingsModelTest::test_reset_shouldResetToDefaultValues()
125133
{
126134
ColumnSettingsModel model;
127135
model.setDelay(123);
136+
model.setMidiDelayEnabled(true);
128137
model.setChordNote1Offset(12);
129138
model.setArpeggiatorEnabled(true);
130139

131140
model.reset();
132141

133142
QCOMPARE(model.delay(), 0);
143+
QCOMPARE(model.midiDelayEnabled(), false);
134144
QCOMPARE(model.chordNote1Offset(), 0);
135145
QCOMPARE(model.arpeggiatorEnabled(), false);
136146
}
@@ -143,6 +153,7 @@ void ColumnSettingsModelTest::test_save_shouldEmitSaveRequestedWithCorrectData()
143153
model.setTrackIndex(1);
144154
model.setColumnIndex(2);
145155
model.setDelay(666);
156+
model.setMidiDelayEnabled(true);
146157
model.setChordNote1Offset(4);
147158
model.setChordNote1Velocity(80);
148159
model.setChordNote1Delay(11);
@@ -166,6 +177,7 @@ void ColumnSettingsModelTest::test_save_shouldEmitSaveRequestedWithCorrectData()
166177

167178
const auto settings = qvariant_cast<ColumnSettings>(arguments.at(2));
168179
QCOMPARE(settings.delay.count(), 666);
180+
QCOMPARE(settings.midiDelayEnabled, true);
169181
QCOMPARE(settings.chordAutomationSettings.note1.offset, 4);
170182
QCOMPARE(settings.chordAutomationSettings.note1.velocity, 80);
171183
QCOMPARE(settings.chordAutomationSettings.note1.delay, 11);

src/unit_tests/song_test/song_test.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,7 @@ void SongTest::test_renderToEvents_midiDelaySet_shouldApplyDelay()
557557
song.setInstrument(0, instrument1);
558558

559559
const auto colSettings = std::make_shared<ColumnSettings>();
560+
colSettings->midiDelayEnabled = true;
560561
colSettings->midiDelayLines = 1.0;
561562
colSettings->midiDelayFeedback = 50;
562563
colSettings->midiDelayMaxRepetitions = 2;

src/unit_tests/xml_serialization_test/xml_serialization_test.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ void XmlSerializationTest::test_toXmlFromXml_columnSettings_shouldSaveAndLoad()
113113
EditorService editorServiceOut { std::make_shared<SelectionService>(), std::make_shared<SettingsService>(), std::make_shared<AutomationService>(std::make_shared<PropertyService>()) };
114114
const auto settingsOut = std::make_shared<ColumnSettings>();
115115
settingsOut->delay = std::chrono::milliseconds { 123 };
116+
settingsOut->midiDelayEnabled = true;
116117
settingsOut->midiDelayLines = 1.5;
117118
settingsOut->midiDelayFeedback = 75;
118119
settingsOut->midiDelayMaxRepetitions = 12;
@@ -136,6 +137,7 @@ void XmlSerializationTest::test_toXmlFromXml_columnSettings_shouldSaveAndLoad()
136137

137138
QVERIFY(settingsIn);
138139
QCOMPARE(settingsIn->delay, settingsOut->delay);
140+
QCOMPARE(settingsIn->midiDelayEnabled, settingsOut->midiDelayEnabled);
139141
QCOMPARE(settingsIn->midiDelayLines, settingsOut->midiDelayLines);
140142
QCOMPARE(settingsIn->midiDelayFeedback, settingsOut->midiDelayFeedback);
141143
QCOMPARE(settingsIn->midiDelayMaxRepetitions, settingsOut->midiDelayMaxRepetitions);

0 commit comments

Comments
 (0)