From bfe6d6099896a9559ea7ee5df00b1489a58e947c Mon Sep 17 00:00:00 2001
From: DonLakeFlyer <don@thegagnes.com>
Date: Sat, 19 Aug 2017 13:04:42 -0700
Subject: [PATCH] Fix flight speed signaling to update further mission items

---
 src/MissionManager/CameraSection.cc       |  1 +
 src/MissionManager/CameraSection.h        |  1 +
 src/MissionManager/MissionSettingsItem.cc |  2 +-
 src/MissionManager/SimpleMissionItem.cc   |  8 +++-----
 src/MissionManager/SpeedSection.cc        | 19 +++++++++++++++++--
 src/MissionManager/SpeedSection.h         | 10 ++++++++--
 6 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/src/MissionManager/CameraSection.cc b/src/MissionManager/CameraSection.cc
index 4ff082d5e2..12b3875693 100644
--- a/src/MissionManager/CameraSection.cc
+++ b/src/MissionManager/CameraSection.cc
@@ -67,6 +67,7 @@ CameraSection::CameraSection(Vehicle* vehicle, QObject* parent)
     connect(this,                               &CameraSection::specifyGimbalChanged,       this, &CameraSection::_setDirty);
     connect(this,                               &CameraSection::specifyCameraModeChanged,   this, &CameraSection::_setDirty);
 
+    connect(this,                               &CameraSection::specifyGimbalChanged,       this, &CameraSection::_updateSpecifiedGimbalYaw);
     connect(&_gimbalYawFact,                    &Fact::valueChanged,                        this, &CameraSection::_updateSpecifiedGimbalYaw);
 }
 
diff --git a/src/MissionManager/CameraSection.h b/src/MissionManager/CameraSection.h
index e0538473a9..daedda5e33 100644
--- a/src/MissionManager/CameraSection.h
+++ b/src/MissionManager/CameraSection.h
@@ -63,6 +63,7 @@ public:
     void setSpecifyGimbal       (bool specifyGimbal);
     void setSpecifyCameraMode   (bool specifyCameraMode);
 
+    ///< Signals specifiedGimbalYawChanged
     ///< @return The gimbal yaw specified by this item, NaN if not specified
     double specifiedGimbalYaw(void) const;
 
diff --git a/src/MissionManager/MissionSettingsItem.cc b/src/MissionManager/MissionSettingsItem.cc
index a19412bd8f..982d440096 100644
--- a/src/MissionManager/MissionSettingsItem.cc
+++ b/src/MissionManager/MissionSettingsItem.cc
@@ -61,8 +61,8 @@ MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent)
     connect(&_cameraSection,    &CameraSection::dirtyChanged,   this, &MissionSettingsItem::_sectionDirtyChanged);
     connect(&_speedSection,     &SpeedSection::dirtyChanged,    this, &MissionSettingsItem::_sectionDirtyChanged);
 
-    connect(&_cameraSection,    &CameraSection::specifyGimbalChanged,       this, &MissionSettingsItem::specifiedGimbalYawChanged);
     connect(&_cameraSection,    &CameraSection::specifiedGimbalYawChanged,  this, &MissionSettingsItem::specifiedGimbalYawChanged);
+    connect(&_speedSection,     &SpeedSection::specifiedFlightSpeedChanged, this, &MissionSettingsItem::specifiedFlightSpeedChanged);
 }
 
 
diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc
index d747a4e8bc..9a672559c2 100644
--- a/src/MissionManager/SimpleMissionItem.cc
+++ b/src/MissionManager/SimpleMissionItem.cc
@@ -755,13 +755,11 @@ void SimpleMissionItem::_updateOptionalSections(void)
     connect(_cameraSection, &CameraSection::dirtyChanged,               this, &SimpleMissionItem::_sectionDirtyChanged);
     connect(_cameraSection, &CameraSection::itemCountChanged,           this, &SimpleMissionItem::_updateLastSequenceNumber);
     connect(_cameraSection, &CameraSection::availableChanged,           this, &SimpleMissionItem::specifiedGimbalYawChanged);
-    connect(_cameraSection, &CameraSection::specifyGimbalChanged,       this, &SimpleMissionItem::specifiedGimbalYawChanged);
     connect(_cameraSection, &CameraSection::specifiedGimbalYawChanged,  this, &SimpleMissionItem::specifiedGimbalYawChanged);
 
-    connect(_speedSection,                  &SpeedSection::dirtyChanged,                this, &SimpleMissionItem::_sectionDirtyChanged);
-    connect(_speedSection,                  &SpeedSection::itemCountChanged,            this, &SimpleMissionItem::_updateLastSequenceNumber);
-    connect(_speedSection,                  &SpeedSection::specifyFlightSpeedChanged,   this, &SimpleMissionItem::specifiedFlightSpeedChanged);
-    connect(_speedSection->flightSpeed(),   &Fact::rawValueChanged,                     this, &SimpleMissionItem::specifiedFlightSpeedChanged);
+    connect(_speedSection,  &SpeedSection::dirtyChanged,                this, &SimpleMissionItem::_sectionDirtyChanged);
+    connect(_speedSection,  &SpeedSection::itemCountChanged,            this, &SimpleMissionItem::_updateLastSequenceNumber);
+    connect(_speedSection,  &SpeedSection::specifiedFlightSpeedChanged, this, &SimpleMissionItem::specifiedFlightSpeedChanged);
 
     emit cameraSectionChanged(_cameraSection);
     emit speedSectionChanged(_speedSection);
diff --git a/src/MissionManager/SpeedSection.cc b/src/MissionManager/SpeedSection.cc
index 7979690ebb..6f465a3dca 100644
--- a/src/MissionManager/SpeedSection.cc
+++ b/src/MissionManager/SpeedSection.cc
@@ -38,8 +38,11 @@ SpeedSection::SpeedSection(Vehicle* vehicle, QObject* parent)
     _flightSpeedFact.setMetaData(_metaDataMap[_flightSpeedName]);
     _flightSpeedFact.setRawValue(flightSpeed);
 
-    connect(this,               &SpeedSection::specifyFlightSpeedChanged,  this, &SpeedSection::settingsSpecifiedChanged);
-    connect(&_flightSpeedFact,  &Fact::valueChanged,                       this, &SpeedSection::_setDirty);
+    connect(this,               &SpeedSection::specifyFlightSpeedChanged,   this, &SpeedSection::settingsSpecifiedChanged);
+    connect(&_flightSpeedFact,  &Fact::valueChanged,                        this, &SpeedSection::_setDirty);
+
+    connect(this,               &SpeedSection::specifyFlightSpeedChanged,   this, &SpeedSection::_updateSpecifiedFlightSpeed);
+    connect(&_flightSpeedFact,  &Fact::valueChanged,                        this, &SpeedSection::_updateSpecifiedFlightSpeed);
 }
 
 bool SpeedSection::settingsSpecified(void) const
@@ -134,3 +137,15 @@ bool SpeedSection::scanForSection(QmlObjectListModel* visualItems, int scanIndex
 
     return false;
 }
+
+
+double SpeedSection::specifiedFlightSpeed(void) const
+{
+    return _specifyFlightSpeed ? _flightSpeedFact.rawValue().toDouble() : std::numeric_limits<double>::quiet_NaN();
+}
+
+void SpeedSection::_updateSpecifiedFlightSpeed(void)
+{
+    emit specifiedFlightSpeedChanged(specifiedFlightSpeed());
+}
+
diff --git a/src/MissionManager/SpeedSection.h b/src/MissionManager/SpeedSection.h
index 83069d5c7d..1b37b8f9f2 100644
--- a/src/MissionManager/SpeedSection.h
+++ b/src/MissionManager/SpeedSection.h
@@ -27,6 +27,10 @@ public:
     Fact*   flightSpeed             (void) { return &_flightSpeedFact; }
     void    setSpecifyFlightSpeed   (bool specifyFlightSpeed);
 
+    ///< Signals specifiedFlightSpeedChanged
+    ///< @return The flight speed specified by this item, NaN if not specified
+    double specifiedFlightSpeed(void) const;
+
     // Overrides from Section
     bool available          (void) const override { return _available; }
     bool dirty              (void) const override { return _dirty; }
@@ -38,10 +42,12 @@ public:
     bool settingsSpecified  (void) const override;
 
 signals:
-    void specifyFlightSpeedChanged(bool specifyFlightSpeed);
+    void specifyFlightSpeedChanged      (bool specifyFlightSpeed);
+    void specifiedFlightSpeedChanged    (double flightSpeed);
 
 private slots:
-    void _setDirty(void);
+    void _setDirty                  (void);
+    void _updateSpecifiedFlightSpeed(void);
 
 private:
     bool    _available;
-- 
GitLab