Slider states are correctly padded/erased on device creation/removal
This commit is contained in:
@ -334,9 +334,28 @@ bool DevicesModel::insertRows(int row, int count, const QModelIndex &parent)
|
|||||||
beginInsertRows({}, row, row+count-1);
|
beginInsertRows({}, row, row+count-1);
|
||||||
{
|
{
|
||||||
QMutexLocker locker{&m_controller->mutex()};
|
QMutexLocker locker{&m_controller->mutex()};
|
||||||
auto iter = std::begin(devices) + row;
|
|
||||||
for (auto i = 0; i < count; i++)
|
{
|
||||||
iter = devices.insert(iter, DeviceConfig{ .id=id++, .name="<neu>", .deviceTypeId=0, .address=0, .position={} }) + 1;
|
auto iter = std::begin(devices) + row;
|
||||||
|
for (auto i = 0; i < count; i++)
|
||||||
|
iter = devices.insert(iter, DeviceConfig{ .id=id++, .name="<neu>", .deviceTypeId=0, .address=0, .position={} }) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sliders_state_t &sliderStates = m_controller->sliderStates(); sliderStates.size() > row)
|
||||||
|
{
|
||||||
|
sliderStates.insert(std::begin(sliderStates) + row, count, {});
|
||||||
|
emit m_controller->sliderStatesChanged(sliderStates);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto ®isterGroup : m_controller->lightProject().registerGroups)
|
||||||
|
{
|
||||||
|
auto &sliderStates = registerGroup.sliders;
|
||||||
|
if (sliderStates.size() > row)
|
||||||
|
{
|
||||||
|
sliderStates.insert(std::begin(sliderStates) + row, count, {});
|
||||||
|
emit m_controller->sliderStatesChanged(sliderStates);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
|
||||||
@ -386,9 +405,32 @@ bool DevicesModel::removeRows(int row, int count, const QModelIndex &parent)
|
|||||||
beginRemoveRows({}, row, row+count-1);
|
beginRemoveRows({}, row, row+count-1);
|
||||||
{
|
{
|
||||||
QMutexLocker locker{&m_controller->mutex()};
|
QMutexLocker locker{&m_controller->mutex()};
|
||||||
auto begin = std::begin(devices) + row;
|
|
||||||
auto end = begin + count;
|
{
|
||||||
devices.erase(begin, end);
|
auto begin = std::begin(devices) + row;
|
||||||
|
auto end = begin + count;
|
||||||
|
devices.erase(begin, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sliders_state_t &sliderStates = m_controller->sliderStates(); sliderStates.size() >= row)
|
||||||
|
{
|
||||||
|
auto begin = std::begin(sliderStates) + row;
|
||||||
|
auto end = begin + std::min<size_t>(count, sliderStates.size() - row + count);
|
||||||
|
sliderStates.erase(begin, end);
|
||||||
|
emit m_controller->sliderStatesChanged(sliderStates);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto ®isterGroup : m_controller->lightProject().registerGroups)
|
||||||
|
{
|
||||||
|
auto &sliderStates = registerGroup.sliders;
|
||||||
|
if (sliderStates.size() >= row)
|
||||||
|
{
|
||||||
|
auto begin = std::begin(sliderStates) + row;
|
||||||
|
auto end = begin + std::min<size_t>(count, sliderStates.size() - row + count);
|
||||||
|
sliderStates.erase(begin, end);
|
||||||
|
emit m_controller->sliderStatesChanged(sliderStates);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user