From bf3a7fb606f761ab4db0b1d0000e0526dc336187 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 22 Feb 2023 22:19:26 +0100 Subject: [PATCH] Add iconName and iconUrl role to devicesModel --- devicesmodel.cpp | 70 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/devicesmodel.cpp b/devicesmodel.cpp index bbbc895..9c19bf8 100644 --- a/devicesmodel.cpp +++ b/devicesmodel.cpp @@ -7,6 +7,8 @@ #include #include +#include "iconutils.h" + enum { IdRole = Qt::UserRole, DeviceTypeIdRole, @@ -14,7 +16,9 @@ enum { PositionRole, PositionXRole, PositionYRole, - PositionZRole + PositionZRole, + IconNameRole, + IconUrlRole, }; void DevicesModel::setController(DmxController *controller) @@ -109,14 +113,30 @@ QVariant DevicesModel::data(const QModelIndex &index, int role) const switch (role) { case Qt::DisplayRole: - case Qt::EditRole: return device.name; - case IdRole: return device.id; + case Qt::EditRole: return device.name; + case IdRole: return device.id; case DeviceTypeIdRole: return device.deviceTypeId; - case AddressRole: return device.address; - case PositionRole: return device.position; - case PositionXRole: return device.position.x(); - case PositionYRole: return device.position.y(); - case PositionZRole: return device.position.z(); + case AddressRole: return device.address; + case PositionRole: return device.position; + case PositionXRole: return device.position.x(); + case PositionYRole: return device.position.y(); + case PositionZRole: return device.position.z(); + case IconNameRole: + if (const auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(device.deviceTypeId)) + return deviceTypePtr->iconName; + else + { + qWarning() << "hilfe" << __LINE__; + return {}; + } + case IconUrlRole: + if (const auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(device.deviceTypeId)) + return getIconUrl(deviceTypePtr->iconName); + else + { + qWarning() << "hilfe" << __LINE__; + return {}; + } } return {}; @@ -150,29 +170,35 @@ QMap DevicesModel::itemData(const QModelIndex &index) const } const auto &device = devices.at(index.row()); + const auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(device.deviceTypeId); + return { - { Qt::DisplayRole, device.name }, - { IdRole, device.id }, + { Qt::DisplayRole, device.name }, + { IdRole, device.id }, { DeviceTypeIdRole, device.deviceTypeId }, - { AddressRole, device.address }, - { PositionRole, device.position }, - { PositionXRole, device.position.x() }, - { PositionYRole, device.position.y() }, - { PositionZRole, device.position.z() } + { AddressRole, device.address }, + { PositionRole, device.position }, + { PositionXRole, device.position.x() }, + { PositionYRole, device.position.y() }, + { PositionZRole, device.position.z() }, + { IconNameRole, !deviceTypePtr ? QVariant{} : deviceTypePtr->iconName }, + { IconUrlRole, !deviceTypePtr ? QVariant{} : getIconUrl(deviceTypePtr->iconName) } }; } QHash DevicesModel::roleNames() const { return { - { Qt::DisplayRole, "name" }, - { IdRole, "id" }, + { Qt::DisplayRole, "name" }, + { IdRole, "id" }, { DeviceTypeIdRole, "deviceTypeId" }, - { AddressRole, "address" }, - { PositionRole, "position" }, - { PositionXRole, "positionX" }, - { PositionYRole, "positionY" }, - { PositionZRole, "positionZ" } + { AddressRole, "address" }, + { PositionRole, "position" }, + { PositionXRole, "positionX" }, + { PositionYRole, "positionY" }, + { PositionZRole, "positionZ" }, + { IconNameRole, "iconName" }, + { IconUrlRole, "iconUrl" } }; }