Files
scheincommander/presetmodel.cpp
T

226 lines
5.2 KiB
C++
Raw Normal View History

2023-02-22 23:18:09 +01:00
#include "presetmodel.h"
2023-02-20 00:36:55 +01:00
#include <QDebug>
#include <QCoreApplication>
#include <QQmlEngine>
#include <QMutexLocker>
2023-02-20 00:36:55 +01:00
2023-02-22 23:18:09 +01:00
void PresetModel::setController(DmxController *controller)
2023-02-20 00:36:55 +01:00
{
if (m_controller == controller)
return;
if (m_controller)
{
2023-02-22 23:18:09 +01:00
// disconnect(m_controller, &DmxController::presetInserted,
// this, &PresetsModel::otherPresetInserted);
2023-02-20 00:36:55 +01:00
}
m_controller = controller;
if (m_controller)
{
2023-02-22 23:18:09 +01:00
// connect(m_controller, &DmxController::presetInserted,
// this, &PresetsModel::otherPresetInserted);
2023-02-20 00:36:55 +01:00
}
emit controllerChanged(m_controller);
}
2023-02-22 23:18:09 +01:00
void PresetModel::setPresetId(int presetId)
2023-02-20 00:36:55 +01:00
{
2023-02-22 23:18:09 +01:00
if (m_presetId == presetId)
2023-02-20 00:36:55 +01:00
return;
2023-02-22 23:18:09 +01:00
m_presetId = presetId;
2023-02-20 00:36:55 +01:00
2023-02-22 23:18:09 +01:00
emit presetIdChanged(m_presetId);
2023-02-20 00:36:55 +01:00
}
2023-02-22 23:18:09 +01:00
void PresetModel::copyFromFaders()
2023-02-20 00:36:55 +01:00
{
if (!m_controller)
{
qDebug() << "hilfe" << __LINE__;
return;
}
2023-02-22 23:18:09 +01:00
if (m_presetId == -1)
2023-02-20 00:36:55 +01:00
{
qDebug() << "hilfe" << __LINE__;
return;
}
2023-02-22 23:18:09 +01:00
auto presetPtr = m_controller->lightProject().presets.findById(m_presetId);
if (!presetPtr)
2023-02-20 00:36:55 +01:00
{
qDebug() << "hilfe" << __LINE__;
return;
}
2023-02-22 23:18:09 +01:00
auto &preset = *presetPtr;
2023-02-20 00:36:55 +01:00
{
QMutexLocker locker{&m_controller->mutex()};
preset.steps = { { .sliders=m_controller->sliderStates() } };
}
2023-02-20 00:36:55 +01:00
}
2023-02-22 23:18:09 +01:00
void PresetModel::copyToFaders()
2023-02-20 00:36:55 +01:00
{
if (!m_controller)
{
qDebug() << "hilfe" << __LINE__;
return;
}
2023-02-22 23:18:09 +01:00
if (m_presetId == -1)
2023-02-20 00:36:55 +01:00
{
qDebug() << "hilfe" << __LINE__;
return;
}
2023-02-22 23:18:09 +01:00
const auto presetPtr = m_controller->lightProject().presets.findById(m_presetId);
if (!presetPtr)
2023-02-20 00:36:55 +01:00
{
qDebug() << "hilfe" << __LINE__;
return;
}
2023-02-22 23:18:09 +01:00
const auto &preset = *presetPtr;
2023-02-20 00:36:55 +01:00
if (preset.steps.empty())
{
qDebug() << "hilfe" << __LINE__;
return;
}
m_controller->setSliderStates(preset.steps.front().sliders);
2023-02-20 00:36:55 +01:00
}
2023-02-22 23:18:09 +01:00
void PresetModel::setAllFadersLow()
2023-02-20 00:36:55 +01:00
{
if (!m_controller)
{
qDebug() << "hilfe" << __LINE__;
return;
}
const auto &devices = m_controller->lightProject().devices;
sliders_state_t sliderStates;
sliderStates.reserve(devices.size());
for (const auto &device : devices)
{
2023-02-20 02:53:48 +01:00
std::vector<quint8> sliderState;
2023-02-20 00:36:55 +01:00
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(0);
}
}
sliderStates.push_back(std::move(sliderState));
}
m_controller->setSliderStates(std::move(sliderStates));
}
2023-02-22 23:18:09 +01:00
void PresetModel::setAllFadersMax()
2023-02-20 00:36:55 +01:00
{
if (!m_controller)
{
qDebug() << "hilfe" << __LINE__;
return;
}
const auto &devices = m_controller->lightProject().devices;
sliders_state_t sliderStates;
sliderStates.reserve(devices.size());
for (const auto &device : devices)
{
2023-02-20 02:53:48 +01:00
std::vector<quint8> sliderState;
2023-02-20 00:36:55 +01:00
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(255);
}
}
sliderStates.push_back(std::move(sliderState));
}
m_controller->setSliderStates(std::move(sliderStates));
}
2023-02-22 23:18:09 +01:00
void PresetModel::setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value)
2023-02-20 22:36:25 +01:00
{
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));
}
2023-02-20 00:36:55 +01:00
namespace {
void registrierDenShit()
{
2023-02-22 23:18:09 +01:00
qmlRegisterType<PresetModel>("scheincommander", 1, 0, "PresetModel");
2023-02-20 00:36:55 +01:00
}
}
Q_COREAPP_STARTUP_FUNCTION(registrierDenShit)