QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SimpleMissionItem.h
Go to the documentation of this file.
1#pragma once
2
3#include "VisualMissionItem.h"
4#include "MissionItem.h"
6
7class SpeedSection;
8class CameraSection;
9
12{
13 Q_OBJECT
14 Q_MOC_INCLUDE("SpeedSection.h")
15 Q_MOC_INCLUDE("CameraSection.h")
16
17public:
20
22
23 Q_PROPERTY(QString category READ category NOTIFY commandChanged)
25 Q_PROPERTY(bool rawEdit READ rawEdit WRITE setRawEdit NOTIFY rawEditChanged)
26 Q_PROPERTY(bool specifiesAltitude READ specifiesAltitude NOTIFY commandChanged)
27 Q_PROPERTY(Fact* altitude READ altitude CONSTANT)
30 Q_PROPERTY(int command READ command WRITE setCommand NOTIFY commandChanged)
31 Q_PROPERTY(bool isLoiterItem READ isLoiterItem NOTIFY isLoiterItemChanged)
33 Q_PROPERTY(double loiterRadius READ loiterRadius WRITE setRadius NOTIFY loiterRadiusChanged)
34
35
36 Q_PROPERTY(QObject* speedSection READ speedSection NOTIFY speedSectionChanged)
37 Q_PROPERTY(QObject* cameraSection READ cameraSection NOTIFY cameraSectionChanged)
38
39 // These properties are used to display the editing ui
46
47
50 Q_INVOKABLE void setMapCenterHintForCommandChange(QGeoCoordinate mapCenter) { _mapCenterHint = mapCenter; }
51
58
59 // Property accesors
60
61 QString category (void) const;
62 int command (void) const { return _missionItem._commandFact.cookedValue().toInt(); }
63 MAV_CMD mavCommand (void) const { return static_cast<MAV_CMD>(command()); }
64 bool friendlyEditAllowed (void) const;
65 bool rawEdit (void) const;
66 bool specifiesAltitude (void) const;
67 QGroundControlQmlGlobal::AltMode altitudeMode(void) const { return _altitudeMode; }
68 Fact* altitude (void) { return &_altitudeFact; }
69 Fact* amslAltAboveTerrain (void) { return &_amslAltAboveTerrainFact; }
70 bool isLoiterItem (void) const;
71 bool showLoiterRadius (void) const;
72 double loiterRadius (void) const;
73
74 CameraSection* cameraSection (void) { return _cameraSection; }
75 SpeedSection* speedSection (void) { return _speedSection; }
76
77 QmlObjectListModel* textFieldFacts (void) { return &_textFieldFacts; }
78 QmlObjectListModel* textFieldFactsAdvanced (void) { return &_textFieldFactsAdvanced; }
79 QmlObjectListModel* nanFacts (void) { return &_nanFacts; }
80 QmlObjectListModel* nanFactsAdvanced (void) { return &_nanFactsAdvanced; }
81 QmlObjectListModel* comboboxFacts (void) { return &_comboboxFacts; }
82 QmlObjectListModel* comboboxFactsAdvanced (void) { return &_comboboxFactsAdvanced; }
83
84 void setRawEdit(bool rawEdit);
86
87 void setCommandByIndex(int index);
88
89 void setCommand(int command);
90
93 void setAzimuth (double azimuth);
94 void setDistance (double distance);
95 void setRadius (double loiterRadius);
96
97 virtual bool load(QTextStream &loadStream);
98 virtual bool load(const QJsonObject& json, int sequenceNumber, QString& errorString);
99
100 MissionItem& missionItem(void) { return _missionItem; }
101 const MissionItem& missionItem(void) const { return _missionItem; }
102
103 // Overrides from VisualMissionItem
104 bool dirty (void) const override { return _dirty; }
105 bool isSimpleItem (void) const final { return true; }
106 bool isStandaloneCoordinate (void) const final;
107 bool isLandCommand (void) const final;
108 bool specifiesCoordinate (void) const final;
109 bool specifiesAltitudeOnly (void) const final;
110 QString commandDescription (void) const final;
111 QString commandName (void) const final;
112 QString abbreviation (void) const final;
113 QGeoCoordinate coordinate (void) const final;
114 QGeoCoordinate entryCoordinate (void) const final { return coordinate(); }
115 QGeoCoordinate exitCoordinate (void) const final { return coordinate(); }
116 double editableAlt (void) const final;
117 double amslEntryAlt (void) const final;
118 double amslExitAlt (void) const final { return amslEntryAlt(); }
119 int sequenceNumber (void) const final { return _missionItem.sequenceNumber(); }
120 double specifiedFlightSpeed (void) override;
121 double specifiedGimbalYaw (void) override;
122 double specifiedGimbalPitch (void) override;
123 double specifiedVehicleYaw (void) override;
124 QString mapVisualQML (void) const override { return QStringLiteral("SimpleItemMapVisual.qml"); }
125 void appendMissionItems (QList<MissionItem*>& items, QObject* missionItemParent) final;
126 void applyNewAltitude (double newAltitude) final;
128 ReadyForSaveState readyForSaveState (void) const final;
129 double additionalTimeDelay (void) const final;
130 bool exitCoordinateSameAsEntry (void) const final { return true; }
131
132 void setDirty (bool dirty) final;
133 void setCoordinate (const QGeoCoordinate& coordinate) override;
134 void setSequenceNumber (int sequenceNumber) final;
135 int lastSequenceNumber (void) const final;
136 void save (QJsonArray& missionItems) final;
137
138signals:
141 void headingDegreesChanged (double heading);
149
150private slots:
151 void _setDirty (void);
152 void _sectionDirtyChanged (bool dirty);
153 void _sendCommandChanged (void);
154 void _sendCoordinateChanged (void);
155 void _sendFriendlyEditAllowedChanged (void);
156 void _altitudeChanged (void);
157 void _altitudeModeChanged (void);
158 void _terrainAltChanged (void);
159 void _updateLastSequenceNumber (void);
160 void _rebuildFacts (void);
161 void _rebuildTextFieldFacts (void);
162 void _possibleAdditionalTimeDelayChanged (void);
163 void _setDefaultsForCommand (void);
164 void _possibleVehicleYawChanged (void);
165 void _signalIfVTOLTransitionCommand (void);
166 void _possibleRadiusChanged (void);
167
168private:
169 void _connectSignals (void);
170 void _setupMetaData (void);
171 void _updateOptionalSections(void);
172 void _rebuildNaNFacts (void);
173 void _rebuildComboBoxFacts (void);
174
175 MissionItem _missionItem;
176 bool _rawEdit = false;
177 bool _dirty = false;
178 bool _ignoreDirtyChangeSignals = false;
179 QGeoCoordinate _mapCenterHint;
180 SpeedSection* _speedSection = nullptr;
181 CameraSection* _cameraSection = nullptr;
182
183 bool _syncingHeadingDegreesAndParam4 = false;
184
185 Fact _supportedCommandFact;
186
188 Fact _altitudeFact;
189 Fact _amslAltAboveTerrainFact;
190
191 QmlObjectListModel _textFieldFacts;
192 QmlObjectListModel _textFieldFactsAdvanced;
193 QmlObjectListModel _nanFacts;
194 QmlObjectListModel _nanFactsAdvanced;
195 QmlObjectListModel _comboboxFacts;
196 QmlObjectListModel _comboboxFactsAdvanced;
197
198 static FactMetaData* _altitudeMetaData;
199 static FactMetaData* _commandMetaData;
200 static FactMetaData* _defaultParamMetaData;
201 static FactMetaData* _frameMetaData;
202 static FactMetaData* _latitudeMetaData;
203 static FactMetaData* _longitudeMetaData;
204
205 FactMetaData _param1MetaData;
206 FactMetaData _param2MetaData;
207 FactMetaData _param3MetaData;
208 FactMetaData _param4MetaData;
209 FactMetaData _param5MetaData;
210 FactMetaData _param6MetaData;
211 FactMetaData _param7MetaData;
212
213 static constexpr const char* _jsonAltitudeModeKey = "AltitudeMode";
214 static constexpr const char* _jsonAltitudeKey = "Altitude";
215 static constexpr const char* _jsonAMSLAltAboveTerrainKey = "AMSLAltAboveTerrain";
216
217 struct EnumInfo_s {
218 const char * label;
219 MAV_FRAME frame;
220 };
221
222 static constexpr const struct EnumInfo_s _rgMavFrameInfo[] = {
223 { "MAV_FRAME_GLOBAL", MAV_FRAME_GLOBAL },
224 { "MAV_FRAME_LOCAL_NED", MAV_FRAME_LOCAL_NED },
225 { "MAV_FRAME_MISSION", MAV_FRAME_MISSION },
226 { "MAV_FRAME_GLOBAL_RELATIVE_ALT", MAV_FRAME_GLOBAL_RELATIVE_ALT },
227 { "MAV_FRAME_LOCAL_ENU", MAV_FRAME_LOCAL_ENU },
228 { "MAV_FRAME_GLOBAL_INT", MAV_FRAME_GLOBAL_INT },
229 { "MAV_FRAME_GLOBAL_RELATIVE_ALT_INT", MAV_FRAME_GLOBAL_RELATIVE_ALT_INT },
230 { "MAV_FRAME_LOCAL_OFFSET_NED", MAV_FRAME_LOCAL_OFFSET_NED },
231 { "MAV_FRAME_BODY_NED", MAV_FRAME_BODY_NED },
232 { "MAV_FRAME_BODY_OFFSET_NED", MAV_FRAME_BODY_OFFSET_NED },
233 { "MAV_FRAME_GLOBAL_TERRAIN_ALT", MAV_FRAME_GLOBAL_TERRAIN_ALT },
234 { "MAV_FRAME_GLOBAL_TERRAIN_ALT_INT", MAV_FRAME_GLOBAL_TERRAIN_ALT_INT },
235 };
236};
QString errorString
A Fact is used to hold a single value within the system.
Definition Fact.h:19
int sequenceNumber(void) const
Definition MissionItem.h:51
Master controller for mission, fence, rally.
A SimpleMissionItem is used to represent a single MissionItem to the ui.
bool specifiesCoordinate(void) const final
void setSequenceNumber(int sequenceNumber) final
void setAzimuth(double azimuth)
QmlObjectListModel * textFieldFactsAdvanced(void)
bool specifiesAltitudeOnly(void) const final
ReadyForSaveState readyForSaveState(void) const final
bool exitCoordinateSameAsEntry(void) const final
double editableAlt(void) const final
bool rawEdit(void) const
void setCommandByIndex(int index)
bool dirty(void) const override
bool isSimpleItem(void) const final
bool friendlyEditAllowed(void) const
void rawEditChanged(bool rawEdit)
void speedSectionChanged(QObject *cameraSection)
void commandChanged(int command)
bool isStandaloneCoordinate(void) const final
void applyNewAltitude(double newAltitude) final
Adjust the altitude of the item if appropriate to the new altitude.
QmlObjectListModel * textFieldFacts(void)
void appendMissionItems(QList< MissionItem * > &items, QObject *missionItemParent) final
void isLoiterItemChanged(void)
void friendlyEditAllowedChanged(bool friendlyEditAllowed)
int sequenceNumber(void) const final
QGroundControlQmlGlobal::AltMode altitudeMode(void) const
void loiterRadiusChanged(double loiterRadius)
QGeoCoordinate entryCoordinate(void) const final
void showLoiterRadiusChanged(void)
QmlObjectListModel * nanFactsAdvanced(void)
void setDistance(double distance)
bool scanForSections(QmlObjectListModel *visualItems, int scanIndex, PlanMasterController *masterController)
bool showLoiterRadius(void) const
QmlObjectListModel * nanFacts(void)
QString abbreviation(void) const final
void setAltPercent(double altPercent)
SpeedSection * speedSection(void)
const MissionItem & missionItem(void) const
CameraSection * cameraSection(void)
void altitudeModeChanged(void)
double specifiedVehicleYaw(void) override
int lastSequenceNumber(void) const final
void setRadius(double loiterRadius)
MAV_CMD mavCommand(void) const
QString mapVisualQML(void) const override
void setAltDifference(double altDifference)
double amslEntryAlt(void) const final
bool specifiesAltitude(void) const
QGeoCoordinate exitCoordinate(void) const final
Fact * amslAltAboveTerrain(void)
bool isLandCommand(void) const final
QGeoCoordinate coordinate(void) const final
void setAltitudeMode(QGroundControlQmlGlobal::AltMode altitudeMode)
virtual bool load(QTextStream &loadStream)
QString commandDescription(void) const final
double loiterRadius(void) const
QString commandName(void) const final
void setCoordinate(const QGeoCoordinate &coordinate) override
void setCommand(int command)
double specifiedFlightSpeed(void) override
bool isLoiterItem(void) const
double amslExitAlt(void) const final
QmlObjectListModel * comboboxFactsAdvanced(void)
QString category READ category NOTIFY commandChanged(bool friendlyEditAllowed READ friendlyEditAllowed NOTIFY friendlyEditAllowedChanged) 1(bool rawEdit READ rawEdit WRITE setRawEdit NOTIFY rawEditChanged) 1(bool specifiesAltitude READ specifiesAltitude NOTIFY commandChanged) 1(Fact *altitude READ altitude CONSTANT) 1(QGroundControlQmlGlobal
< true: raw item editing with all params
int command(void) const
double specifiedGimbalYaw(void) override
void setMissionFlightStatus(MissionController::MissionFlightStatus_t &missionFlightStatus) final
MissionItem & missionItem(void)
double specifiedGimbalPitch(void) override
void cameraSectionChanged(QObject *cameraSection)
QmlObjectListModel * comboboxFacts(void)
void setDirty(bool dirty) final
void setRawEdit(bool rawEdit)
void save(QJsonArray &missionItems) final
QString category(void) const
void headingDegreesChanged(double heading)
double additionalTimeDelay(void) const final
bool flyView(void) const
double altDifference(void) const
double altPercent(void) const
double distance(void) const
PlanMasterController * masterController(void)
double azimuth(void) const
bool homePosition READ homePosition CONSTANT(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) 1(double amslEntryAlt READ amslEntryAlt NOTIFY amslEntryAltChanged) 1(double terrainAltitude READ terrainAltitude NOTIFY terrainAltitudeChanged) 1(QGeoCoordinate entryCoordinate READ entryCoordinate NOTIFY entryCoordinateChanged) 1(QGeoCoordinate exitCoordinate READ exitCoordinate NOTIFY exitCoordinateChanged) 1(double amslExitAlt READ amslExitAlt NOTIFY amslExitAltChanged) 1(bool exitCoordinateSameAsEntry READ exitCoordinateSameAsEntry NOTIFY exitCoordinateSameAsEntryChanged) 1(QString commandDescription READ commandDescription NOTIFY commandDescriptionChanged) 1(QString commandName READ commandName NOTIFY commandNameChanged) 1(QString abbreviation READ abbreviation NOTIFY abbreviationChanged) 1(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged) 1(bool isCurrentItem READ isCurrentItem WRITE setIsCurrentItem NOTIFY isCurrentItemChanged) 1(bool hasCurrentChildItem READ hasCurrentChildItem WRITE setHasCurrentChildItem NOTIFY hasCurrentChildItemChanged) 1(int sequenceNumber READ sequenceNumber WRITE setSequenceNumber NOTIFY sequenceNumberChanged) 1(int lastSequenceNumber READ lastSequenceNumber NOTIFY lastSequenceNumberChanged) 1(bool specifiesCoordinate READ specifiesCoordinate NOTIFY specifiesCoordinateChanged) 1(bool isStandaloneCoordinate READ isStandaloneCoordinate NOTIFY isStandaloneCoordinateChanged) 1(bool specifiesAltitudeOnly READ specifiesAltitudeOnly NOTIFY specifiesAltitudeOnlyChanged) 1(bool isSimpleItem READ isSimpleItem NOTIFY isSimpleItemChanged) 1(bool isTakeoffItem READ isTakeoffItem NOTIFY isTakeoffItemChanged) 1(bool isLandCommand READ isLandCommand NOTIFY isLandCommandChanged) 1(bool isSurveyItem READ isSurveyItem) 1(QString editorQml MEMBER _editorQml CONSTANT) 1(QString mapVisualQML READ mapVisualQML CONSTANT) 1(double specifiedFlightSpeed READ specifiedFlightSpeed NOTIFY specifiedFlightSpeedChanged) 1(double specifiedGimbalYaw READ specifiedGimbalYaw NOTIFY specifiedGimbalYawChanged) 1(double specifiedGimbalPitch READ specifiedGimbalPitch NOTIFY specifiedGimbalPitchChanged) 1(double specifiedVehicleYaw READ specifiedVehicleYaw NOTIFY specifiedVehicleYawChanged) 1(double missionGimbalYaw READ missionGimbalYaw NOTIFY missionGimbalYawChanged) 1(double missionVehicleYaw READ missionVehicleYaw NOTIFY missionVehicleYawChanged) 1(bool flyView READ flyView CONSTANT) 1(bool wizardMode READ wizardMode WRITE setWizardMode NOTIFY wizardModeChanged) 1(int previousVTOLMode MEMBER _previousVTOLMode NOTIFY previousVTOLModeChanged) 1(PlanMasterController *masterController READ masterController CONSTANT) 1(ReadyForSaveState readyForSaveState READ readyForSaveState NOTIFY readyForSaveStateChanged) 1(VisualMissionItem *parentItem READ parentItem WRITE setParentItem NOTIFY parentItemChanged) 1(QmlObjectListModel *childItems READ childItems CONSTANT) 1(QGCGeoBoundingCube *boundingCube READ boundingCube NOTIFY boundingCubeChanged) 1(double altDifference READ altDifference WRITE setAltDifference NOTIFY altDifferenceChanged) 1(double altPercent READ altPercent WRITE setAltPercent NOTIFY altPercentChanged) 1(double terrainPercent READ terrainPercent WRITE setTerrainPercent NOTIFY terrainPercentChanged) 1(bool terrainCollision READ terrainCollision WRITE setTerrainCollision NOTIFY terrainCollisionChanged) 1(double azimuth READ azimuth WRITE setAzimuth NOTIFY azimuthChanged) 1(double distance READ distance WRITE setDistance NOTIFY distanceChanged) 1(double distanceFromStart READ distanceFromStart WRITE setDistanceFromStart NOTIFY distanceFromStartChanged) bool homePosition(void) const
< true: This item is being used as a home position indicator