From a6dc8f29d80d3c830e0e406a29884c6b32aef69e Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 18 Feb 2023 19:52:31 +0100 Subject: [PATCH] Implemented removing of registers from device type --- RegistersSettingsItem.qml | 2 ++ devicetyperegistersmodel.cpp | 47 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/RegistersSettingsItem.qml b/RegistersSettingsItem.qml index f6b7a72..79038da 100644 --- a/RegistersSettingsItem.qml +++ b/RegistersSettingsItem.qml @@ -30,6 +30,8 @@ Pane { textRole: 'registerTypeName' model: deviceTypeRegistersModel + + onRemoveClicked: (index) => deviceTypeRegistersModel.removeRow(index) } } diff --git a/devicetyperegistersmodel.cpp b/devicetyperegistersmodel.cpp index 040d813..59004a2 100644 --- a/devicetyperegistersmodel.cpp +++ b/devicetyperegistersmodel.cpp @@ -217,7 +217,54 @@ bool DeviceTypeRegistersModel::setData(const QModelIndex &index, const QVariant bool DeviceTypeRegistersModel::removeRows(int row, int count, const QModelIndex &parent) { + if (!m_controller) + { + qWarning() << "hilfe" << __LINE__; + return true; + } + if (m_deviceTypeId == -1) + { + qWarning() << "hilfe" << __LINE__; + return true; + } + + auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(m_deviceTypeId); + if (!deviceTypePtr) + { + qWarning() << "hilfe" << __LINE__; + return true; + } + + auto &deviceType = *deviceTypePtr; + + if (row < 0) + { + qWarning() << "hilfe" << __LINE__; + return true; + } + + auto ®isters = deviceType.registers; + + if (row >= registers.size()) + { + qWarning() << "hilfe" << __LINE__; + return true; + } + + if (row + count > registers.size()) + { + qWarning() << "hilfe" << __LINE__; + return true; + } + + beginRemoveRows({}, row, row+count-1); + auto begin = std::begin(registers) + row; + auto end = begin + count; + registers.erase(begin, end); + endRemoveRows(); + + return true; } namespace {