QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MissionController.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QHash>
4#include <QtCore/QFile>
5#include <QtCore/QPersistentModelIndex>
6#include <QtCore/QVariant>
7#include <QtPositioning/QGeoCoordinate>
8#include <QtQmlIntegration/QtQmlIntegration>
9
11#include "QmlObjectListModel.h"
12#include "QmlObjectTreeModel.h"
13#include "QGCGeoBoundingCube.h"
15#include "QGCMAVLink.h"
16#include "MissionFlightStatus.h"
18
21class MissionItem;
22class AppSettings;
23class MissionManager;
31class Vehicle;
32
33typedef QPair<VisualMissionItem*,VisualMissionItem*> VisualItemPair;
34typedef QHash<VisualItemPair, FlightPathSegment*> FlightPathSegmentHashTable;
35
37{
38 Q_OBJECT
39 QML_ELEMENT
40 QML_UNCREATABLE("")
41 Q_MOC_INCLUDE("FlightPathSegment.h")
42 Q_MOC_INCLUDE("VisualMissionItem.h")
43 Q_MOC_INCLUDE("TakeoffMissionItem.h")
44
45public:
46 MissionController(PlanMasterController* masterController, QObject* parent = nullptr);
48
49 // Legacy alias kept for source compatibility with external code
51
53 Q_PROPERTY(QmlObjectTreeModel* visualItemsTree READ visualItemsTree CONSTANT)
54 Q_PROPERTY(QPersistentModelIndex planFileGroupIndex READ planFileGroupIndex CONSTANT)
55 Q_PROPERTY(QPersistentModelIndex defaultsGroupIndex READ defaultsGroupIndex CONSTANT)
56 Q_PROPERTY(QPersistentModelIndex missionGroupIndex READ missionGroupIndex CONSTANT)
57 Q_PROPERTY(QPersistentModelIndex fenceGroupIndex READ fenceGroupIndex CONSTANT)
58 Q_PROPERTY(QPersistentModelIndex rallyGroupIndex READ rallyGroupIndex CONSTANT)
59 Q_PROPERTY(QPersistentModelIndex transformGroupIndex READ transformGroupIndex CONSTANT)
61 Q_PROPERTY(QmlObjectListModel* directionArrows READ directionArrows CONSTANT)
62 Q_PROPERTY(QVariantList complexMissionItems READ complexMissionItems NOTIFY complexMissionItemsChanged)
63 Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged)
64 Q_PROPERTY(bool homePositionSet READ homePositionSet NOTIFY homePositionSetChanged)
65 Q_PROPERTY(QGeoCoordinate previousCoordinate MEMBER _previousCoordinate NOTIFY planViewStateChanged)
66 Q_PROPERTY(FlightPathSegment* splitSegment MEMBER _splitSegment NOTIFY splitSegmentChanged)
67 Q_PROPERTY(double progressPct READ progressPct NOTIFY progressPctChanged)
76 Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged)
79 Q_PROPERTY(double missionHoverTime READ missionHoverTime NOTIFY missionHoverTimeChanged)
85 Q_PROPERTY(bool isInsertTakeoffValid MEMBER _isInsertTakeoffValid NOTIFY planViewStateChanged)
86 Q_PROPERTY(bool isInsertLandValid MEMBER _isInsertLandValid NOTIFY planViewStateChanged)
87 Q_PROPERTY(bool isInsertROIValid MEMBER _isInsertROIValid NOTIFY planViewStateChanged)
88 Q_PROPERTY(bool hasLandItem MEMBER _hasLandItem NOTIFY hasLandItemChanged)
90 Q_PROPERTY(bool isROIActive MEMBER _isROIActive NOTIFY planViewStateChanged)
91 Q_PROPERTY(bool isROIBeginCurrentItem MEMBER _isROIBeginCurrentItem NOTIFY planViewStateChanged)
92 Q_PROPERTY(bool flyThroughCommandsAllowed MEMBER _flyThroughCommandsAllowed NOTIFY planViewStateChanged)
93 Q_PROPERTY(double minAMSLAltitude MEMBER _minAMSLAltitude NOTIFY minAMSLAltitudeChanged)
94 Q_PROPERTY(double maxAMSLAltitude MEMBER _maxAMSLAltitude NOTIFY maxAMSLAltitudeChanged)
95
98
99 Q_INVOKABLE void removeVisualItem(int viIndex);
100
102 Q_INVOKABLE int visualItemIndexForObject(QObject* object) const;
103
105 Q_INVOKABLE void setHomePosition(QGeoCoordinate coordinate);
106
112 Q_INVOKABLE VisualMissionItem* insertSimpleMissionItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem = false);
113
119 Q_INVOKABLE VisualMissionItem* insertTakeoffItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem = false);
120
127 QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem = false);
128
134 Q_INVOKABLE VisualMissionItem* insertLandItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem = false);
135
141 Q_INVOKABLE VisualMissionItem* insertROIMissionItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem = false);
142
147 Q_INVOKABLE VisualMissionItem* insertCancelROIMissionItem(int visualItemIndex, bool makeCurrentItem = false);
148
155 Q_INVOKABLE VisualMissionItem* insertComplexMissionItem(QString itemName, QGeoCoordinate mapCenterCoordinate, int visualItemIndex, bool makeCurrentItem = false);
156
164 Q_INVOKABLE VisualMissionItem* insertComplexMissionItemFromKMLOrSHP(QString itemName, QString file, int visualItemIndex, bool makeCurrentItem = false);
165
166 Q_INVOKABLE void resumeMission(int resumeIndex);
167
169 Q_INVOKABLE void applyDefaultMissionAltitude(void);
170
174 Q_INVOKABLE void setCurrentPlanViewSeqNum(int sequenceNumber, bool force);
175
184 Q_INVOKABLE void repositionMission(const QGeoCoordinate& newHome,
185 bool repositionTakeoffItems = true,
186 bool repositionLandingItems = true);
187
197 Q_INVOKABLE void offsetMission(double eastMeters,
198 double northMeters,
199 double upMeters = 0.0,
200 bool offsetTakeoffItems = false,
201 bool offsetLandingItems = false);
202
213 Q_INVOKABLE void rotateMission(double degreesCW,
214 bool rotateTakeoffItems = false,
215 bool rotateLandingItems = false);
216
218 SendToVehiclePreCheckStateOk, // Ok to send plan to vehicle
219 SendToVehiclePreCheckStateNoActiveVehicle, // There is no active vehicle
220 SendToVehiclePreCheckStateFirwmareVehicleMismatch, // Firmware/Vehicle type for plan mismatch with actual vehicle
221 SendToVehiclePreCheckStateActiveMission, // Vehicle is currently flying a mission
222 };
224
226
230 int readyForSaveState(void) const;
231
233 static void sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems);
234
235 bool loadTextFile(QFile& file, QString& errorString);
236
237 QGCGeoBoundingCube* travelBoundingCube () { return &_travelBoundingCube; }
238 QGeoCoordinate takeoffCoordinate () { return _takeoffCoordinate; }
239
240 // Overrides from PlanElementController
241 bool supported (void) const final { return true; }
242 void start (bool flyView) final;
243 void save (QJsonObject& json) final;
244 bool load (const QJsonObject& json, QString& errorString) final;
245 void loadFromVehicle (void) final;
246 void sendToVehicle (void) final;
247 void removeAll (void) final;
248 void removeAllFromVehicle (void) final;
249 bool syncInProgress (void) const final;
250 bool dirty (void) const final;
251 void setDirty (bool dirty) final;
252 bool containsItems (void) const final;
253 bool showPlanFromManagerVehicle (void) final;
254
255 // Create KML file
256 void addMissionToKML(KMLPlanDomDocument& planKML);
257
258 // Property accessors
259
260 QmlObjectListModel* visualItems (void) { return _visualItems; }
261 QmlObjectTreeModel* visualItemsTree (void) { return &_visualItemsTree; }
262 QPersistentModelIndex planFileGroupIndex (void) const { return _planFileGroupIndex; }
263 QPersistentModelIndex defaultsGroupIndex (void) const { return _defaultsGroupIndex; }
264 QPersistentModelIndex missionGroupIndex (void) const { return _missionGroupIndex; }
265 QPersistentModelIndex fenceGroupIndex (void) const { return _fenceGroupIndex; }
266 QPersistentModelIndex rallyGroupIndex (void) const { return _rallyGroupIndex; }
267 QPersistentModelIndex transformGroupIndex (void) const { return _transformGroupIndex; }
268 QmlObjectListModel* simpleFlightPathSegments (void) { return &_simpleFlightPathSegments; }
269 QmlObjectListModel* directionArrows (void) { return &_directionArrows; }
270 QVariantList complexMissionItems (void) const;
271 QGeoCoordinate plannedHomePosition (void) const;
272 bool homePositionSet (void) const;
273 VisualMissionItem* currentPlanViewItem (void) const { return _currentPlanViewItem; }
274 TakeoffMissionItem* takeoffMissionItem (void) const { return _takeoffMissionItem; }
275 double progressPct (void) const { return _progressPct; }
276 bool isInsertTakeoffValid (void) const;
277 bool multipleLandPatternsAllowed (void) const;
278 double minAMSLAltitude (void) const { return _minAMSLAltitude; }
279 double maxAMSLAltitude (void) const { return _maxAMSLAltitude; }
280
281 int currentMissionIndex (void) const;
282 int resumeMissionIndex (void) const;
283 int currentPlanViewSeqNum (void) const { return _currentPlanViewSeqNum; }
284 int currentPlanViewVIIndex (void) const { return _currentPlanViewVIIndex; }
285
286 double missionTotalDistance (void) const { return _missionFlightStatus.totalDistance; }
287 double missionPlannedDistance (void) const { return _missionFlightStatus.plannedDistance; }
288 double missionTime (void) const { return _missionFlightStatus.totalTime; }
289 double missionHoverDistance (void) const { return _missionFlightStatus.hoverDistance; }
290 double missionHoverTime (void) const { return _missionFlightStatus.hoverTime; }
291 double missionCruiseDistance (void) const { return _missionFlightStatus.cruiseDistance; }
292 double missionCruiseTime (void) const { return _missionFlightStatus.cruiseTime; }
293 double missionMaxTelemetry (void) const { return _missionFlightStatus.maxTelemetryDistance; }
294
295 int batteryChangePoint (void) const { return _missionFlightStatus.batteryChangePoint; }
296 int batteriesRequired (void) const { return _missionFlightStatus.batteriesRequired; }
297
298 bool isFirstLandingComplexItem (const LandingComplexItem* item) const;
299 bool isEmpty (void) const;
300
304
305 // Top-level group row indices in _visualItemsTree (must match _setupTreeModel order)
306 static constexpr int kPlanFileGroupRow = 0;
307 static constexpr int kDefaultsGroupRow = 1;
308 static constexpr int kMissionGroupRow = 2;
309 static constexpr int kFenceGroupRow = 3;
310 static constexpr int kRallyGroupRow = 4;
311 static constexpr int kTransformGroupRow = 5;
312 static constexpr int kGroupCount = 6;
313
314signals:
315 void visualItemsReset (void);
347
348private slots:
349 void _newMissionItemsAvailableFromVehicle (bool removeAllRequested);
350 void _itemCommandChanged (void);
351 void _inProgressChanged (bool inProgress);
352 void _currentMissionIndexChanged (int sequenceNumber);
353 void _recalcFlightPathSegments (void);
354 void _recalcMissionFlightStatus (void);
355 void _progressPctChanged (double progressPct);
356 void _visualItemsDirtyChanged (bool dirty);
357 void _managerSendComplete (bool error);
358 void _managerRemoveAllComplete (bool error);
359 void _updateTimeout (void);
360 void _complexBoundingBoxChanged (void);
361 void _recalcAll (void);
362 void _managerVehicleChanged (Vehicle* managerVehicle);
363 void _recalcPlanViewState (void);
364 // Incremental tree model sync slots
365 void _syncTreeMissionItemsInserted (const QModelIndex& parent, int first, int last);
366 void _syncTreeMissionItemsAboutToBeRemoved (const QModelIndex& parent, int first, int last);
367 void _syncTreeMissionItemsReset (void);
368 void _syncTreeRallyPointsInserted (const QModelIndex& parent, int first, int last);
369 void _syncTreeRallyPointsAboutToBeRemoved (const QModelIndex& parent, int first, int last);
370 void _syncTreeRallyPointsRemoved (const QModelIndex& parent, int first, int last);
371
372 void _syncTreeRallyPointsReset (void);
373private:
374 void _init (void);
375 void _setupTreeModel (void);
376 void _recalcSequence (void);
377 void _recalcChildItems (void);
378 void _recalcAllWithCoordinate (const QGeoCoordinate& coordinate);
379 void _setupNewVisualItems (QmlObjectListModel* newItems = nullptr);
380 void _initAllVisualItems (void);
381 void _deinitAllVisualItems (void);
382 void _initVisualItem (VisualMissionItem* item);
383 void _deinitVisualItem (VisualMissionItem* item);
384 void _setupActiveVehicle (Vehicle* activeVehicle, bool forceLoadFromVehicle);
385 bool _findPreviousAltitude (int newIndex, double* prevAltitude, QGroundControlQmlGlobal::AltitudeFrame* prevAltFrame);
386 MissionSettingsItem* _addMissionSettings (QmlObjectListModel* visualItems);
387 bool _loadJsonMissionFileV2 (const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString);
388 bool _loadTextMissionFile (QTextStream& stream, QmlObjectListModel* visualItems, QString& errorString);
389 int _nextSequenceNumber (void);
390 void _scanForAdditionalSettings (QmlObjectListModel* visualItems, PlanMasterController* masterController);
391 void _setPlannedHomePositionFromFirstCoordinate(const QGeoCoordinate& clickCoordinate);
392 void _resetMissionFlightStatus (void);
393 void _initLoadedVisualItems (QmlObjectListModel* loadedVisualItems);
394 FlightPathSegment* _addFlightPathSegment (FlightPathSegmentHashTable& prevItemPairHashTable, VisualItemPair& pair, bool mavlinkTerrainFrame);
395 VisualMissionItem* _insertSimpleMissionItemWorker (QGeoCoordinate coordinate, MAV_CMD command, int visualItemIndex, bool makeCurrentItem);
396 VisualMissionItem* _insertTakeoffItemWorker (MAV_CMD command, int visualItemIndex, bool makeCurrentItem);
397 void _insertComplexMissionItemWorker (const QGeoCoordinate& mapCenterCoordinate, ComplexMissionItem* complexItem, int visualItemIndex, bool makeCurrentItem);
398 bool _isROIBeginItem (SimpleMissionItem* simpleItem);
399 bool _isROICancelItem (SimpleMissionItem* simpleItem);
400 FlightPathSegment* _createFlightPathSegmentWorker (VisualItemPair& pair, bool mavlinkTerrainFrame);
401 void _allItemsRemoved (void);
402 void _firstItemAdded (void);
403
404 static double _normalizeLat (double lat);
405 static double _normalizeLon (double lon);
406 static bool _convertToMissionItems (QmlObjectListModel* visualMissionItems, QList<MissionItem*>& rgMissionItems, QObject* missionItemParent);
407
408private:
409 Vehicle* _controllerVehicle = nullptr;
410 Vehicle* _managerVehicle = nullptr;
411 MissionManager* _missionManager = nullptr;
412 QmlObjectListModel* _visualItems = nullptr;
413 QPersistentModelIndex _planFileGroupIndex;
414 QPersistentModelIndex _defaultsGroupIndex;
415 QPersistentModelIndex _missionGroupIndex;
416 QPersistentModelIndex _fenceGroupIndex;
417 QPersistentModelIndex _rallyGroupIndex;
418 QPersistentModelIndex _transformGroupIndex;
419 QObject _planFileGroupNode;
420 QObject _planFileInfoMarker;
421 QObject _defaultsGroupNode;
422 QObject _defaultsInfoMarker;
423 QObject _missionItemsGroupNode;
424 QObject _fenceGroupNode;
425 QObject _rallyGroupNode;
426 QObject _transformGroupNode;
427 QObject _fenceEditorMarker;
428 QObject _rallyHeaderMarker;
429 QObject _transformEditorMarker;
430 QmlObjectTreeModel _visualItemsTree; // Must be declared after group nodes so it's destroyed first
431 MissionSettingsItem* _settingsItem = nullptr;
432 PlanViewSettings* _planViewSettings = nullptr;
433 QmlObjectListModel _simpleFlightPathSegments;
434 QmlObjectListModel _directionArrows;
435 FlightPathSegmentHashTable _flightPathSegmentHashTable;
436 bool _firstItemsFromVehicle = false;
437 bool _itemsRequested = false;
438 bool _inRecalcSequence = false;
439 MissionFlightStatusCalculator _flightStatusCalc;
440 MissionFlightStatus_t _missionFlightStatus;
441 AppSettings* _appSettings = nullptr;
442 double _progressPct = 0;
443 int _currentPlanViewSeqNum = -1;
444 int _currentPlanViewVIIndex = -1;
445 VisualMissionItem* _currentPlanViewItem = nullptr;
446 TakeoffMissionItem* _takeoffMissionItem = nullptr;
447 QTimer _updateTimer;
448 QGCGeoBoundingCube _travelBoundingCube;
449 QGeoCoordinate _takeoffCoordinate;
450 QGeoCoordinate _previousCoordinate;
451 FlightPathSegment* _splitSegment = nullptr;
452 bool _isInsertTakeoffValid = true;
453 bool _isInsertLandValid = false;
454 bool _isInsertROIValid = false;
455 bool _hasLandItem = false;
456 bool _isROIActive = false;
457 bool _flyThroughCommandsAllowed = false;
458 bool _isROIBeginCurrentItem = false;
459 double _minAMSLAltitude = 0;
460 double _maxAMSLAltitude = 0;
461 bool _missionStartsInVTOLMulticopterMode = false;
462
464
465 static constexpr const char* _settingsGroup = "MissionController";
466 static constexpr const char* _jsonItemsKey = "items";
467 static constexpr const char* _jsonPlannedHomePositionKey = "plannedHomePosition";
468 static constexpr const char* _jsonFirmwareTypeKey = "firmwareType";
469 static constexpr const char* _jsonVehicleTypeKey = "vehicleType";
470 static constexpr const char* _jsonCruiseSpeedKey = "cruiseSpeed";
471 static constexpr const char* _jsonHoverSpeedKey = "hoverSpeed";
472 static constexpr const char* _jsonParamsKey = "params";
473 static constexpr const char* _jsonGlobalPlanAltitudeModeKey = "globalPlanAltitudeMode";
474
475 static constexpr int _missionFileVersion = 2;
476};
QPair< VisualMissionItem *, VisualMissionItem * > VisualItemPair
QHash< VisualItemPair, FlightPathSegment * > FlightPathSegmentHashTable
QString errorString
Error error
Application Settings.
Definition AppSettings.h:10
Used to convert a Plan to a KML document.
void minAMSLAltitudeChanged(double minAMSLAltitude)
Q_INVOKABLE void resumeMission(int resumeIndex)
static constexpr int kDefaultsGroupRow
double missionHoverDistance(void) const
double progressPct(void) const
Q_INVOKABLE int visualItemIndexForObject(QObject *object) const
Returns the visual item index for the given VisualMissionItem object, or -1 if not found.
void complexMissionItemsChanged(void)
Q_INVOKABLE void setHomePosition(QGeoCoordinate coordinate)
Set the planned home position from a map click.
VisualMissionItem * currentPlanViewItem(void) const
bool showPlanFromManagerVehicle(void) final
Q_INVOKABLE SendToVehiclePreCheckState sendToVehiclePreCheck(void)
bool dirty(void) const final
static constexpr int kMissionGroupRow
Q_INVOKABLE VisualMissionItem * insertComplexMissionItem(QString itemName, QGeoCoordinate mapCenterCoordinate, int visualItemIndex, bool makeCurrentItem=false)
QmlObjectTreeModel * visualItemsTree(void)
void batteriesRequiredChanged(int batteriesRequired)
double missionTime(void) const
bool loadTextFile(QFile &file, QString &errorString)
QmlObjectListModel * directionArrows(void)
void multipleLandPatternsAllowedChanged(void)
double minAMSLAltitude(void) const
double missionPlannedDistance(void) const
bool multipleLandPatternsAllowed(void) const
Q_INVOKABLE VisualMissionItem * insertTakeoffItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem=false)
QGeoCoordinate takeoffCoordinate()
Q_INVOKABLE VisualMissionItem * insertLandItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem=false)
Q_INVOKABLE void offsetMission(double eastMeters, double northMeters, double upMeters=0.0, bool offsetTakeoffItems=false, bool offsetLandingItems=false)
Q_INVOKABLE void setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
double maxAMSLAltitude(void) const
void maxAMSLAltitudeChanged(double maxAMSLAltitude)
void removeAllFromVehicle(void) final
void homePositionSetChanged(void)
void recalcTerrainProfile(void)
void missionPlannedDistanceChanged(double missionPlannedDistance)
void missionTotalDistanceChanged(double missionTotalDistance)
QPersistentModelIndex planFileGroupIndex(void) const
void hasLandItemChanged(void)
void _recalcFlightPathSegmentsSignal(void)
QPersistentModelIndex fenceGroupIndex(void) const
int currentMissionIndex(void) const
void missionMaxTelemetryChanged(double missionMaxTelemetry)
Q_INVOKABLE VisualMissionItem * insertVTOLMulticopterTakeoffItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem=false)
static void sendItemsToVehicle(Vehicle *vehicle, QmlObjectListModel *visualMissionItems)
Sends the mission items to the specified vehicle.
bool load(const QJsonObject &json, QString &errorString) final
double missionMaxTelemetry(void) const
void splitSegmentChanged(void)
Q_INVOKABLE void repositionMission(const QGeoCoordinate &newHome, bool repositionTakeoffItems=true, bool repositionLandingItems=true)
void resumeMissionReady(void)
@ SendToVehiclePreCheckStateFirwmareVehicleMismatch
void batteryChangePointChanged(int batteryChangePoint)
void takeoffMissionItemChanged(void)
Q_INVOKABLE void rotateMission(double degreesCW, bool rotateTakeoffItems=false, bool rotateLandingItems=false)
static constexpr int kGroupCount
void addMissionToKML(KMLPlanDomDocument &planKML)
void _recalcMissionFlightStatusSignal(void)
int batteriesRequired(void) const
-1 for not supported
void missionHoverDistanceChanged(double missionHoverDistance)
static constexpr int kFenceGroupRow
bool syncInProgress(void) const final
QPersistentModelIndex defaultsGroupIndex(void) const
TakeoffMissionItem * takeoffMissionItem(void) const
static constexpr int kRallyGroupRow
void sendToVehicle(void) final
void resumeMissionIndexChanged(void)
void currentMissionIndexChanged(int currentMissionIndex)
int batteryChangePoint(void) const
-1 for not supported, 0 for not needed
Q_INVOKABLE VisualMissionItem * insertROIMissionItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem=false)
void plannedHomePositionChanged(QGeoCoordinate plannedHomePosition)
Q_INVOKABLE void removeVisualItem(int viIndex)
bool isEmpty(void) const
void newItemsFromVehicle(void)
void setGlobalAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrame altFrame)
int currentPlanViewVIIndex(void) const
void save(QJsonObject &json) final
double missionCruiseDistance(void) const
Q_INVOKABLE VisualMissionItem * insertSimpleMissionItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem=false)
void missionHoverTimeChanged(void)
bool isFirstLandingComplexItem(const LandingComplexItem *item) const
QGeoCoordinate plannedHomePosition(void) const
QPersistentModelIndex transformGroupIndex(void) const
bool homePositionSet(void) const
bool containsItems(void) const final
void progressPctChanged(double progressPct)
void missionCruiseTimeChanged(void)
QPersistentModelIndex missionGroupIndex(void) const
QGroundControlQmlGlobal::AltitudeFrame globalAltitudeFrame(void)
int readyForSaveState(void) const
static constexpr int kPlanFileGroupRow
QGroundControlQmlGlobal::AltitudeFrame globalAltitudeFrameDefault(void)
int currentPlanViewSeqNum(void) const
void removeAll(void) final
Removes all from controller only.
::MissionFlightStatus_t MissionFlightStatus_t
Default to use for newly created items.
void visualItemsReset(void)
void missionBoundingCubeChanged(void)
bool isInsertTakeoffValid(void) const
double missionCruiseTime(void) const
QVariantList complexMissionItems(void) const
void missionTimeChanged(void)
QPersistentModelIndex rallyGroupIndex(void) const
Q_INVOKABLE void applyDefaultMissionAltitude(void)
Updates the altitudes of the items in the current mission to the new default altitude.
void setDirty(bool dirty) final
void start(bool flyView) final
Should be called immediately upon Component.onCompleted.
QGCGeoBoundingCube * travelBoundingCube()
void planViewStateChanged(void)
All plan-view properties are recomputed together in setCurrentPlanViewSeqNum, so one signal covers th...
void globalAltitudeFrameChanged(void)
void missionCruiseDistanceChanged(double missionCruiseDistance)
double missionTotalDistance(void) const
void resumeMissionUploadFail(void)
void loadFromVehicle(void) final
double missionHoverTime(void) const
QmlObjectListModel * simpleFlightPathSegments(void)
bool supported(void) const final
true: controller is waiting for the current load to complete
Q_INVOKABLE VisualMissionItem * insertCancelROIMissionItem(int visualItemIndex, bool makeCurrentItem=false)
static constexpr int kTransformGroupRow
int resumeMissionIndex(void) const
Q_INVOKABLE VisualMissionItem * insertComplexMissionItemFromKMLOrSHP(QString itemName, QString file, int visualItemIndex, bool makeCurrentItem=false)
QmlObjectListModel * visualItems(void)
Computes mission flight status (distances, times, battery, altitude range)
This is the abstract base clas for Plan Element controllers.
PlanMasterController * masterController(void)
Master controller for mission, fence, rally.
A tree model for QObject* items, usable from both C++ and QML.
A SimpleMissionItem is used to represent a single MissionItem to the ui.
Takeoff mission item is a special case of a SimpleMissionItem which supports Launch Location display/...
int batteriesRequired
-1 for not supported
int batteryChangePoint
-1 for not supported, 0 for not needed