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 final;
112 QString commandName (void) const final;
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 void appendMissionItems (QList<MissionItem*>& items, QObject* missionItemParent) final;
127 void applyNewAltitude (double newAltitude) final;
128 void setMissionFlightStatus (MissionFlightStatus_t& missionFlightStatus) final;
129 ReadyForSaveState readyForSaveState (void) const final;
130 double additionalTimeDelay (void) const final;
131 bool exitCoordinateSameAsEntry (void) const final { return true; }
132
133 void setDirty (bool dirty) final;
134 void setCoordinate (const QGeoCoordinate& coordinate) override;
135 void setSequenceNumber (int sequenceNumber) final;
136 int lastSequenceNumber (void) const final;
137 void save (QJsonArray& missionItems) final;
138
139signals:
142 void headingDegreesChanged (double heading);
150
151private slots:
152 void _setDirty (void);
153 void _sectionDirtyChanged (bool dirty);
154 void _sendCommandChanged (void);
155 void _sendCoordinateChanged (void);
156 void _sendFriendlyEditAllowedChanged (void);
157 void _altitudeChanged (void);
158 void _altitudeFrameChanged (void);
159 void _terrainAltChanged (void);
160 void _updateLastSequenceNumber (void);
161 void _rebuildFacts (void);
162 void _rebuildTextFieldFacts (void);
163 void _possibleAdditionalTimeDelayChanged (void);
164 void _setDefaultsForCommand (void);
165 void _possibleVehicleYawChanged (void);
166 void _signalIfVTOLTransitionCommand (void);
167 void _possibleRadiusChanged (void);
168
169private:
170 void _connectSignals (void);
171 void _setupMetaData (void);
172 void _updateOptionalSections(void);
173 void _rebuildNaNFacts (void);
174 void _rebuildComboBoxFacts (void);
175
176 MissionItem _missionItem;
177 bool _rawEdit = false;
178 bool _dirty = false;
179 bool _ignoreDirtyChangeSignals = false;
180 QGeoCoordinate _mapCenterHint;
181 SpeedSection* _speedSection = nullptr;
182 CameraSection* _cameraSection = nullptr;
183
184 bool _syncingHeadingDegreesAndParam4 = false;
185
186 Fact _supportedCommandFact;
187
189 Fact _altitudeFact;
190 Fact _amslAltAboveTerrainFact;
191
192 QmlObjectListModel _textFieldFacts;
193 QmlObjectListModel _textFieldFactsAdvanced;
194 QmlObjectListModel _nanFacts;
195 QmlObjectListModel _nanFactsAdvanced;
196 QmlObjectListModel _comboboxFacts;
197 QmlObjectListModel _comboboxFactsAdvanced;
198
199 static FactMetaData* _altitudeMetaData;
200 static FactMetaData* _commandMetaData;
201 static FactMetaData* _defaultParamMetaData;
202 static FactMetaData* _frameMetaData;
203 static FactMetaData* _latitudeMetaData;
204 static FactMetaData* _longitudeMetaData;
205
206 FactMetaData _param1MetaData;
207 FactMetaData _param2MetaData;
208 FactMetaData _param3MetaData;
209 FactMetaData _param4MetaData;
210 FactMetaData _param5MetaData;
211 FactMetaData _param6MetaData;
212 FactMetaData _param7MetaData;
213
214 static constexpr const char* _jsonAltitudeModeKey = "AltitudeMode";
215 static constexpr const char* _jsonAltitudeKey = "Altitude";
216 static constexpr const char* _jsonAMSLAltAboveTerrainKey = "AMSLAltAboveTerrain";
217
218 struct EnumInfo_s {
219 const char * label;
220 MAV_FRAME frame;
221 };
222
223 static constexpr const struct EnumInfo_s _rgMavFrameInfo[] = {
224 { "MAV_FRAME_GLOBAL", MAV_FRAME_GLOBAL },
225 { "MAV_FRAME_LOCAL_NED", MAV_FRAME_LOCAL_NED },
226 { "MAV_FRAME_MISSION", MAV_FRAME_MISSION },
227 { "MAV_FRAME_GLOBAL_RELATIVE_ALT", MAV_FRAME_GLOBAL_RELATIVE_ALT },
228 { "MAV_FRAME_LOCAL_ENU", MAV_FRAME_LOCAL_ENU },
229 { "MAV_FRAME_GLOBAL_INT", MAV_FRAME_GLOBAL_INT },
230 { "MAV_FRAME_GLOBAL_RELATIVE_ALT_INT", MAV_FRAME_GLOBAL_RELATIVE_ALT_INT },
231 { "MAV_FRAME_LOCAL_OFFSET_NED", MAV_FRAME_LOCAL_OFFSET_NED },
232 { "MAV_FRAME_BODY_NED", MAV_FRAME_BODY_NED },
233 { "MAV_FRAME_BODY_OFFSET_NED", MAV_FRAME_BODY_OFFSET_NED },
234 { "MAV_FRAME_GLOBAL_TERRAIN_ALT", MAV_FRAME_GLOBAL_TERRAIN_ALT },
235 { "MAV_FRAME_GLOBAL_TERRAIN_ALT_INT", MAV_FRAME_GLOBAL_TERRAIN_ALT_INT },
236 };
237};
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:17
QVariant cookedValue() const
Definition Fact.cc:220
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
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)
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
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)
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)
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