diff --git a/RegisterGroupsSettingsPage.qml b/RegisterGroupsSettingsPage.qml index 5cc9977..ed76575 100644 --- a/RegisterGroupsSettingsPage.qml +++ b/RegisterGroupsSettingsPage.qml @@ -88,7 +88,7 @@ ColumnLayout { GridLayout { Layout.fillWidth: true - columns: 2 + columns: 3 RegisterGroupModel { id: registerGroupModel @@ -104,6 +104,10 @@ ColumnLayout { text: qsTr('Von Schieberegler\nunten kopieren'); onPressed: registerGroupModel.copyFromFaders() } + Item { + Layout.rowSpan: 2 + Layout.fillWidth: true + } Button { text: qsTr('Alle auf\n0 setzen'); onPressed: registerGroupModel.setAllFadersLow() @@ -112,6 +116,37 @@ ColumnLayout { text: qsTr('Alle auf\nMaximum setzen'); onPressed: registerGroupModel.setAllFadersMax() } + RowLayout { + Layout.columnSpan: 3 + + SpinBox { + id: nSpinBox + Layout.preferredWidth: 120 + from: 1 + } + + SpinBox { + id: kSpinBox + Layout.preferredWidth: 120 + } + + ComboBox { + id: registerTypeComboBox + model: DeviceTypeRegisterTypesModel { + } + textRole: "text" + valueRole: "value" + } + + DmxSlider { + id: valueSlider + } + + Button { + text: qsTr('Set') + onPressed: registerGroupModel.setPattern(nSpinBox.value, kSpinBox.value, registerTypeComboBox.currentValue, valueSlider.value) + } + } } Item { diff --git a/registergroupmodel.cpp b/registergroupmodel.cpp index 59f9a17..317d486 100644 --- a/registergroupmodel.cpp +++ b/registergroupmodel.cpp @@ -168,6 +168,47 @@ void RegisterGroupModel::setAllFadersMax() m_controller->setSliderStates(std::move(sliderStates)); } +void RegisterGroupModel::setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value) +{ + if (!m_controller) + { + qDebug() << "hilfe" << __LINE__; + return; + } + + const auto &devices = m_controller->lightProject().devices; + + sliders_state_t sliderStates; + sliderStates.reserve(devices.size()); + + int i{}; + for (const auto &device : devices) + { + const bool test = i++ % n == k; + + std::vector sliderState; + + if (device.deviceTypeId != -1) + { + const auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(device.deviceTypeId); + if (!deviceTypePtr) + qWarning() << "hilfe" << __LINE__; + else + { + const auto &deviceType = *deviceTypePtr; + sliderState.reserve(deviceType.registers.size()); + + for (const auto ®ister_ : deviceType.registers) + sliderState.push_back(test && register_.type == registerType ? value : 0); + } + } + + sliderStates.push_back(std::move(sliderState)); + } + + m_controller->setSliderStates(std::move(sliderStates)); +} + namespace { void registrierDenShit() { diff --git a/registergroupmodel.h b/registergroupmodel.h index 40854a5..09b3608 100644 --- a/registergroupmodel.h +++ b/registergroupmodel.h @@ -24,6 +24,7 @@ public: 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);