QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
FactGroup.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QMap>
4#include <QtCore/QStringList>
5#include <QtCore/QTimer>
6#include <QtQmlIntegration/QtQmlIntegration>
7
8#include "Fact.h"
10
11class Vehicle;
12
15class FactGroup : public QObject
16{
17 Q_OBJECT
18 QML_ELEMENT
19 QML_UNCREATABLE("")
20 Q_PROPERTY(QStringList factNames READ factNames NOTIFY factNamesChanged)
21 Q_PROPERTY(QStringList factGroupNames READ factGroupNames NOTIFY factGroupNamesChanged)
23
24public:
25 explicit FactGroup(int updateRateMsecs, const QString &metaDataFile, QObject *parent = nullptr, bool ignoreCamelCase = false);
26 explicit FactGroup(int updateRateMsecs, QObject *parent = nullptr, bool ignoreCamelCase = false);
27 virtual ~FactGroup();
28
30 Q_INVOKABLE bool factExists(const QString &name) const;
31
34 Q_INVOKABLE Fact *getFact(const QString &name) const;
35
38 Q_INVOKABLE FactGroup *getFactGroup(const QString &name) const;
39
41 Q_INVOKABLE void setLiveUpdates(bool liveUpdates);
42
43 QStringList factNames() const { return _factNames; }
44 QStringList factGroupNames() const { return _nameToFactGroupMap.keys(); }
45 bool telemetryAvailable() const { return _telemetryAvailable; }
46 const QMap<QString, FactGroup*> &factGroups() const { return _nameToFactGroupMap; }
47
49 virtual void handleMessage(Vehicle * /*vehicle*/, const mavlink_message_t & /*message*/) {}
50
51signals:
55
56protected slots:
57 virtual void _updateAllValues();
58
59protected:
60 void _addFact(Fact *fact, const QString &name);
61 void _addFact(Fact *fact) { _addFact(fact, fact->name()); }
62 void _addFactGroup(FactGroup *factGroup, const QString &name);
63 void _addFactGroup(FactGroup *factGroup) { _addFactGroup(factGroup, factGroup->objectName()); }
64 void _loadFromJsonArray(const QJsonArray &jsonArray);
66
67 const int _updateRateMSecs = 0;
68
69 QMap<QString, Fact*> _nameToFactMap;
70 QMap<QString, FactGroup*> _nameToFactGroupMap;
71 QMap<QString, FactMetaData*> _nameToFactMetaDataMap;
72 QStringList _factNames;
73
74private:
75 void _setupTimer();
76 static QString _camelCase(const QString &text);
77
78 QTimer _updateTimer;
79 const bool _ignoreCamelCase = false;
80 bool _telemetryAvailable = false;
81};
struct __mavlink_message mavlink_message_t
Used to group Facts together into an object hierarachy.
Definition FactGroup.h:16
QMap< QString, Fact * > _nameToFactMap
Definition FactGroup.h:69
void telemetryAvailableChanged(bool telemetryAvailable)
const QMap< QString, FactGroup * > & factGroups() const
Definition FactGroup.h:46
QMap< QString, FactMetaData * > _nameToFactMetaDataMap
Definition FactGroup.h:71
virtual void _updateAllValues()
Definition FactGroup.cc:145
void _addFactGroup(FactGroup *factGroup)
Definition FactGroup.h:63
void _setTelemetryAvailable(bool telemetryAvailable)
Definition FactGroup.cc:175
Q_INVOKABLE Fact * getFact(const QString &name) const
Definition FactGroup.cc:72
void factGroupNamesChanged()
QStringList factNames() const
Definition FactGroup.h:43
void _addFactGroup(FactGroup *factGroup, const QString &name)
Definition FactGroup.cc:133
Q_INVOKABLE bool factExists(const QString &name) const
@ return true: if the fact exists in the group
Definition FactGroup.cc:49
void factNamesChanged()
QMap< QString, FactGroup * > _nameToFactGroupMap
Definition FactGroup.h:70
QStringList _factNames
Definition FactGroup.h:72
void _addFact(Fact *fact, const QString &name)
Definition FactGroup.cc:116
Q_INVOKABLE FactGroup * getFactGroup(const QString &name) const
Definition FactGroup.cc:102
QStringList factGroupNames() const
Definition FactGroup.h:44
Q_INVOKABLE void setLiveUpdates(bool liveUpdates)
Turning on live updates will allow value changes to flow through as they are received.
Definition FactGroup.cc:152
virtual ~FactGroup()
Definition FactGroup.cc:28
bool telemetryAvailable() const
Definition FactGroup.h:45
const int _updateRateMSecs
Update rate for Fact::valueChanged signals, 0: immediate update.
Definition FactGroup.h:67
virtual void handleMessage(Vehicle *, const mavlink_message_t &)
Allows a FactGroup to parse incoming messages and fill in values.
Definition FactGroup.h:49
void _addFact(Fact *fact)
Definition FactGroup.h:61
void _loadFromJsonArray(const QJsonArray &jsonArray)
Definition FactGroup.cc:33
A Fact is used to hold a single value within the system.
Definition Fact.h:17
QString name() const
Definition Fact.h:121