blob: dd2b7f81515b5d58e06cf5837063f66894f78d12 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// Copyright (C) 2021 The Qt Company Ltd.
// Copyright (C) 2019 Luxoft Sweden AB
// Copyright (C) 2018 Pelagicore AG
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
#include <QAbstractListModel>
#include <QtAppManCommon/global.h>
#include <QtQml/qqmllist.h>
#include <QList>
#include <QStringList>
#include <QTimer>
QT_BEGIN_NAMESPACE_AM
class MonitorModel : public QAbstractListModel
{
Q_OBJECT
Q_CLASSINFO("AM-QmlType", "QtApplicationManager/MonitorModel 2.0")
Q_PROPERTY(QQmlListProperty<QObject> dataSources READ dataSources NOTIFY dataSourcesChanged)
Q_CLASSINFO("DefaultProperty", "dataSources")
Q_PROPERTY(int count READ count NOTIFY countChanged)
Q_PROPERTY(int maximumCount READ maximumCount WRITE setMaximumCount NOTIFY maximumCountChanged)
Q_PROPERTY(int interval READ interval WRITE setInterval NOTIFY intervalChanged)
Q_PROPERTY(bool running READ running WRITE setRunning NOTIFY runningChanged)
public:
MonitorModel(QObject *parent = nullptr);
~MonitorModel() override;
QQmlListProperty<QObject> dataSources();
static void dataSources_append(QQmlListProperty<QObject> *property, QObject *value);
static qsizetype dataSources_count(QQmlListProperty<QObject> *property);
static QObject *dataSources_at(QQmlListProperty<QObject> *property, qsizetype index);
static void dataSources_clear(QQmlListProperty<QObject> *property);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;
int count() const;
bool running() const;
void setRunning(bool value);
int interval() const;
void setInterval(int value);
int maximumCount() const;
void setMaximumCount(int value);
Q_INVOKABLE void clear();
Q_INVOKABLE QVariantMap get(int row) const;
signals:
void countChanged();
void intervalChanged();
void runningChanged();
void maximumCountChanged();
void dataSourcesChanged();
private slots:
void readDataSourcesAndAddRow();
private:
struct DataRow {
QHash<int, QVariant> dataFromRoleIndex;
};
struct DataSource {
QObject *obj;
QVector<QByteArray> roleNames;
};
void clearDataSources();
void appendDataSource(QObject *dataSource);
void fillDataRow(DataRow *dataRow);
void readDataSource(DataSource *dataSource, DataRow *dataRow);
void trimHistory();
bool extractRoleNamesFromJsArray(DataSource *dataSource);
bool extractRoleNamesFromStringList(DataSource *dataSource);
void addRoleName(QByteArray roleName, DataSource *dataSource);
QList<DataSource*> m_dataSources;
QList<QByteArray> m_roleNamesList; // also maps a role index to its name
QHash<QByteArray, int> m_roleNameToIndex;
QList<DataRow*> m_rows;
QTimer m_timer;
int m_maximumCount = 10;
};
QT_END_NAMESPACE_AM
|