Files
scheincommander/deviceregistervaluehelper.cpp

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());
}