Implemented pattern automat

This commit is contained in:
2023-02-20 22:36:25 +01:00
parent 7ef15472d9
commit d347310ce0
3 changed files with 78 additions and 1 deletions

View File

@ -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 {

View File

@ -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<quint8> 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 &register_ : 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()
{

View File

@ -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);