Add iconUrl role to deviceTypesModel

This commit is contained in:
2023-02-22 22:13:33 +01:00
parent 38c5223075
commit 2276e90a64
4 changed files with 24 additions and 5 deletions

View File

@ -29,6 +29,7 @@ qt_add_executable(appscheincommander
registergroupmodel.h registergroupmodel.cpp registergroupmodel.h registergroupmodel.cpp
projectloader.h projectloader.cpp projectloader.h projectloader.cpp
scheincommandersettings.h scheincommandersettings.cpp scheincommandersettings.h scheincommandersettings.cpp
iconutils.h iconutils.cpp
) )
qt_add_qml_module(appscheincommander qt_add_qml_module(appscheincommander

View File

@ -7,9 +7,12 @@
#include <QQmlEngine> #include <QQmlEngine>
#include <QMutexLocker> #include <QMutexLocker>
#include "iconutils.h"
enum { enum {
IdRole = Qt::UserRole, IdRole = Qt::UserRole,
IconNameRole IconNameRole,
IconUrlRole
}; };
void DeviceTypesModel::setController(DmxController *controller) 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 Qt::EditRole: return deviceType.name;
case IdRole: return deviceType.id; case IdRole: return deviceType.id;
case IconNameRole: return deviceType.iconName; case IconNameRole: return deviceType.iconName;
case IconUrlRole: return getIconUrl(deviceType.iconName);
} }
return {}; return {};
@ -138,7 +142,8 @@ QMap<int, QVariant> DeviceTypesModel::itemData(const QModelIndex &index) const
return { return {
{ Qt::DisplayRole, deviceType.name }, { Qt::DisplayRole, deviceType.name },
{ IdRole, deviceType.id }, { IdRole, deviceType.id },
{ IconNameRole, deviceType.iconName } { IconNameRole, deviceType.iconName },
{ IconUrlRole, getIconUrl(deviceType.iconName) }
}; };
} }
@ -147,7 +152,8 @@ QHash<int, QByteArray> DeviceTypesModel::roleNames() const
return { return {
{ Qt::DisplayRole, "name" }, { Qt::DisplayRole, "name" },
{ IdRole, "id" }, { IdRole, "id" },
{ IconNameRole, "iconName" } { IconNameRole, "iconName" },
{ IconUrlRole, "iconUrl" }
}; };
} }
@ -216,7 +222,7 @@ bool DeviceTypesModel::setData(const QModelIndex &index, const QVariant &value,
return false; return false;
} }
deviceType.iconName = value.toString(); deviceType.iconName = value.toString();
emit dataChanged(index, index, { IconNameRole }); emit dataChanged(index, index, { IconNameRole, IconUrlRole});
disconnect(m_controller, &DmxController::deviceTypeIconNameChanged, disconnect(m_controller, &DmxController::deviceTypeIconNameChanged,
this, &DeviceTypesModel::otherDeviceTypeIconNameChanged); this, &DeviceTypesModel::otherDeviceTypeIconNameChanged);
@ -377,7 +383,7 @@ void DeviceTypesModel::otherDeviceTypeIconNameChanged(int row, const QString &na
} }
const auto index = this->index(row); const auto index = this->index(row);
emit dataChanged(index, index, { IconNameRole }); emit dataChanged(index, index, { IconNameRole, IconUrlRole });
} }
namespace { namespace {

6
iconutils.cpp Normal file
View File

@ -0,0 +1,6 @@
#include "iconutils.h"
QUrl getIconUrl(QStringView name)
{
return QUrl{QString{"qrc:/scheincommander/icons/%0.png"}.arg(name)};
}

6
iconutils.h Normal file
View File

@ -0,0 +1,6 @@
#pragma once
#include <QUrl>
#include <QString>
QUrl getIconUrl(QStringView name);