139 lines
3.0 KiB
C++
139 lines
3.0 KiB
C++
#include "deviceregistervaluehelper.h"
|
|
|
|
#include <QDebug>
|
|
#include <QMutexLocker>
|
|
|
|
void DeviceRegisterValueHelper::setController(DmxController *controller)
|
|
{
|
|
if (m_controller == controller)
|
|
return;
|
|
|
|
if (m_controller)
|
|
{
|
|
disconnect(m_controller, &DmxController::sliderStatesChanged,
|
|
this, &DeviceRegisterValueHelper::sliderStatesChanged);
|
|
}
|
|
|
|
m_controller = controller;
|
|
|
|
if (m_controller)
|
|
{
|
|
connect(m_controller, &DmxController::sliderStatesChanged,
|
|
this, &DeviceRegisterValueHelper::sliderStatesChanged);
|
|
}
|
|
|
|
emit controllerChanged(m_controller);
|
|
}
|
|
|
|
void DeviceRegisterValueHelper::setDeviceId(int deviceId)
|
|
{
|
|
if (m_deviceId == deviceId)
|
|
return;
|
|
|
|
m_deviceId = deviceId;
|
|
|
|
emit deviceIdChanged(m_deviceId);
|
|
}
|
|
|
|
void DeviceRegisterValueHelper::setRegisterIndex(int registerIndex)
|
|
{
|
|
if (m_registerIndex == registerIndex)
|
|
return;
|
|
|
|
m_registerIndex = registerIndex;
|
|
|
|
emit registerIndexChanged(m_registerIndex);
|
|
}
|
|
|
|
quint8 DeviceRegisterValueHelper::value() const
|
|
{
|
|
if (!m_controller)
|
|
{
|
|
// qDebug() << "hilfe" << __LINE__;
|
|
return 0;
|
|
}
|
|
if (m_deviceId == -1)
|
|
{
|
|
qDebug() << "hilfe" << __LINE__;
|
|
return 0;
|
|
}
|
|
if (m_registerIndex == -1)
|
|
{
|
|
qDebug() << "hilfe" << __LINE__;
|
|
return 0;
|
|
}
|
|
|
|
const auto &devices = m_controller->lightProject().devices;
|
|
auto devicePtr = devices.findById(m_deviceId);
|
|
if (!devicePtr)
|
|
{
|
|
qDebug() << "hilfe" << __LINE__;
|
|
return 0;
|
|
}
|
|
|
|
const auto index = devicePtr - &*std::cbegin(devices);
|
|
|
|
const auto &sliderStates = m_controller->sliderStates();
|
|
|
|
if (sliderStates.size() <= index)
|
|
return 0;
|
|
|
|
const auto &sliderState = sliderStates.at(index);
|
|
|
|
if (sliderState.size() <= m_registerIndex)
|
|
return 0;
|
|
|
|
return sliderState.at(m_registerIndex);
|
|
}
|
|
|
|
void DeviceRegisterValueHelper::setValue(quint8 value)
|
|
{
|
|
if (m_deviceId == -1)
|
|
{
|
|
// qDebug() << "hilfe" << __LINE__;
|
|
return;
|
|
}
|
|
if (m_registerIndex == -1)
|
|
{
|
|
qDebug() << "hilfe" << __LINE__;
|
|
return;
|
|
}
|
|
if (m_registerIndex == -1)
|
|
{
|
|
qDebug() << "hilfe" << __LINE__;
|
|
return;
|
|
}
|
|
|
|
const auto &devices = m_controller->lightProject().devices;
|
|
auto devicePtr = devices.findById(m_deviceId);
|
|
if (!devicePtr)
|
|
{
|
|
qDebug() << "hilfe" << __LINE__;
|
|
return;
|
|
}
|
|
|
|
const auto index = devicePtr - &*std::cbegin(devices);
|
|
|
|
auto &sliderStates = m_controller->sliderStates();
|
|
|
|
{
|
|
QMutexLocker locker{&m_controller->mutex()};
|
|
|
|
if (sliderStates.size() <= index)
|
|
sliderStates.resize(index + 1);
|
|
|
|
auto &sliderState = sliderStates.at(index);
|
|
|
|
if (sliderState.size() <= m_registerIndex)
|
|
sliderState.resize(m_registerIndex + 1);
|
|
|
|
sliderState[m_registerIndex] = value;
|
|
}
|
|
emit valueChanged(value);
|
|
}
|
|
|
|
void DeviceRegisterValueHelper::sliderStatesChanged()
|
|
{
|
|
emit valueChanged(value());
|
|
}
|