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 qCWarning(MissionCommandListLog) << "Internal Error: " << errorString;
32 return;
33 }
34
35 QJsonValue jsonValue = jsonObject.value(_mavCmdInfoJsonKey);
36 if (!jsonValue.isArray()) {
37 qCWarning(MissionCommandListLog) << 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 qCWarning(MissionCommandListLog) << 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 qCWarning(MissionCommandListLog) << jsonFilename << uiInfoErrorString;
55 // Skip only this entry; one bad entry (e.g. from a broken translation) must not drop the whole list
56 continue;
57 }
58
59 // Update list of known categories
60 QString newCategory = uiInfo->category();
61 if (!newCategory.isEmpty() && !_categories.contains(newCategory)) {
62 _categories.append(newCategory);
63 }
64
65 _infoMap[uiInfo->command()] = uiInfo;
66 }
67
68 // Build id list
69 for (MAV_CMD id: _infoMap.keys()) {
70 _ids << id;
71 }
72}
73
75{
76 if (!_infoMap.contains(command)) {
77 return nullptr;
78 }
79
80 return _infoMap[command];
81}
QString errorString
#define QGC_LOGGING_CATEGORY(name, categoryStr)
std::array< MsgOutKey, 4 > keys
Definition UBXPlan.cc:13
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)