Implement device register groups rendering
This commit is contained in:
@ -41,7 +41,7 @@ Item {
|
|||||||
text: model.name
|
text: model.name
|
||||||
}
|
}
|
||||||
DmxSlider {
|
DmxSlider {
|
||||||
onValueChanged: __controller.setRegisterGroup(model.id, value);
|
onValueChanged: __controller.setRegisterGroupSlider(model.id, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,16 +118,17 @@ void DeviceRegisterValueHelper::setValue(quint8 value)
|
|||||||
|
|
||||||
auto &sliderStates = m_controller->sliderStates();
|
auto &sliderStates = m_controller->sliderStates();
|
||||||
|
|
||||||
if (sliderStates.size() <= index)
|
|
||||||
sliderStates.resize(index + 1);
|
|
||||||
|
|
||||||
auto &sliderState = sliderStates.at(index);
|
|
||||||
|
|
||||||
if (sliderState.size() <= m_registerIndex)
|
|
||||||
sliderState.resize(m_registerIndex + 1);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
QMutexLocker locker{&m_controller->mutex()};
|
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;
|
sliderState[m_registerIndex] = value;
|
||||||
}
|
}
|
||||||
emit valueChanged(value);
|
emit valueChanged(value);
|
||||||
|
@ -166,9 +166,25 @@ bool DmxController::start()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DmxController::setRegisterGroup(int registerGroupId, quint8 value)
|
void DmxController::setRegisterGroupSlider(int registerGroupId, quint8 value)
|
||||||
{
|
{
|
||||||
qDebug() << registerGroupId << value;
|
const auto registerGroupPtr = m_lightProject.registerGroups.findById(registerGroupId);
|
||||||
|
if (!registerGroupPtr)
|
||||||
|
{
|
||||||
|
qWarning() << "hilfe" << __LINE__;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto index = registerGroupPtr - &*std::cbegin(m_lightProject.registerGroups);
|
||||||
|
|
||||||
|
{
|
||||||
|
QMutexLocker locker{&m_mutex};
|
||||||
|
|
||||||
|
if (index >= m_registerGroupStates.size())
|
||||||
|
m_registerGroupStates.resize(index + 1);
|
||||||
|
|
||||||
|
m_registerGroupStates[index] = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DmxController::setSliderStates(sliders_state_t &&sliderStates)
|
void DmxController::setSliderStates(sliders_state_t &&sliderStates)
|
||||||
@ -198,44 +214,63 @@ void DmxController::sendDmxBuffer()
|
|||||||
{
|
{
|
||||||
QMutexLocker locker{&m_mutex};
|
QMutexLocker locker{&m_mutex};
|
||||||
|
|
||||||
// if (m_sliderStates.size() < m_lightProject.devices.size())
|
const auto apply = [&](const sliders_state_t &sliders, quint8 factor){
|
||||||
// m_sliderStates.resize(m_lightProject.devices.size());
|
auto iter = std::cbegin(sliders);
|
||||||
|
|
||||||
auto iter = std::cbegin(m_sliderStates);
|
for (const auto &light : m_lightProject.devices)
|
||||||
|
|
||||||
for (const auto &light : m_lightProject.devices)
|
|
||||||
{
|
|
||||||
auto deviceTypePtr = m_lightProject.deviceTypes.findById(light.deviceTypeId);
|
|
||||||
if (!deviceTypePtr)
|
|
||||||
{
|
{
|
||||||
if (iter != std::cend(m_sliderStates))
|
auto deviceTypePtr = m_lightProject.deviceTypes.findById(light.deviceTypeId);
|
||||||
|
if (!deviceTypePtr)
|
||||||
|
{
|
||||||
|
if (iter != std::cend(sliders))
|
||||||
|
iter++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const auto &deviceType = *deviceTypePtr;
|
||||||
|
|
||||||
|
{
|
||||||
|
std::vector<quint8>::const_iterator iter2;
|
||||||
|
if (iter != std::cend(sliders))
|
||||||
|
iter2 = std::cbegin(*iter);
|
||||||
|
|
||||||
|
int i{};
|
||||||
|
for (const auto ®ister_ : deviceType.registers)
|
||||||
|
{
|
||||||
|
const auto address = light.address + (i++);
|
||||||
|
|
||||||
|
if (iter != std::cend(sliders) && iter2 != std::cend(*iter))
|
||||||
|
{
|
||||||
|
const auto result = int(*iter2) * factor / 255;
|
||||||
|
if (result > buf[address])
|
||||||
|
buf[address] = result;
|
||||||
|
}
|
||||||
|
// else
|
||||||
|
// buf[address] = 0;
|
||||||
|
|
||||||
|
if (iter != std::cend(sliders) && iter2 != std::cend(*iter))
|
||||||
|
iter2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iter != std::cend(sliders))
|
||||||
iter++;
|
iter++;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
apply(m_sliderStates, 255);
|
||||||
|
|
||||||
|
auto iter = std::cbegin(m_registerGroupStates);
|
||||||
|
for (const auto ®isterGroup : m_lightProject.registerGroups)
|
||||||
|
{
|
||||||
|
if (iter == std::cend(m_registerGroupStates))
|
||||||
|
break;
|
||||||
|
if (!*iter)
|
||||||
|
{
|
||||||
|
iter++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const auto &deviceType = *deviceTypePtr;
|
apply(registerGroup.sliders, *iter);
|
||||||
|
iter++;
|
||||||
std::vector<int>::const_iterator iter2;
|
|
||||||
if (iter != std::cend(m_sliderStates))
|
|
||||||
iter2 = std::cbegin(*iter);
|
|
||||||
|
|
||||||
int i{};
|
|
||||||
for (const auto ®ister_ : deviceType.registers)
|
|
||||||
{
|
|
||||||
const auto address = light.address + (i++);
|
|
||||||
|
|
||||||
if (iter != std::cend(m_sliderStates) && iter2 != std::cend(*iter))
|
|
||||||
{
|
|
||||||
buf[address] = *iter2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
buf[address] = 0;
|
|
||||||
|
|
||||||
if (iter != std::cend(m_sliderStates) && iter2 != std::cend(*iter))
|
|
||||||
iter2++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iter != std::cend(m_sliderStates))
|
|
||||||
iter++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ public:
|
|||||||
|
|
||||||
bool start();
|
bool start();
|
||||||
|
|
||||||
Q_INVOKABLE void setRegisterGroup(int registerGroupId, quint8 value);
|
Q_INVOKABLE void setRegisterGroupSlider(int registerGroupId, quint8 value);
|
||||||
|
|
||||||
LightProject &lightProject() { return m_lightProject; }
|
LightProject &lightProject() { return m_lightProject; }
|
||||||
const LightProject &lightProject() const { return m_lightProject; }
|
const LightProject &lightProject() const { return m_lightProject; }
|
||||||
@ -70,6 +70,7 @@ private:
|
|||||||
LightProject m_lightProject;
|
LightProject m_lightProject;
|
||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
sliders_state_t m_sliderStates;
|
sliders_state_t m_sliderStates;
|
||||||
|
std::vector<quint8> m_registerGroupStates;
|
||||||
|
|
||||||
QDateTime m_lastInfo;
|
QDateTime m_lastInfo;
|
||||||
int m_counter;
|
int m_counter;
|
||||||
|
@ -111,7 +111,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
using sliders_state_t = std::vector<std::vector<int>>;
|
using sliders_state_t = std::vector<std::vector<quint8>>;
|
||||||
|
|
||||||
struct RegisterGroupConfig
|
struct RegisterGroupConfig
|
||||||
{
|
{
|
||||||
|
@ -107,7 +107,7 @@ void RegisterGroupModel::setAllFadersLow()
|
|||||||
|
|
||||||
for (const auto &device : devices)
|
for (const auto &device : devices)
|
||||||
{
|
{
|
||||||
std::vector<int> sliderState;
|
std::vector<quint8> sliderState;
|
||||||
|
|
||||||
if (device.deviceTypeId != -1)
|
if (device.deviceTypeId != -1)
|
||||||
{
|
{
|
||||||
@ -145,7 +145,7 @@ void RegisterGroupModel::setAllFadersMax()
|
|||||||
|
|
||||||
for (const auto &device : devices)
|
for (const auto &device : devices)
|
||||||
{
|
{
|
||||||
std::vector<int> sliderState;
|
std::vector<quint8> sliderState;
|
||||||
|
|
||||||
if (device.deviceTypeId != -1)
|
if (device.deviceTypeId != -1)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user