From 3b5b73d5dbb7975a59069ffc1788024c7ce9750b Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 6 Sep 2019 14:40:59 -0700 Subject: [PATCH] Use QmlObjectListModel::begin/endReset to keep Qt from blowing it's brains out with too many updates --- src/MissionManager/MissionController.cc | 16 ++++++++++++++-- src/MissionManager/MissionController.h | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 257a2a723..82309fac2 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -1110,9 +1110,14 @@ void MissionController::_recalcWaypointLines(void) qCDebug(MissionControllerLog) << "_recalcWaypointLines homePositionValid" << homePositionValid; CoordVectHashTable old_table = _linesTable; + _linesTable.clear(); - _waypointLines.clear(); _waypointPath.clear(); + + _waypointLines.beginReset(); + _directionArrows.beginReset(); + + _waypointLines.clear(); _directionArrows.clear(); bool linkEndToHome; @@ -1150,7 +1155,10 @@ void MissionController::_recalcWaypointLines(void) lastSegmentVisualItemPair = VisualItemPair(lastCoordinateItem, item); if (!_flyView || addDirectionArrow) { - _directionArrows.append(_addWaypointLineSegment(old_table, lastSegmentVisualItemPair)); + CoordinateVector* coordVector = _addWaypointLineSegment(old_table, lastSegmentVisualItemPair); + if (addDirectionArrow) { + _directionArrows.append(coordVector); + } } } firstCoordinateItem = false; @@ -1205,6 +1213,9 @@ void MissionController::_recalcWaypointLines(void) _waypointLines.swapObjectList(objs); } + _waypointLines.endReset(); + _directionArrows.endReset(); + // Anything left in the old table is an obsolete line object that can go qDeleteAll(old_table); @@ -1219,6 +1230,7 @@ void MissionController::_recalcWaypointLines(void) } emit waypointLinesChanged(); + emit directionArrowsChanged(); emit waypointPathChanged(); } diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 16d2c549c..cdb517262 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -70,7 +70,7 @@ public: Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged) Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged) ///< Used by Plan view only for interactive editing Q_PROPERTY(QVariantList waypointPath READ waypointPath NOTIFY waypointPathChanged) ///< Used by Fly view only for static display - Q_PROPERTY(QmlObjectListModel* directionArrows READ directionArrows CONSTANT) + Q_PROPERTY(QmlObjectListModel* directionArrows READ directionArrows NOTIFY directionArrowsChanged) Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged) Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged) @@ -207,6 +207,7 @@ public: signals: void visualItemsChanged (void); void waypointLinesChanged (void); + void directionArrowsChanged (void); void waypointPathChanged (void); void newItemsFromVehicle (void); void missionDistanceChanged (double missionDistance); -- 2.22.0