9#include <QtCore/QApplicationStatic>
18 qCDebug(MissionCommandTreeLog) <<
this;
34 if (!overrideFile.isEmpty()) {
36 _staticCommandTree[firmwareClass][vehicleClass] =
new MissionCommandList(overrideFile, baseCommandList,
this);
45 for (
const auto &vehicleMap : std::as_const(_allCommands)) {
46 for (
const auto &commandMap : vehicleMap) {
54 qCDebug(MissionCommandTreeLog) <<
this;
59 return _missionCommandTreeInstance();
62void MissionCommandTree::_collapseHierarchy(
const MissionCommandList *cmdList, QMap<MAV_CMD, MissionCommandUIInfo*> &collapsedTree)
const
68 for (
const MAV_CMD command: cmdList->commandIds()) {
71 if (collapsedTree.contains(command)) {
72 collapsedTree[command]->_overrideInfo(uiInfo);
85 _firmwareAndVehicleClassInfo(vehicle, vtolMode, firmwareClass, vehicleClass);
87 if (_allCommands.contains(firmwareClass) && _allCommands[firmwareClass].contains(vehicleClass)) {
92 QMap<MAV_CMD, MissionCommandUIInfo*> &collapsedTree = _allCommands[firmwareClass][vehicleClass];
108 _collapseHierarchy(_staticCommandTree[firmwareClass][vehicleClass], collapsedTree);
114 for (
const MAV_CMD cmd: collapsedTree.keys()) {
115 if (supportedCommands.contains(cmd)) {
116 const QString newCategory = collapsedTree[cmd]->category();
117 if (!_supportedCategories[firmwareClass][vehicleClass].contains(newCategory)) {
118 _supportedCategories[firmwareClass][vehicleClass].append(newCategory);
123 _supportedCategories[firmwareClass][vehicleClass].append(_allCommandsCategory);
126QStringList MissionCommandTree::_availableCategoriesForVehicle(
Vehicle *vehicle)
134 return _supportedCategories[firmwareClass][vehicleClass];
142 return uiInfo ? uiInfo->
friendlyName() : QStringLiteral(
"MAV_CMD(%1)").arg(
static_cast<int>(command));
150 return uiInfo ? uiInfo->
rawName() : QStringLiteral(
"MAV_CMD(%1)").arg(
static_cast<int>(command));
179 _firmwareAndVehicleClassInfo(vehicle, vtolMode, firmwareClass, vehicleClass);
180 _buildAllCommands(vehicle, vtolMode);
184 const QMap<MAV_CMD, MissionCommandUIInfo*> &infoMap = _allCommands[firmwareClass][vehicleClass];
185 if (infoMap.contains(command)) {
186 result = infoMap[command];
194 return _availableCategoriesForVehicle(vehicle);
210 const QMap<MAV_CMD, MissionCommandUIInfo*> commandMap = _allCommands[firmwareClass][vehicleClass];
212 for (
const MAV_CMD command: commandMap.keys()) {
213 if (supportedCommands.isEmpty() || supportedCommands.contains(command)) {
216 list.append(QVariant::fromValue(uiInfo));
229 vehicleClass = vtolMode;
Q_APPLICATION_STATIC(MissionCommandTree, _missionCommandTreeInstance)
#define QGC_LOGGING_CATEGORY(name, categoryStr)
FirmwarePlugin * firmwarePluginForAutopilot(MAV_AUTOPILOT firmwareType, MAV_TYPE vehicleType)
QList< QGCMAVLink::FirmwareClass_t > supportedFirmwareClasses()
Returns list of firmwares which are supported by the system.
static FirmwarePluginManager * instance()
virtual QList< MAV_CMD > supportedMissionCommands(QGCMAVLink::VehicleClass_t) const
List of supported mission commands. Empty list for all commands supported.
virtual QString missionCommandOverrides(QGCMAVLink::VehicleClass_t vehicleClass) const
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.
bool isTakeoffCommand(MAV_CMD command) const
MissionCommandTree(bool unitTest=false, QObject *parent=nullptr)
bool isLandCommand(MAV_CMD command) const
~MissionCommandTree()
Destructor for the MissionCommandTree class.
const QList< MAV_CMD > & allCommandIds() const
static MissionCommandTree * instance()
QString rawName(MAV_CMD command) const
Returns the raw name for the specified command.
QVariantList getCommandsForCategory(Vehicle *vehicle, const QString &category, bool showFlyThroughCommands)
QString friendlyName(MAV_CMD command) const
Returns the friendly name for the specified command.
QStringList categoriesForVehicle(Vehicle *vehicle)
const MissionCommandUIInfo * getUIInfo(Vehicle *vehicle, QGCMAVLink::VehicleClass_t vtolMode, MAV_CMD command)
QString category(void) const
bool isTakeoffCommand(void) const
QString friendlyName(void) const
bool specifiesCoordinate(void) const
bool isStandaloneCoordinate(void) const
QString rawName(void) const
bool isLandCommand(void) const
static VehicleClass_t vehicleClass(MAV_TYPE mavType)
static constexpr const VehicleClass_t VehicleClassSub
static constexpr const VehicleClass_t VehicleClassFixedWing
static constexpr const VehicleClass_t VehicleClassMultiRotor
static MAV_TYPE vehicleClassToMavType(VehicleClass_t vehicleClass)
static MAV_AUTOPILOT firmwareClassToAutopilot(FirmwareClass_t firmwareClass)
static constexpr const FirmwareClass_t FirmwareClassGeneric
static constexpr const VehicleClass_t VehicleClassRoverBoat
static FirmwareClass_t firmwareClass(MAV_AUTOPILOT autopilot)
static constexpr const VehicleClass_t VehicleClassVTOL
static constexpr const VehicleClass_t VehicleClassGeneric
static QList< VehicleClass_t > allVehicleClasses(void)
MAV_TYPE vehicleType() const
FirmwarePlugin * firmwarePlugin()
Provides access to the Firmware Plugin for this Vehicle.
MAV_AUTOPILOT firmwareType() const