QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MissionCommandList.cc
Go to the documentation of this file.
2#include "JsonParsing.h"
5
6#include <QtCore/QJsonArray>
7
8QGC_LOGGING_CATEGORY(MissionCommandListLog, "MissionManager.MissionCommandList")
9
10MissionCommandList::MissionCommandList(const QString& jsonFilename, bool baseCommandList, QObject* parent)
11 : QObject(parent)
12{
13 _loadMavCmdInfoJson(jsonFilename, baseCommandList);
14}
15
16void MissionCommandList::_loadMavCmdInfoJson(const QString& jsonFilename, bool baseCommandList)
17{
18 if (jsonFilename.isEmpty()) {
19 return;
20 }
21
22 qCDebug(MissionCommandListLog) << "Loading" << jsonFilename;
23
24 QString errorString;
25 int version;
26 QJsonObject jsonObject = JsonParsing::openInternalQGCJsonFile(
27 jsonFilename, qgcFileType, 1, 1, version, errorString,
28 QStringList{"label", "enumStrings", "friendlyName", "description", "category"},
29 QStringList{"rawName", "comment"});
30 if (!errorString.isEmpty()) {
31 qWarning() << "Internal Error: " << errorString;
32 return;
33 }
34
35 QJsonValue jsonValue = jsonObject.value(_mavCmdInfoJsonKey);
36 if (!jsonValue.isArray()) {
37 qWarning() << jsonFilename << "mavCmdInfo not array";
38 return;
39 }
40
41 // Iterate over MissionCommandUIInfo objects
42 QJsonArray jsonArray = jsonValue.toArray();
43 for(QJsonValue info: jsonArray) {
44 if (!info.isObject()) {
45 qWarning() << jsonFilename << "mavCmdArray should contain objects";
46 return;
47 }
48
50
51 QString uiInfoErrorString;
52 if (!uiInfo->loadJsonInfo(info.toObject(), baseCommandList, uiInfoErrorString)) {
53 uiInfo->deleteLater();
54 qWarning() << jsonFilename << uiInfoErrorString;
55 return;
56 }
57
58 // Update list of known categories
59 QString newCategory = uiInfo->category();
60 if (!newCategory.isEmpty() && !_categories.contains(newCategory)) {
61 _categories.append(newCategory);
62 }
63
64 _infoMap[uiInfo->command()] = uiInfo;
65 }
66
67 // Build id list
68 for (MAV_CMD id: _infoMap.keys()) {
69 _ids << id;
70 }
71}
72
74{
75 if (!_infoMap.contains(command)) {
76 return nullptr;
77 }
78
79 return _infoMap[command];
80}
QString errorString
#define QGC_LOGGING_CATEGORY(name, categoryStr)
Maintains a list of MissionCommandUIInfo objects loaded from a json file.
MissionCommandUIInfo * getUIInfo(MAV_CMD command) const
Returns the ui info for specified command, NULL if command not found.
static constexpr const char * qgcFileType
UI Information associated with a mission command (MAV_CMD)
bool loadJsonInfo(const QJsonObject &jsonObject, bool requireFullObject, QString &errorString)
MAV_CMD command(void) const
QString category(void) const
QJsonObject openInternalQGCJsonFile(const QString &jsonFilename, const QString &expectedFileType, int minSupportedVersion, int maxSupportedVersion, int &version, QString &errorString, const QStringList &defaultTranslateKeys, const QStringList &defaultArrayIDKeys)