Browse Source

More work getting _addMissionSetting right

QGC4.4
DonLakeFlyer 6 years ago
parent
commit
8667cde094
  1. 37
      src/MissionManager/MissionController.cc
  2. 2
      src/MissionManager/MissionController.h

37
src/MissionManager/MissionController.cc

@ -161,7 +161,12 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
// - A load from vehicle was manually requested // - A load from vehicle was manually requested
// - The initial automatic load from a vehicle completed and the current editor is empty // - The initial automatic load from a vehicle completed and the current editor is empty
_deinitAllVisualItems();
_visualItems->deleteLater();
_visualItems = nullptr;
_settingsItem = 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); QmlObjectListModel* newControllerMissionItems = new QmlObjectListModel(this);
const QList<MissionItem*>& newMissionItems = _missionManager->missionItems(); const QList<MissionItem*>& newMissionItems = _missionManager->missionItems();
qCDebug(MissionControllerLog) << "loading from vehicle: count"<< newMissionItems.count(); qCDebug(MissionControllerLog) << "loading from vehicle: count"<< newMissionItems.count();
@ -169,7 +174,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
_missionItemCount = newMissionItems.count(); _missionItemCount = newMissionItems.count();
emit missionItemCountChanged(_missionItemCount); emit missionItemCountChanged(_missionItemCount);
_addMissionSettings(newControllerMissionItems); MissionSettingsItem* settingsItem = _addMissionSettings(newControllerMissionItems);
int i=0; int i=0;
if (_controllerVehicle->firmwarePlugin()->sendHomePositionToVehicle() && newMissionItems.count() != 0 && !_flyView) { 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); SimpleMissionItem* simpleItem = new SimpleMissionItem(_controllerVehicle, _flyView, *missionItem, this);
if (TakeoffMissionItem::isTakeoffCommand(static_cast<MAV_CMD>(simpleItem->command()))) { if (TakeoffMissionItem::isTakeoffCommand(static_cast<MAV_CMD>(simpleItem->command()))) {
// This needs to be a TakeoffMissionItem // 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->deleteLater();
simpleItem = takeoffItem; simpleItem = takeoffItem;
} }
newControllerMissionItems->append(simpleItem); 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; _visualItems = newControllerMissionItems;
_settingsItem = settingsItem;
MissionController::_scanForAdditionalSettings(_visualItems, _controllerVehicle); 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 int nextSequenceNumber = 1; // Start with 1 since home is in 0
QJsonArray itemArray(json[_jsonItemsKey].toArray()); QJsonArray itemArray(json[_jsonItemsKey].toArray());
_addMissionSettings(visualItems); MissionSettingsItem* settingsItem = _addMissionSettings(visualItems);
if (json.contains(_jsonPlannedHomePositionKey)) { if (json.contains(_jsonPlannedHomePositionKey)) {
SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems); SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems);
if (item->load(json[_jsonPlannedHomePositionKey].toObject(), 0, errorString)) { if (item->load(json[_jsonPlannedHomePositionKey].toObject(), 0, errorString)) {
_settingsItem->setInitialHomePositionFromUser(item->coordinate()); settingsItem->setInitialHomePositionFromUser(item->coordinate());
item->deleteLater(); item->deleteLater();
} else { } else {
return false; return false;
@ -923,7 +925,7 @@ bool MissionController::_loadTextMissionFile(QTextStream& stream, QmlObjectListM
} }
if (versionOk) { if (versionOk) {
_addMissionSettings(visualItems); MissionSettingsItem* settingsItem = _addMissionSettings(visualItems);
while (!stream.atEnd()) { while (!stream.atEnd()) {
SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems); SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems);
@ -933,7 +935,7 @@ bool MissionController::_loadTextMissionFile(QTextStream& stream, QmlObjectListM
} else { } else {
if (TakeoffMissionItem::isTakeoffCommand(static_cast<MAV_CMD>(item->command()))) { if (TakeoffMissionItem::isTakeoffCommand(static_cast<MAV_CMD>(item->command()))) {
// This needs to be a TakeoffMissionItem // 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); takeoffItem->load(stream);
item->deleteLater(); item->deleteLater();
item = takeoffItem; item = takeoffItem;
@ -976,6 +978,8 @@ void MissionController::_initLoadedVisualItems(QmlObjectListModel* loadedVisualI
if (_visualItems->count() == 0) { if (_visualItems->count() == 0) {
_addMissionSettings(_visualItems); _addMissionSettings(_visualItems);
} else {
_settingsItem = _visualItems->value<MissionSettingsItem*>(0);
} }
MissionController::_scanForAdditionalSettings(_visualItems, _controllerVehicle); 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 /// 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"; qCDebug(MissionControllerLog) << "_addMissionSettings";
_settingsItem = new MissionSettingsItem(_controllerVehicle, _flyView, visualItems); MissionSettingsItem* settingsItem = new MissionSettingsItem(_controllerVehicle, _flyView, visualItems);
visualItems->insert(0, _settingsItem); visualItems->insert(0, settingsItem);
settingsItem->setHomePositionFromVehicle(_managerVehicle);
_settingsItem->setHomePositionFromVehicle(_managerVehicle); if (visualItems == _visualItems) {
_settingsItem = settingsItem;
}
return settingsItem;
} }
void MissionController::_centerHomePositionOnMissionItems(QmlObjectListModel *visualItems) void MissionController::_centerHomePositionOnMissionItems(QmlObjectListModel *visualItems)

2
src/MissionManager/MissionController.h

@ -278,7 +278,7 @@ private:
bool _findPreviousAltitude(int newIndex, double* prevAltitude, int* prevAltitudeMode); bool _findPreviousAltitude(int newIndex, double* prevAltitude, int* prevAltitudeMode);
static double _normalizeLat(double lat); static double _normalizeLat(double lat);
static double _normalizeLon(double lon); static double _normalizeLon(double lon);
void _addMissionSettings(QmlObjectListModel* visualItems); MissionSettingsItem* _addMissionSettings(QmlObjectListModel* visualItems);
void _centerHomePositionOnMissionItems(QmlObjectListModel* visualItems); void _centerHomePositionOnMissionItems(QmlObjectListModel* visualItems);
bool _loadJsonMissionFile(const QByteArray& bytes, QmlObjectListModel* visualItems, QString& errorString); bool _loadJsonMissionFile(const QByteArray& bytes, QmlObjectListModel* visualItems, QString& errorString);
bool _loadJsonMissionFileV1(const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString); bool _loadJsonMissionFileV1(const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString);

Loading…
Cancel
Save