#include "widgetmodel.h" #include "qmetaobject.h" WidgetModel::WidgetModel(QObject *parent) : QAbstractItemModel(parent) , widgets_(DmxWidget::availableWidgets()) { } QVariant WidgetModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { switch (static_cast(section)) { case PortName: return tr("Port"); case Manufacturer: return tr("Manufacturer"); case Description: return tr("Description"); case SerialNumber: return tr("Serial"); case FirmwareVersion: return tr("Firmware"); case OperatingMode: return tr("Mode"); default: return QVariant(); } } return QVariant(); } QModelIndex WidgetModel::index(int row, int column, const QModelIndex &parent) const { if (parent.isValid() || row >= widgets_.size()) return QModelIndex(); return createIndex(row, column, widgets_.at(row).get()); } QModelIndex WidgetModel::parent(const QModelIndex &index) const { Q_UNUSED(index) return QModelIndex(); } int WidgetModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return widgets_.size(); } int WidgetModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return QMetaEnum::fromType().keyCount(); } QVariant WidgetModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); switch (role) { case Qt::DisplayRole: { auto wdgt = static_cast(index.internalPointer()); auto info = wdgt->portInfo(); switch (static_cast(index.column())) { case PortName: return info.portName(); case Manufacturer: return info.manufacturer(); case Description: return info.description(); case SerialNumber: return wdgt->serialNumber(); case FirmwareVersion: return QString::number(wdgt->firmwareVersion() >> 8) + "." + QString::number(wdgt->firmwareVersion() & 0xff); case OperatingMode: return ""; default: return QVariant(); } } case Qt::FontRole: return QVariant(); case Qt::EditRole: return QVariant(); default: return QVariant(); } }