diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 613019bc6c2ed2d5076a151c6bf317b0680e50a0..98177a3962bbaacbbce2d212af4a29e771461a76 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -259,7 +259,7 @@ void MissionController::sendToVehicle(void) /// Converts from visual items to MissionItems /// @param missionItemParent QObject parent for newly allocated MissionItems, _surveyMissionItemName (tr("Survey")) /// @return true: Mission end action was added to end of list -bool MissionController::_convertToMissionItems(QmlObjectListModel* visualMissionItems, QList& rgMissionItems, QObject* missionItemParent) +bool MissionController::convertToMissionItems(QmlObjectListModel* visualMissionItems, QList& rgMissionItems, QObject* missionItemParent) { if (visualMissionItems->count() == 0) { return false; @@ -294,7 +294,7 @@ void MissionController::convertToKMLDocument(QDomDocument& document) QObject* deleteParent = new QObject(); QList rgMissionItems; - _convertToMissionItems(_visualItems, rgMissionItems, deleteParent); + convertToMissionItems(_visualItems, rgMissionItems, deleteParent); if (rgMissionItems.count() == 0) { return; } @@ -336,7 +336,7 @@ void MissionController::sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* if (vehicle) { QList rgMissionItems; - _convertToMissionItems(visualMissionItems, rgMissionItems, vehicle); + convertToMissionItems(visualMissionItems, rgMissionItems, vehicle); // PlanManager takes control of MissionItems so no need to delete vehicle->missionManager()->writeMissionItems(rgMissionItems); @@ -1043,7 +1043,7 @@ void MissionController::save(QJsonObject& json) if (settingsItem) { QList rgMissionItems; - if (_convertToMissionItems(_visualItems, rgMissionItems, this /* missionItemParent */)) { + if (convertToMissionItems(_visualItems, rgMissionItems, this /* missionItemParent */)) { QJsonObject saveObject; MissionItem* missionItem = rgMissionItems[rgMissionItems.count() - 1]; missionItem->save(saveObject); diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index a86c8a86554fce1dea34a921e0f46b0f0dd7be58..6a0f4eb7fb3e38edf85e241740a1bbd7c3cd205f 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -143,6 +143,9 @@ public: /// Sends the mission items to the specified vehicle static void sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems); + static bool convertToMissionItems(QmlObjectListModel* visualMissionItems, QList& rgMissionItems, QObject* missionItemParent); + + bool loadJsonFile(QFile& file, QString& errorString); bool loadTextFile(QFile& file, QString& errorString); @@ -269,7 +272,6 @@ private: bool _loadTextMissionFile(QTextStream& stream, QmlObjectListModel* visualItems, QString& errorString); int _nextSequenceNumber(void); void _scanForAdditionalSettings(QmlObjectListModel* visualItems, Vehicle* vehicle); - static bool _convertToMissionItems(QmlObjectListModel* visualMissionItems, QList& rgMissionItems, QObject* missionItemParent); void _setPlannedHomePositionFromFirstCoordinate(const QGeoCoordinate& clickCoordinate); void _resetMissionFlightStatus(void); void _addHoverTime(double hoverTime, double hoverDistance, int waypointIndex); diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h index 38b4e0aec406f0644e60370ff26ca2dafb5114e9..0d056f8b1862dc5b988a395e3a4acbbf1056232c 100644 --- a/src/Wima/WimaController.h +++ b/src/Wima/WimaController.h @@ -40,6 +40,7 @@ public: Q_PROPERTY(QStringList saveNameFilters READ saveNameFilters CONSTANT) Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT) Q_PROPERTY(WimaDataContainer* dataContainer READ dataContainer WRITE setDataContainer NOTIFY dataContainerChanged) + Q_PROPERTY(QmlObjectListModel* missionItems READ missionItems NOTIFY missionItemsChanged) // Property accessors @@ -103,5 +104,6 @@ private: WimaServiceAreaData _serviceArea; // area for supplying WimaCorridorData _corridor; // corridor connecting opArea and serArea bool _localPlanDataValid; + QmlObjectListModel _missionItems; }; diff --git a/src/Wima/WimaPlanData.cc b/src/Wima/WimaPlanData.cc index 5e254214c0668c7c57c14cc428ecdb0710374a29..69ffd06c22c0b6cac31e70a18c7117394be81753 100644 --- a/src/Wima/WimaPlanData.cc +++ b/src/Wima/WimaPlanData.cc @@ -95,6 +95,11 @@ void WimaPlanData::append(const WimaMeasurementAreaData &areaData) } } +void WimaPlanData::append(const QList &missionItems) +{ + _missionItems.append(missionItems); +} + /*! * \fn void WimaPlanData::append(const WimaServiceAreaData &areaData) * @@ -103,6 +108,7 @@ void WimaPlanData::append(const WimaMeasurementAreaData &areaData) void WimaPlanData::clear() { _areaList.clear(); + _missionItems.clear(); } QList WimaPlanData::areaList() const @@ -110,6 +116,11 @@ QList WimaPlanData::areaList() const return _areaList; } +QList WimaPlanData::missionItems() const +{ + return _missionItems; +} + /*! * \class WimaPlanData * \brief Class storing data generated by the \c WimaPlaner class. diff --git a/src/Wima/WimaPlanData.h b/src/Wima/WimaPlanData.h index d59fea36803675abd0335f1ed529f836f7738133..c283797e695153f7d7576965b23a7882f580deba 100644 --- a/src/Wima/WimaPlanData.h +++ b/src/Wima/WimaPlanData.h @@ -7,6 +7,7 @@ #include "WimaCorridorData.h" #include "WimaMeasurementAreaData.h" #include "WimaJoinedAreaData.h" +#include "MissionItem.h" class WimaPlanData : QObject { @@ -21,9 +22,11 @@ public: void append(const WimaServiceAreaData &areaData); void append(const WimaCorridorData &areaData); void append(const WimaMeasurementAreaData &areaData); + void append(const QList &missionItems); void clear(); QList areaList() const; + QList missionItems() const; @@ -36,4 +39,6 @@ private: WimaCorridorData _corridor; WimaMeasurementAreaData _measurementArea; QList _areaList; + + QList _missionItems; }; diff --git a/src/Wima/WimaPlaner.cc b/src/Wima/WimaPlaner.cc index 3edce2c7e1520d1eed85427a992bfac089c1ab88..6ff0434e1f44f4757e877a4f999d3ef41b81ac8a 100644 --- a/src/Wima/WimaPlaner.cc +++ b/src/Wima/WimaPlaner.cc @@ -672,11 +672,21 @@ void WimaPlaner::setInteractive() WimaPlanData WimaPlaner::toPlanData() { WimaPlanData planData; + + // store areas planData.append(WimaMeasurementAreaData(_measurementArea)); planData.append(WimaServiceAreaData(_serviceArea)); planData.append(WimaCorridorData(_corridor)); planData.append(WimaJoinedAreaData(_joinedArea)); + // convert mission items to mavlink commands + QList rgMissionItems; + MissionController::convertToMissionItems(_missionController->visualItems(), rgMissionItems, this); + QList rgMissionItemsConst; + for (auto missionItem : rgMissionItems) + rgMissionItemsConst.append(missionItem); + // store mavlink commands + planData.append(rgMissionItemsConst); return planData; } diff --git a/src/WimaView/WimaView.qml b/src/WimaView/WimaView.qml index 39c0b751ee5ac67f318b4fbbf662f8a3e98ae510..d2046ec7ceeda60a96fc691261968855cdfe1e61 100644 --- a/src/WimaView/WimaView.qml +++ b/src/WimaView/WimaView.qml @@ -1289,7 +1289,7 @@ QGCView { QGCButton { text: qsTr("Upload") Layout.fillWidth: true - enabled: /*!masterController.offline &&*/ !masterController.syncInProgress && _visualItems.count > 1 + enabled: !masterController.offline && !masterController.syncInProgress && _visualItems.count > 1 visible: !QGroundControl.corePlugin.options.disableVehicleConnection onClicked: { dropPanel.hide()