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
13{
14 Q_OBJECT
15 Q_MOC_INCLUDE("SpeedSection.h")
16 Q_MOC_INCLUDE("CameraSection.h")
17
18public:
21
23
24 Q_PROPERTY(QString category READ category NOTIFY commandChanged)
26 Q_PROPERTY(bool rawEdit READ rawEdit WRITE setRawEdit NOTIFY rawEditChanged)
27 Q_PROPERTY(bool specifiesAltitude READ specifiesAltitude NOTIFY commandChanged)
28 Q_PROPERTY(Fact* altitude READ altitude CONSTANT)
30 Q_PROPERTY(Fact* amslAltAboveTerrain READ amslAltAboveTerrain CONSTANT)
31 Q_PROPERTY(int command READ command WRITE setCommand NOTIFY commandChanged)
32 Q_PROPERTY(bool isLoiterItem READ isLoiterItem NOTIFY isLoiterItemChanged)
34 Q_PROPERTY(double loiterRadius READ loiterRadius WRITE setRadius NOTIFY loiterRadiusChanged)
35
36
37 Q_PROPERTY(QObject* speedSection READ speedSection NOTIFY speedSectionChanged)
38 Q_PROPERTY(QObject* cameraSection READ cameraSection NOTIFY cameraSectionChanged)
39
40 // These properties are used to display the editing ui
41 Q_PROPERTY(QmlObjectListModel* comboboxFacts READ comboboxFacts CONSTANT)
43 Q_PROPERTY(QmlObjectListModel* textFieldFacts READ textFieldFacts CONSTANT)
45 Q_PROPERTY(QmlObjectListModel* nanFacts READ nanFacts CONSTANT)
47
48
51 Q_INVOKABLE void setMapCenterHintForCommandChange(QGeoCoordinate mapCenter) { _mapCenterHint = mapCenter; }
52
59
60 // Property accesors
61
62 QString category (void) const;
63 int command (void) const { return _missionItem._commandFact.cookedValue().toInt(); }
64 MAV_CMD mavCommand (void) const { return static_cast<MAV_CMD>(command()); }
65 bool friendlyEditAllowed (void) const;
66 bool rawEdit (void) const;
67 bool specifiesAltitude (void) const;
68 QGroundControlQmlGlobal::AltitudeFrame altitudeFrame(void) const { return _altitudeFrame; }
69 Fact* altitude (void) { return &_altitudeFact; }
70 Fact* amslAltAboveTerrain (void) { return &_amslAltAboveTerrainFact; }
71 bool isLoiterItem (void) const;
72 bool showLoiterRadius (void) const;
73 double loiterRadius (void) const;
74
75 CameraSection* cameraSection (void) { return _cameraSection; }
76 SpeedSection* speedSection (void) { return _speedSection; }
77
78 QmlObjectListModel* textFieldFacts (void) { return &_textFieldFacts; }
79 QmlObjectListModel* textFieldFactsAdvanced (void) { return &_textFieldFactsAdvanced; }
80 QmlObjectListModel* nanFacts (void) { return &_nanFacts; }
81 QmlObjectListModel* nanFactsAdvanced (void) { return &_nanFactsAdvanced; }
82 QmlObjectListModel* comboboxFacts (void) { return &_comboboxFacts; }
83 QmlObjectListModel* comboboxFactsAdvanced (void) { return &_comboboxFactsAdvanced; }
84
85 void setRawEdit(bool rawEdit);
87
88 void setCommandByIndex(int index);
89
90 void setCommand(int command);
91
94 void setAzimuth (double azimuth);
95 void setDistance (double distance);
96 void setRadius (double loiterRadius);
97
98 virtual bool load(QTextStream &loadStream);
99 virtual bool load(const QJsonObject& json, int sequenceNumber, QString& errorString);
100
101 MissionItem& missionItem(void) { return _missionItem; }
102 const MissionItem& missionItem(void) const { return _missionItem; }
103
104 // Overrides from VisualMissionItem
105 bool dirty (void) const override { return _dirty; }
106 bool isSimpleItem (void) const final { return true; }
107 bool isStandaloneCoordinate (void) const final;
108 bool isLandCommand (void) const final;
109 bool specifiesCoordinate (void) const final;
110 bool specifiesAltitudeOnly (void) const final;
111 QString commandDescription (void) const override;
112 QString commandName (void) const override;
113 QString abbreviation (void) const final;
114 QGeoCoordinate coordinate (void) const final;
115 QGeoCoordinate entryCoordinate (void) const final { return coordinate(); }
116 QGeoCoordinate exitCoordinate (void) const final { return coordinate(); }
117 double editableAlt (void) const final;
118 double amslEntryAlt (void) const final;
119 double amslExitAlt (void) const final { return amslEntryAlt(); }
120 int sequenceNumber (void) const final { return _missionItem.sequenceNumber(); }
121 double specifiedFlightSpeed (void) override;
122 double specifiedGimbalYaw (void) override;
123 double specifiedGimbalPitch (void) override;
124 double specifiedVehicleYaw (void) override;
125 QString mapVisualQML (void) const override { return QStringLiteral("SimpleItemMapVisual.qml"); }
126 QString geoMapVisualQML (void) const override { return QStringLiteral("GeoMapWaypointItem.qml"); }
127 bool terrainAltitudeRequiredInFlyView(void) const final { return _altitudeFrame == QGroundControlQmlGlobal::AltitudeFrameTerrain; }
128 void appendMissionItems (QList<MissionItem*>& items, QObject* missionItemParent) final;
129 void applyNewAltitude (double newAltitude) final;
130 void setMissionFlightStatus (MissionFlightStatus_t& missionFlightStatus) final;
131 ReadyForSaveState readyForSaveState (void) const final;
132 double additionalTimeDelay (void) const final;
133 bool exitCoordinateSameAsEntry (void) const final { return true; }
134
135 void setDirty (bool dirty) final;
136 void setCoordinate (const QGeoCoordinate& coordinate) override;
137 void setSequenceNumber (int sequenceNumber) final;
138 int lastSequenceNumber (void) const final;
139 void save (QJsonArray& missionItems) final;
140
141signals:
144 void headingDegreesChanged (double heading);
152
153private slots:
154 void _setDirty (void);
155 void _sectionDirtyChanged (bool dirty);
156 void _sendCommandChanged (void);
157 void _sendCoordinateChanged (void);
158 void _sendFriendlyEditAllowedChanged (void);
159 void _altitudeChanged (void);
160 void _altitudeFrameChanged (void);
161 void _terrainAltChanged (void);
162 void _updateLastSequenceNumber (void);
163 void _rebuildFacts (void);
164 void _rebuildTextFieldFacts (void);
165 void _possibleAdditionalTimeDelayChanged (void);
166 void _setDefaultsForCommand (void);
167 void _possibleVehicleYawChanged (void);
168 void _signalIfVTOLTransitionCommand (void);
169 void _possibleRadiusChanged (void);
170
171private:
172 void _connectSignals (void);
173 void _setupMetaData (void);
174 void _updateOptionalSections(void);
175 void _rebuildNaNFacts (void);
176 void _rebuildComboBoxFacts (void);
177
178 MissionItem _missionItem;
179 bool _rawEdit = false;
180 bool _dirty = false;
181 bool _ignoreDirtyChangeSignals = false;
182 QGeoCoordinate _mapCenterHint;
183 SpeedSection* _speedSection = nullptr;
184 CameraSection* _cameraSection = nullptr;
185
186 bool _syncingHeadingDegreesAndParam4 = false;
187
188 Fact _supportedCommandFact;
189
191 Fact _altitudeFact;
192 Fact _amslAltAboveTerrainFact;
193
194 QmlObjectListModel _textFieldFacts;
195 QmlObjectListModel _textFieldFactsAdvanced;
196 QmlObjectListModel _nanFacts;
197 QmlObjectListModel _nanFactsAdvanced;
198 QmlObjectListModel _comboboxFacts;
199 QmlObjectListModel _comboboxFactsAdvanced;
200
201 static FactMetaData* _altitudeMetaData;
202 static FactMetaData* _commandMetaData;
203 static FactMetaData* _defaultParamMetaData;
204 static FactMetaData* _frameMetaData;
205 static FactMetaData* _latitudeMetaData;
206 static FactMetaData* _longitudeMetaData;
207
208 FactMetaData _param1MetaData;
209 FactMetaData _param2MetaData;
210 FactMetaData _param3MetaData;
211 FactMetaData _param4MetaData;
212 FactMetaData _param5MetaData;
213 FactMetaData _param6MetaData;
214 FactMetaData _param7MetaData;
215
216 static constexpr const char* _jsonAltitudeModeKey = "AltitudeMode";
217 static constexpr const char* _jsonAltitudeKey = "Altitude";
218 static constexpr const char* _jsonAMSLAltAboveTerrainKey = "AMSLAltAboveTerrain";
219
220 struct EnumInfo_s {
221 const char * label;
222 MAV_FRAME frame;
223 };
224
225 static constexpr const struct EnumInfo_s _rgMavFrameInfo[] = {
226 { "MAV_FRAME_GLOBAL", MAV_FRAME_GLOBAL },
227 { "MAV_FRAME_LOCAL_NED", MAV_FRAME_LOCAL_NED },
228 { "MAV_FRAME_MISSION", MAV_FRAME_MISSION },
229 { "MAV_FRAME_GLOBAL_RELATIVE_ALT", MAV_FRAME_GLOBAL_RELATIVE_ALT },
230 { "MAV_FRAME_LOCAL_ENU", MAV_FRAME_LOCAL_ENU },
231 { "MAV_FRAME_GLOBAL_INT", MAV_FRAME_GLOBAL_INT },
232 { "MAV_FRAME_GLOBAL_RELATIVE_ALT_INT", MAV_FRAME_GLOBAL_RELATIVE_ALT_INT },
233 { "MAV_FRAME_LOCAL_OFFSET_NED", MAV_FRAME_LOCAL_OFFSET_NED },
234 { "MAV_FRAME_BODY_NED", MAV_FRAME_BODY_NED },
235 { "MAV_FRAME_BODY_OFFSET_NED", MAV_FRAME_BODY_OFFSET_NED },
236 { "MAV_FRAME_GLOBAL_TERRAIN_ALT", MAV_FRAME_GLOBAL_TERRAIN_ALT },
237 { "MAV_FRAME_GLOBAL_TERRAIN_ALT_INT", MAV_FRAME_GLOBAL_TERRAIN_ALT_INT },
238 };
239};
QString errorString
Holds the meta data associated with a Fact.
A Fact is used to hold a single value within the system.
Definition Fact.h:15
QVariant cookedValue() const
Definition Fact.cc:227
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.
QString commandDescription(void) const override
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
QString commandName(void) const override
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
bool terrainAltitudeRequiredInFlyView(void) const final
QmlObjectListModel * nanFacts(void)
void altitudeFrameChanged(void)
QString abbreviation(void) const final
void setAltPercent(double altPercent)
SpeedSection * speedSection(void)
const MissionItem & missionItem(void) const
CameraSection * cameraSection(void)
double specifiedVehicleYaw(void) override
int lastSequenceNumber(void) const final
void setRadius(double loiterRadius)
MAV_CMD mavCommand(void) const
QString mapVisualQML(void) const override
QString geoMapVisualQML(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
virtual bool load(QTextStream &loadStream)
double loiterRadius(void) const
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)
Q_INVOKABLE void setMapCenterHintForCommandChange(QGeoCoordinate mapCenter)
Optional sections.
int command(void) const
void setAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrame altitudeFrame)
double specifiedGimbalYaw(void) override
MissionItem & missionItem(void)
~SimpleMissionItem()
true: raw item editing with all params
double specifiedGimbalPitch(void) override
void cameraSectionChanged(QObject *cameraSection)
QGroundControlQmlGlobal::AltitudeFrame altitudeFrame(void) const
QmlObjectListModel * comboboxFacts(void)
void setDirty(bool dirty) final
void setRawEdit(bool rawEdit)
void save(QJsonArray &missionItems) final
QString category(void) const
void setMissionFlightStatus(MissionFlightStatus_t &missionFlightStatus) final
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