diff --git a/CMakeLists.txt b/CMakeLists.txt index 36c5305..098ffda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,11 +28,11 @@ qt_add_executable(appscheincommander devicetyperegistersmodel.h devicetyperegistersmodel.cpp presetsmodel.h presetsmodel.cpp deviceregistervaluehelper.h deviceregistervaluehelper.cpp - presetmodel.h presetmodel.cpp projectloader.h projectloader.cpp scheincommandersettings.h scheincommandersettings.cpp iconutils.h iconutils.cpp presetstepsmodel.h presetstepsmodel.cpp + patternmaker.h patternmaker.cpp ) qt_add_qml_module(appscheincommander diff --git a/PresetsSettingsPage.qml b/PresetsSettingsPage.qml index 2bb2f45..d4425d4 100644 --- a/PresetsSettingsPage.qml +++ b/PresetsSettingsPage.qml @@ -90,6 +90,8 @@ ColumnLayout { } EditableListView { + id: presetStepsListView + Layout.fillWidth: true enabled: presetsListView.currentIndex !== -1 @@ -138,31 +140,36 @@ ColumnLayout { ColumnLayout { Layout.fillWidth: true - PresetModel { - id: presetModel - controller: __controller - presetId: presetsListView.currentData ? presetsListView.currentData.id : -1 - } - RowLayout { + enabled: presetStepsListView.currentIndex >= 0 + Button { text: qsTr('Auf Schieberegler\nunten kopieren'); - onPressed: presetModel.copyToFaders() + onPressed: presetStepsModel.copyToFaders(presetStepsListView.currentIndex) } Button { text: qsTr('Von Schieberegler\nunten kopieren'); - onPressed: presetModel.copyFromFaders() + onPressed: presetStepsModel.copyFromFaders(presetStepsListView.currentIndex) } } + Item { + Layout.fillHeight: true + } + + PatternMaker { + id: patternMaker + controller: __controller + } + RowLayout { Button { text: qsTr('Alle auf\n0 setzen'); - onPressed: presetModel.setAllFadersLow() + onPressed: patternMaker.setAllFadersLow() } Button { text: qsTr('Alle auf\nMaximum setzen'); - onPressed: presetModel.setAllFadersMax() + onPressed: patternMaker.setAllFadersMax() } } @@ -195,13 +202,9 @@ ColumnLayout { Button { text: qsTr('Set') - onPressed: presetModel.setPattern(nSpinBox.value, kSpinBox.value, registerTypeComboBox.currentValue, valueSlider.value) + onPressed: patternMaker.setPattern(nSpinBox.value, kSpinBox.value, registerTypeComboBox.currentValue, valueSlider.value) } } - - Item { - Layout.fillHeight: true - } } } } diff --git a/presetmodel.cpp b/patternmaker.cpp similarity index 68% rename from presetmodel.cpp rename to patternmaker.cpp index 6627381..93b52ab 100644 --- a/presetmodel.cpp +++ b/patternmaker.cpp @@ -1,9 +1,6 @@ -#include "presetmodel.h" +#include "patternmaker.h" -#include -#include - -void PresetModel::setController(DmxController *controller) +void PatternMaker::setController(DmxController *controller) { if (m_controller == controller) return; @@ -25,78 +22,7 @@ void PresetModel::setController(DmxController *controller) emit controllerChanged(m_controller); } -void PresetModel::setPresetId(int presetId) -{ - if (m_presetId == presetId) - return; - - m_presetId = presetId; - - emit presetIdChanged(m_presetId); -} - -void PresetModel::copyFromFaders() -{ - if (!m_controller) - { - qDebug() << "hilfe" << __LINE__; - return; - } - - if (m_presetId == -1) - { - qDebug() << "hilfe" << __LINE__; - return; - } - - auto presetPtr = m_controller->lightProject().presets.findById(m_presetId); - if (!presetPtr) - { - qDebug() << "hilfe" << __LINE__; - return; - } - - auto &preset = *presetPtr; - - { - QMutexLocker locker{&m_controller->mutex()}; - preset.steps = { { .sliders=m_controller->sliderStates() } }; - } -} - -void PresetModel::copyToFaders() -{ - if (!m_controller) - { - qDebug() << "hilfe" << __LINE__; - return; - } - - if (m_presetId == -1) - { - qDebug() << "hilfe" << __LINE__; - return; - } - - const auto presetPtr = m_controller->lightProject().presets.findById(m_presetId); - if (!presetPtr) - { - qDebug() << "hilfe" << __LINE__; - return; - } - - const auto &preset = *presetPtr; - - if (preset.steps.empty()) - { - qDebug() << "hilfe" << __LINE__; - return; - } - - m_controller->setSliderStates(preset.steps.front().sliders); -} - -void PresetModel::setAllFadersLow() +void PatternMaker::setAllFadersLow() { if (!m_controller) { @@ -134,7 +60,7 @@ void PresetModel::setAllFadersLow() m_controller->setSliderStates(std::move(sliderStates)); } -void PresetModel::setAllFadersMax() +void PatternMaker::setAllFadersMax() { if (!m_controller) { @@ -172,7 +98,7 @@ void PresetModel::setAllFadersMax() m_controller->setSliderStates(std::move(sliderStates)); } -void PresetModel::setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value) +void PatternMaker::setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value) { if (!m_controller) { diff --git a/presetmodel.h b/patternmaker.h similarity index 67% rename from presetmodel.h rename to patternmaker.h index 0fb9c66..794b645 100644 --- a/presetmodel.h +++ b/patternmaker.h @@ -5,12 +5,11 @@ #include "dmxcontroller.h" -class PresetModel : public QObject +class PatternMaker : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(DmxController* controller READ controller WRITE setController NOTIFY controllerChanged) - Q_PROPERTY(int presetId READ presetId WRITE setPresetId NOTIFY presetIdChanged) public: using QObject::QObject; @@ -19,20 +18,13 @@ public: const DmxController *controller() const { return m_controller; } void setController(DmxController *controller); - int presetId() const { return m_presetId; } - void setPresetId(int presetId); - - Q_INVOKABLE void copyFromFaders(); - Q_INVOKABLE void copyToFaders(); Q_INVOKABLE void setAllFadersLow(); Q_INVOKABLE void setAllFadersMax(); Q_INVOKABLE void setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value); signals: void controllerChanged(DmxController *controller); - void presetIdChanged(int presetId); private: DmxController *m_controller{}; - int m_presetId{-1}; }; diff --git a/presetstepsmodel.cpp b/presetstepsmodel.cpp index 712ceb0..a8a621d 100644 --- a/presetstepsmodel.cpp +++ b/presetstepsmodel.cpp @@ -47,6 +47,69 @@ void PresetStepsModel::setPresetId(int presetId) emit presetIdChanged(m_presetId); } +void PresetStepsModel::copyFromFaders(int stepIndex) +{ + if (!m_controller) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + if (m_presetId == -1) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + auto presetPtr = m_controller->lightProject().presets.findById(m_presetId); + if (!presetPtr) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + auto &preset = *presetPtr; + + { + QMutexLocker locker{&m_controller->mutex()}; + // TODO respect stepIndex + preset.steps = { { .sliders=m_controller->sliderStates() } }; + } +} + +void PresetStepsModel::copyToFaders(int stepIndex) +{ + if (!m_controller) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + if (m_presetId == -1) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + const auto presetPtr = m_controller->lightProject().presets.findById(m_presetId); + if (!presetPtr) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + const auto &preset = *presetPtr; + + // TODO respect stepIndex + if (preset.steps.empty()) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + m_controller->setSliderStates(preset.steps.front().sliders); +} + int PresetStepsModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) diff --git a/presetstepsmodel.h b/presetstepsmodel.h index 1a2ece7..5822c41 100644 --- a/presetstepsmodel.h +++ b/presetstepsmodel.h @@ -22,6 +22,9 @@ public: int presetId() const { return m_presetId; } void setPresetId(int presetId); + Q_INVOKABLE void copyFromFaders(int stepIndex); + Q_INVOKABLE void copyToFaders(int stepIndex); + int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; QMap itemData(const QModelIndex &index) const override;