introduce a model for tracking attached widgets
This commit is contained in:
parent
4833b37739
commit
47a71072ce
@ -1,6 +1,6 @@
|
||||
project(${PROJECT_NAME}-dmxwidget VERSION ${PROJECT_VERSION})
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS SerialPort)
|
||||
find_package(Qt6 COMPONENTS SerialPort REQUIRED)
|
||||
|
||||
add_library(${PROJECT_NAME} SHARED)
|
||||
add_library(LCP::Qt::DmxWidget ALIAS ${PROJECT_NAME})
|
||||
@ -8,8 +8,10 @@ add_library(LCP::Qt::DmxWidget ALIAS ${PROJECT_NAME})
|
||||
target_sources(${PROJECT_NAME}
|
||||
PUBLIC
|
||||
dmxwidget.h
|
||||
widgetmodel.h
|
||||
PRIVATE
|
||||
dmxwidget.cpp
|
||||
widgetmodel.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
98
platform/qt/dmxwidget/widgetmodel.cpp
Normal file
98
platform/qt/dmxwidget/widgetmodel.cpp
Normal file
@ -0,0 +1,98 @@
|
||||
#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<Column>(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<Column>().keyCount();
|
||||
}
|
||||
|
||||
QVariant WidgetModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
{
|
||||
auto wdgt = static_cast<DmxWidget*>(index.internalPointer());
|
||||
auto info = wdgt->portInfo();
|
||||
switch (static_cast<Column>(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();
|
||||
}
|
||||
}
|
40
platform/qt/dmxwidget/widgetmodel.h
Normal file
40
platform/qt/dmxwidget/widgetmodel.h
Normal file
@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include "dmxwidget.h"
|
||||
#include <QAbstractItemModel>
|
||||
|
||||
class WidgetModel : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit WidgetModel(QObject *parent = nullptr);
|
||||
|
||||
// Header:
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||
|
||||
// Basic functionality:
|
||||
QModelIndex index(int row, int column,
|
||||
const QModelIndex &parent = QModelIndex()) const override;
|
||||
QModelIndex parent(const QModelIndex &index) const override;
|
||||
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
|
||||
/// @brief The Column enum
|
||||
enum Column {
|
||||
PortName,
|
||||
Manufacturer,
|
||||
Description,
|
||||
SerialNumber,
|
||||
FirmwareVersion,
|
||||
OperatingMode,
|
||||
};
|
||||
Q_ENUM(Column)
|
||||
|
||||
private:
|
||||
QList<std::shared_ptr<DmxWidget>> widgets_;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user