From 8667cde094d72ffc7b8e010c37af7af560858217 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Wed, 13 Nov 2019 12:38:34 -0800 Subject: [PATCH] More work getting _addMissionSetting right --- src/MissionManager/MissionController.cc | 37 +++++++++++++++---------- src/MissionManager/MissionController.h | 2 +- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 9cfd481b8..c33d018cc 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -161,7 +161,12 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque // - A load from vehicle was manually requested // - The initial automatic load from a vehicle completed and the current editor is empty + _deinitAllVisualItems(); + _visualItems->deleteLater(); + _visualItems = nullptr; _settingsItem = nullptr; + _updateContainsItems(); // This will clear containsItems which will be set again below. This will re-pop Start Mission confirmation. + QmlObjectListModel* newControllerMissionItems = new QmlObjectListModel(this); const QList& newMissionItems = _missionManager->missionItems(); qCDebug(MissionControllerLog) << "loading from vehicle: count"<< newMissionItems.count(); @@ -169,7 +174,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque _missionItemCount = newMissionItems.count(); emit missionItemCountChanged(_missionItemCount); - _addMissionSettings(newControllerMissionItems); + MissionSettingsItem* settingsItem = _addMissionSettings(newControllerMissionItems); int i=0; if (_controllerVehicle->firmwarePlugin()->sendHomePositionToVehicle() && newMissionItems.count() != 0 && !_flyView) { @@ -186,18 +191,15 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque SimpleMissionItem* simpleItem = new SimpleMissionItem(_controllerVehicle, _flyView, *missionItem, this); if (TakeoffMissionItem::isTakeoffCommand(static_cast(simpleItem->command()))) { // This needs to be a TakeoffMissionItem - TakeoffMissionItem* takeoffItem = new TakeoffMissionItem(*missionItem, _controllerVehicle, _flyView, _settingsItem, this); + TakeoffMissionItem* takeoffItem = new TakeoffMissionItem(*missionItem, _controllerVehicle, _flyView, settingsItem, this); simpleItem->deleteLater(); simpleItem = takeoffItem; } newControllerMissionItems->append(simpleItem); } - _deinitAllVisualItems(); - _visualItems->deleteLater(); - _visualItems = nullptr; - _updateContainsItems(); // This will clear containsItems which will be set again below. This will re-pop Start Mission confirmation. _visualItems = newControllerMissionItems; + _settingsItem = settingsItem; MissionController::_scanForAdditionalSettings(_visualItems, _controllerVehicle); @@ -656,11 +658,11 @@ bool MissionController::_loadJsonMissionFileV1(const QJsonObject& json, QmlObjec int nextSequenceNumber = 1; // Start with 1 since home is in 0 QJsonArray itemArray(json[_jsonItemsKey].toArray()); - _addMissionSettings(visualItems); + MissionSettingsItem* settingsItem = _addMissionSettings(visualItems); if (json.contains(_jsonPlannedHomePositionKey)) { SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems); if (item->load(json[_jsonPlannedHomePositionKey].toObject(), 0, errorString)) { - _settingsItem->setInitialHomePositionFromUser(item->coordinate()); + settingsItem->setInitialHomePositionFromUser(item->coordinate()); item->deleteLater(); } else { return false; @@ -923,7 +925,7 @@ bool MissionController::_loadTextMissionFile(QTextStream& stream, QmlObjectListM } if (versionOk) { - _addMissionSettings(visualItems); + MissionSettingsItem* settingsItem = _addMissionSettings(visualItems); while (!stream.atEnd()) { SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems); @@ -933,7 +935,7 @@ bool MissionController::_loadTextMissionFile(QTextStream& stream, QmlObjectListM } else { if (TakeoffMissionItem::isTakeoffCommand(static_cast(item->command()))) { // This needs to be a TakeoffMissionItem - TakeoffMissionItem* takeoffItem = new TakeoffMissionItem(_controllerVehicle, _flyView, _settingsItem, visualItems); + TakeoffMissionItem* takeoffItem = new TakeoffMissionItem(_controllerVehicle, _flyView, settingsItem, visualItems); takeoffItem->load(stream); item->deleteLater(); item = takeoffItem; @@ -976,6 +978,8 @@ void MissionController::_initLoadedVisualItems(QmlObjectListModel* loadedVisualI if (_visualItems->count() == 0) { _addMissionSettings(_visualItems); + } else { + _settingsItem = _visualItems->value(0); } MissionController::_scanForAdditionalSettings(_visualItems, _controllerVehicle); @@ -1899,14 +1903,19 @@ double MissionController::_normalizeLon(double lon) } /// Add the Mission Settings complex item to the front of the items -void MissionController::_addMissionSettings(QmlObjectListModel* visualItems) +MissionSettingsItem* MissionController::_addMissionSettings(QmlObjectListModel* visualItems) { qCDebug(MissionControllerLog) << "_addMissionSettings"; - _settingsItem = new MissionSettingsItem(_controllerVehicle, _flyView, visualItems); - visualItems->insert(0, _settingsItem); + MissionSettingsItem* settingsItem = new MissionSettingsItem(_controllerVehicle, _flyView, visualItems); + visualItems->insert(0, settingsItem); + settingsItem->setHomePositionFromVehicle(_managerVehicle); - _settingsItem->setHomePositionFromVehicle(_managerVehicle); + if (visualItems == _visualItems) { + _settingsItem = settingsItem; + } + + return settingsItem; } void MissionController::_centerHomePositionOnMissionItems(QmlObjectListModel *visualItems) diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index d781d53e1..0c9f07335 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -278,7 +278,7 @@ private: bool _findPreviousAltitude(int newIndex, double* prevAltitude, int* prevAltitudeMode); static double _normalizeLat(double lat); static double _normalizeLon(double lon); - void _addMissionSettings(QmlObjectListModel* visualItems); + MissionSettingsItem* _addMissionSettings(QmlObjectListModel* visualItems); void _centerHomePositionOnMissionItems(QmlObjectListModel* visualItems); bool _loadJsonMissionFile(const QByteArray& bytes, QmlObjectListModel* visualItems, QString& errorString); bool _loadJsonMissionFileV1(const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString); -- GitLab