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})
|
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(${PROJECT_NAME} SHARED)
|
||||||
add_library(LCP::Qt::DmxWidget ALIAS ${PROJECT_NAME})
|
add_library(LCP::Qt::DmxWidget ALIAS ${PROJECT_NAME})
|
||||||
@ -8,8 +8,10 @@ add_library(LCP::Qt::DmxWidget ALIAS ${PROJECT_NAME})
|
|||||||
target_sources(${PROJECT_NAME}
|
target_sources(${PROJECT_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
dmxwidget.h
|
dmxwidget.h
|
||||||
|
widgetmodel.h
|
||||||
PRIVATE
|
PRIVATE
|
||||||
dmxwidget.cpp
|
dmxwidget.cpp
|
||||||
|
widgetmodel.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
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