From bd597b97b68f80fd6ef60d4b30c1f54a680b9ea4 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sun, 1 Jan 2023 07:34:16 +0100 Subject: [PATCH] Implemented loopstation color settings --- DrumMachine.pro | 3 + drummachinesettings.cpp | 60 ++++++++ drummachinesettings.h | 16 ++ widgets/drumpadsettingsdialog.ui | 2 +- widgets/loopstationsampleswidget.cpp | 12 +- widgets/loopstationsettingsdialog.cpp | 78 ++++++++++ widgets/loopstationsettingsdialog.h | 31 ++++ widgets/loopstationsettingsdialog.ui | 204 ++++++++++++++++++++++++++ widgets/loopstationwidget.cpp | 4 +- 9 files changed, 405 insertions(+), 5 deletions(-) create mode 100644 widgets/loopstationsettingsdialog.cpp create mode 100644 widgets/loopstationsettingsdialog.h create mode 100644 widgets/loopstationsettingsdialog.ui diff --git a/DrumMachine.pro b/DrumMachine.pro index bb507c4..070b33d 100755 --- a/DrumMachine.pro +++ b/DrumMachine.pro @@ -44,6 +44,7 @@ SOURCES += \ widgets/loopstationpresetdetailwidget.cpp \ widgets/loopstationsampleswidget.cpp \ widgets/loopstationsamplewidget.cpp \ + widgets/loopstationsettingsdialog.cpp \ widgets/loopstationwidget.cpp \ widgets/mainwindow.cpp \ widgets/midibutton.cpp \ @@ -87,6 +88,7 @@ HEADERS += \ widgets/loopstationpresetdetailwidget.h \ widgets/loopstationsampleswidget.h \ widgets/loopstationsamplewidget.h \ + widgets/loopstationsettingsdialog.h \ widgets/loopstationwidget.h \ widgets/mainwindow.h \ widgets/midibutton.h \ @@ -108,6 +110,7 @@ FORMS += \ widgets/loopstationpresetdetailwidget.ui \ widgets/loopstationsampleswidget.ui \ widgets/loopstationsamplewidget.ui \ + widgets/loopstationsettingsdialog.ui \ widgets/loopstationwidget.ui \ widgets/mainwindow.ui \ widgets/settingsdialog.ui \ diff --git a/drummachinesettings.cpp b/drummachinesettings.cpp index 7285620..4b0e37f 100644 --- a/drummachinesettings.cpp +++ b/drummachinesettings.cpp @@ -386,6 +386,21 @@ void DrumMachineSettings::setLoopstationPrevPreset(const MidiLearnSetting &value setLearnSetting("loopstation/prevPreset", value); } +quint8 DrumMachineSettings::loopstationColorPrevPreset() const +{ + return value("loopstation/colorPrevPreset", defaultLoopstationColorPrevPreset()).value(); +} + +quint8 DrumMachineSettings::defaultLoopstationColorPrevPreset() const +{ + return 127; +} + +void DrumMachineSettings::setLoopstationColorPrevPreset(quint8 loopstationColorPrevPreset) +{ + setValue("loopstation/colorPrevPreset", loopstationColorPrevPreset); +} + MidiLearnSetting DrumMachineSettings::loopstationNextPreset() const { return learnSetting("loopstation/nextPreset"); @@ -396,6 +411,21 @@ void DrumMachineSettings::setLoopstationNextPreset(const MidiLearnSetting &value setLearnSetting("loopstation/nextPreset", value); } +quint8 DrumMachineSettings::loopstationColorNextPreset() const +{ + return value("loopstation/colorNextPreset", defaultLoopstationColorNextPreset()).value(); +} + +quint8 DrumMachineSettings::defaultLoopstationColorNextPreset() const +{ + return 127; +} + +void DrumMachineSettings::setLoopstationColorNextPreset(quint8 loopstationColorNextPreset) +{ + setValue("loopstation/colorNextPreset", loopstationColorNextPreset); +} + MidiLearnSetting DrumMachineSettings::loopstationPlayPause() const { return learnSetting("loopstation/playPause"); @@ -406,6 +436,21 @@ void DrumMachineSettings::setLoopstationPlayPause(const MidiLearnSetting &value) setLearnSetting("loopstation/playPause", value); } +quint8 DrumMachineSettings::loopstationColorPlayPause() const +{ + return value("loopstation/colorPlayPause", defaultLoopstationColorPlayPause()).value(); +} + +quint8 DrumMachineSettings::defaultLoopstationColorPlayPause() const +{ + return 3; +} + +void DrumMachineSettings::setLoopstationColorPlayPause(quint8 loopstationColorPlayPause) +{ + setValue("loopstation/colorPlayPause", loopstationColorPlayPause); +} + MidiLearnSetting DrumMachineSettings::loopstationStop() const { return learnSetting("loopstation/stop"); @@ -416,6 +461,21 @@ void DrumMachineSettings::setLoopstationStop(const MidiLearnSetting &value) setLearnSetting("loopstation/stop", value); } +quint8 DrumMachineSettings::loopstationColorStop() const +{ + return value("loopstation/colorStop", defaultLoopstationColorStop()).value(); +} + +quint8 DrumMachineSettings::defaultLoopstationColorStop() const +{ + return 60; +} + +void DrumMachineSettings::setLoopstationColorStop(quint8 loopstationColorStop) +{ + setValue("loopstation/colorStop", loopstationColorStop); +} + MidiLearnSetting DrumMachineSettings::loopstationSample(quint8 pad) const { return learnSetting(QString{"loopstation/pad%0"}.arg(pad)); diff --git a/drummachinesettings.h b/drummachinesettings.h index 8d50711..8ca896f 100644 --- a/drummachinesettings.h +++ b/drummachinesettings.h @@ -121,15 +121,31 @@ public: MidiLearnSetting loopstationPrevPreset() const; void setLoopstationPrevPreset(const MidiLearnSetting &value); + quint8 loopstationColorPrevPreset() const; + quint8 defaultLoopstationColorPrevPreset() const; + void setLoopstationColorPrevPreset(quint8 loopstationColorPrevPreset); + MidiLearnSetting loopstationNextPreset() const; void setLoopstationNextPreset(const MidiLearnSetting &value); + quint8 loopstationColorNextPreset() const; + quint8 defaultLoopstationColorNextPreset() const; + void setLoopstationColorNextPreset(quint8 loopstationColorNextPreset); + MidiLearnSetting loopstationPlayPause() const; void setLoopstationPlayPause(const MidiLearnSetting &value); + quint8 loopstationColorPlayPause() const; + quint8 defaultLoopstationColorPlayPause() const; + void setLoopstationColorPlayPause(quint8 loopstationColorPlayPause); + MidiLearnSetting loopstationStop() const; void setLoopstationStop(const MidiLearnSetting &value); + quint8 loopstationColorStop() const; + quint8 defaultLoopstationColorStop() const; + void setLoopstationColorStop(quint8 loopstationColorStop); + MidiLearnSetting loopstationSample(quint8 pad) const; void setLoopstationSample(quint8 pad, const MidiLearnSetting &value); diff --git a/widgets/drumpadsettingsdialog.ui b/widgets/drumpadsettingsdialog.ui index 9f7c8d8..631165d 100644 --- a/widgets/drumpadsettingsdialog.ui +++ b/widgets/drumpadsettingsdialog.ui @@ -296,7 +296,7 @@ Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults diff --git a/widgets/loopstationsampleswidget.cpp b/widgets/loopstationsampleswidget.cpp index 4cff50d..f2ee14f 100644 --- a/widgets/loopstationsampleswidget.cpp +++ b/widgets/loopstationsampleswidget.cpp @@ -5,6 +5,7 @@ #include "loopstationpresets.h" #include "drummachinesettings.h" +#include "loopstationsettingsdialog.h" LoopStationSamplesWidget::LoopStationSamplesWidget(QWidget *parent) : QWidget{parent}, @@ -152,14 +153,14 @@ void LoopStationSamplesWidget::sendColors() .cmd = m_ui->pushButtonPlayPause->learnSetting().cmd, .flag = true, .note = m_ui->pushButtonPlayPause->learnSetting().note, - .velocity = 3 + .velocity = m_settings ? m_settings->loopstationColorPlayPause() : quint8{3} }); emit sendMidi(midi::MidiMessage { .channel = m_ui->pushButtonStop->learnSetting().channel, .cmd = m_ui->pushButtonStop->learnSetting().cmd, .flag = true, .note = m_ui->pushButtonStop->learnSetting().note, - .velocity = 60 + .velocity = m_settings ? m_settings->loopstationColorStop() : quint8{60} }); for (LoopStationSampleWidget &widget : getWidgets()) @@ -168,7 +169,14 @@ void LoopStationSamplesWidget::sendColors() void LoopStationSamplesWidget::showSettings() { + if (!m_settings) + { + qWarning() << "settings are missing"; + return; + } + LoopStationSettingsDialog dialog{*m_settings, this}; + dialog.exec(); } void LoopStationSamplesWidget::timeout() diff --git a/widgets/loopstationsettingsdialog.cpp b/widgets/loopstationsettingsdialog.cpp new file mode 100644 index 0000000..36f21c9 --- /dev/null +++ b/widgets/loopstationsettingsdialog.cpp @@ -0,0 +1,78 @@ +#include "loopstationsettingsdialog.h" +#include "ui_loopstationsettingsdialog.h" + +#include +#include + +#include "drummachinesettings.h" + +LoopStationSettingsDialog::LoopStationSettingsDialog(DrumMachineSettings &settings, QWidget *parent) : + QDialog{parent}, + m_ui{std::make_unique()}, + m_settings{settings} +{ + m_ui->setupUi(this); + + connect(m_ui->buttonBox, &QDialogButtonBox::clicked, this, &LoopStationSettingsDialog::buttonClicked); + + resetFields(); +} + +LoopStationSettingsDialog::~LoopStationSettingsDialog() = default; + +void LoopStationSettingsDialog::accept() +{ + if (const quint8 colorPrevPreset = m_ui->spinBoxColorPrevPreset->value(); + m_settings.loopstationColorPrevPreset() != colorPrevPreset) + m_settings.setLoopstationColorPrevPreset(colorPrevPreset); + + if (const quint8 colorNextPreset = m_ui->spinBoxColorNextPreset->value(); + m_settings.loopstationColorNextPreset() != colorNextPreset) + m_settings.setLoopstationColorNextPreset(colorNextPreset); + + if (const quint8 colorPlayPause = m_ui->spinBoxColorPlayPause->value(); + m_settings.loopstationColorPlayPause() != colorPlayPause) + m_settings.setLoopstationColorPlayPause(colorPlayPause); + + if (const quint8 colorStop = m_ui->spinBoxColorStop->value(); + m_settings.loopstationColorStop() != colorStop) + m_settings.setLoopstationColorStop(colorStop); + + QDialog::accept(); +} + +void LoopStationSettingsDialog::buttonClicked(QAbstractButton *button) +{ + if (!button) + { + qWarning() << "invalid button"; + return; + } + + switch (m_ui->buttonBox->standardButton(button)) + { + case QDialogButtonBox::Reset: + resetFields(); + return; + case QDialogButtonBox::RestoreDefaults: + restoreDefaults(); + return; + default:; + } +} + +void LoopStationSettingsDialog::resetFields() +{ + m_ui->spinBoxColorPrevPreset->setValue(m_settings.loopstationColorPrevPreset()); + m_ui->spinBoxColorNextPreset->setValue(m_settings.loopstationColorNextPreset()); + m_ui->spinBoxColorPlayPause->setValue(m_settings.loopstationColorPlayPause()); + m_ui->spinBoxColorStop->setValue(m_settings.loopstationColorStop()); +} + +void LoopStationSettingsDialog::restoreDefaults() +{ + m_ui->spinBoxColorPrevPreset->setValue(m_settings.defaultLoopstationColorPrevPreset()); + m_ui->spinBoxColorNextPreset->setValue(m_settings.defaultLoopstationColorNextPreset()); + m_ui->spinBoxColorPlayPause->setValue(m_settings.defaultLoopstationColorPlayPause()); + m_ui->spinBoxColorStop->setValue(m_settings.defaultLoopstationColorStop()); +} diff --git a/widgets/loopstationsettingsdialog.h b/widgets/loopstationsettingsdialog.h new file mode 100644 index 0000000..54b009c --- /dev/null +++ b/widgets/loopstationsettingsdialog.h @@ -0,0 +1,31 @@ +#pragma once + +#include + +#include + +namespace Ui { class LoopStationSettingsDialog; } +class DrumMachineSettings; +class QAbstractButton; + +class LoopStationSettingsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit LoopStationSettingsDialog(DrumMachineSettings &settings, QWidget *parent = nullptr); + ~LoopStationSettingsDialog() override; + +public slots: + void accept() override; + +private slots: + void buttonClicked(QAbstractButton *button); + void resetFields(); + void restoreDefaults(); + +private: + const std::unique_ptr m_ui; + + DrumMachineSettings &m_settings; +}; diff --git a/widgets/loopstationsettingsdialog.ui b/widgets/loopstationsettingsdialog.ui new file mode 100644 index 0000000..52fc36d --- /dev/null +++ b/widgets/loopstationsettingsdialog.ui @@ -0,0 +1,204 @@ + + + LoopStationSettingsDialog + + + + 0 + 0 + 439 + 230 + + + + Dialog + + + + + + + + Color Prev Preset: + + + spinBoxColorPrevPreset + + + + + + + + + 255 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Color Next Preset: + + + spinBoxColorNextPreset + + + + + + + Color Play Pause: + + + spinBoxColorPlayPause + + + + + + + Color Stop: + + + spinBoxColorStop + + + + + + + + + 255 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 255 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 255 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults + + + + + + + + + buttonBox + accepted() + LoopStationSettingsDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + LoopStationSettingsDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/widgets/loopstationwidget.cpp b/widgets/loopstationwidget.cpp index b71bdfb..d31bf4f 100644 --- a/widgets/loopstationwidget.cpp +++ b/widgets/loopstationwidget.cpp @@ -97,14 +97,14 @@ void LoopStationWidget::sendColors() .cmd = m_ui->pushButtonUp->learnSetting().cmd, .flag = true, .note = m_ui->pushButtonUp->learnSetting().note, - .velocity = 127 + .velocity = m_settings ? m_settings->loopstationColorPrevPreset() : quint8{127} }); emit sendMidi(midi::MidiMessage { .channel = m_ui->pushButtonDown->learnSetting().channel, .cmd = m_ui->pushButtonDown->learnSetting().cmd, .flag = true, .note = m_ui->pushButtonDown->learnSetting().note, - .velocity = 127 + .velocity = m_settings ? m_settings->loopstationColorNextPreset() : quint8{127} }); m_ui->samplesWidget->sendColors();