Fix icons missing in device settings page

This commit is contained in:
2023-03-03 20:32:13 +01:00
parent 0fcc2a3ab8
commit 3f09b4bd3f
4 changed files with 21 additions and 45 deletions

View File

@ -93,13 +93,17 @@ ColumnLayout {
Label { text: qsTr("DeviceType:") }
IconComboBox {
id: deviceTypeCombobox
Layout.fillWidth: true
Layout.preferredHeight: 64
model: DeviceTypesModel {
controller: __controller
}
textRole: "name"
valueRole: "id"
iconSourceRole: "iconUrl"
iconSourceRoleInt: DeviceTypesModel.IconUrlRole
currentIndex: listView.currentData ? deviceTypeCombobox.indexOfValue(listView.currentData.deviceTypeId) : -1
onActivated: if (listView.currentData) listView.currentData.deviceTypeId = currentValue; else console.warn('discarded');
}

View File

@ -9,6 +9,15 @@ ComboBox {
id: comboBox
property string iconSourceRole
property int iconSourceRoleInt
property string iconSource: comboBox.currentIndex === -1
? ""
: Array.isArray(comboBox.model)
? comboBox.model[comboBox.currentIndex][comboBox.iconSourceRole]
: (comboBox.model as ListModel)?.get(comboBox.currentIndex)[comboBox.iconSourceRole]
?? (comboBox.model as FolderListModel)?.get(comboBox.currentIndex, comboBox.iconSourceRole)
?? comboBox.model.data(comboBox.model.index(comboBox.currentIndex, 0), comboBox.iconSourceRoleInt)
delegate: ItemDelegate {
height: 64
@ -23,45 +32,7 @@ ComboBox {
}
contentItem: IconChooserDelegateLayout {
text: comboBox.displayText
iconSource: {
// console.log("QAbstractListModel", model instanceof QAbstractListModel);
// console.log("QAbstractItemModel", model instanceof QAbstractItemModel);
// console.log("FolderListModel", model instanceof FolderListModel);
// console.log("DeviceTypesModel", model instanceof DeviceTypesModel);
// console.log("QtObject", model instanceof QtObject);
if (comboBox.currentIndex < 0)
return '';
if (!comboBox.model)
return '';
if (!comboBox.iconSourceRole)
return '';
if (model instanceof FolderListModel)
return model.get(comboBox.currentIndex, iconSourceRole);
else if ('get' in model)
{
const data = model.get(comboBox.currentIndex);
console.log(data);
return data[iconSourceRole];
}
else if ('roleNames' in model || 'itemData' in model)
{
if (!('roleNames' in model && 'itemData' in model))
throw 'roleNames or itemData not defined!';
const roleNames = model.roleNames();
console.log('roleNames', roleNames);
const index = model.index(comboBox.currentIndex, 0);
const itemData = model.itemData(index);
console.log('itemData', itemData);
throw 'getting data from model using roleNames and itemData is not yet implemented.';
}
else
throw 'unknown model type' + typeof model;
}
iconSource: comboBox.iconSource
isInsideMaterialComboBox: true
}
}

View File

@ -9,12 +9,6 @@
#include "iconutils.h"
enum {
IdRole = Qt::UserRole,
IconNameRole,
IconUrlRole
};
void DeviceTypesModel::setController(DmxController *controller)
{
if (m_controller == controller)

View File

@ -12,6 +12,13 @@ class DeviceTypesModel : public QAbstractListModel
public:
using QAbstractListModel::QAbstractListModel;
enum Roles {
IdRole = Qt::UserRole,
IconNameRole,
IconUrlRole
};
Q_ENUM(Roles)
DmxController *controller() { return m_controller; }
const DmxController *controller() const { return m_controller; }
void setController(DmxController *controller);