From 2276e90a6417a64c12e70f81af32b4a98a11f680 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 22 Feb 2023 22:13:33 +0100 Subject: [PATCH] Add iconUrl role to deviceTypesModel --- CMakeLists.txt | 1 + devicetypesmodel.cpp | 16 +++++++++++----- iconutils.cpp | 6 ++++++ iconutils.h | 6 ++++++ 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 iconutils.cpp create mode 100644 iconutils.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 589a4b3..ccd70d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,7 @@ qt_add_executable(appscheincommander registergroupmodel.h registergroupmodel.cpp projectloader.h projectloader.cpp scheincommandersettings.h scheincommandersettings.cpp + iconutils.h iconutils.cpp ) qt_add_qml_module(appscheincommander diff --git a/devicetypesmodel.cpp b/devicetypesmodel.cpp index f5df8a1..745b4f7 100644 --- a/devicetypesmodel.cpp +++ b/devicetypesmodel.cpp @@ -7,9 +7,12 @@ #include #include +#include "iconutils.h" + enum { IdRole = Qt::UserRole, - IconNameRole + IconNameRole, + IconUrlRole }; void DeviceTypesModel::setController(DmxController *controller) @@ -100,6 +103,7 @@ QVariant DeviceTypesModel::data(const QModelIndex &index, int role) const case Qt::EditRole: return deviceType.name; case IdRole: return deviceType.id; case IconNameRole: return deviceType.iconName; + case IconUrlRole: return getIconUrl(deviceType.iconName); } return {}; @@ -138,7 +142,8 @@ QMap DeviceTypesModel::itemData(const QModelIndex &index) const return { { Qt::DisplayRole, deviceType.name }, { IdRole, deviceType.id }, - { IconNameRole, deviceType.iconName } + { IconNameRole, deviceType.iconName }, + { IconUrlRole, getIconUrl(deviceType.iconName) } }; } @@ -147,7 +152,8 @@ QHash DeviceTypesModel::roleNames() const return { { Qt::DisplayRole, "name" }, { IdRole, "id" }, - { IconNameRole, "iconName" } + { IconNameRole, "iconName" }, + { IconUrlRole, "iconUrl" } }; } @@ -216,7 +222,7 @@ bool DeviceTypesModel::setData(const QModelIndex &index, const QVariant &value, return false; } deviceType.iconName = value.toString(); - emit dataChanged(index, index, { IconNameRole }); + emit dataChanged(index, index, { IconNameRole, IconUrlRole}); disconnect(m_controller, &DmxController::deviceTypeIconNameChanged, this, &DeviceTypesModel::otherDeviceTypeIconNameChanged); @@ -377,7 +383,7 @@ void DeviceTypesModel::otherDeviceTypeIconNameChanged(int row, const QString &na } const auto index = this->index(row); - emit dataChanged(index, index, { IconNameRole }); + emit dataChanged(index, index, { IconNameRole, IconUrlRole }); } namespace { diff --git a/iconutils.cpp b/iconutils.cpp new file mode 100644 index 0000000..6eca964 --- /dev/null +++ b/iconutils.cpp @@ -0,0 +1,6 @@ +#include "iconutils.h" + +QUrl getIconUrl(QStringView name) +{ + return QUrl{QString{"qrc:/scheincommander/icons/%0.png"}.arg(name)}; +} diff --git a/iconutils.h b/iconutils.h new file mode 100644 index 0000000..7fb33de --- /dev/null +++ b/iconutils.h @@ -0,0 +1,6 @@ +#pragma once + +#include +#include + +QUrl getIconUrl(QStringView name);