From 82b92297b3e18805654d76e5ed34679858e8c738 Mon Sep 17 00:00:00 2001
From: Remek Zajac <remek@airmap.com>
Date: Tue, 5 May 2020 15:25:27 +0200
Subject: [PATCH] introduce gimbal yaw visiblity setting

---
 src/MissionManager/MissionController.cc  |  5 +++--
 src/Settings/PlanView.SettingsGroup.json | 17 +++++++++++++----
 src/Settings/PlanViewSettings.cc         |  1 +
 src/Settings/PlanViewSettings.h          |  1 +
 4 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc
index aeffa6d..61ce47b 100644
--- a/src/MissionManager/MissionController.cc
+++ b/src/MissionManager/MissionController.cc
@@ -1464,6 +1464,7 @@ void MissionController::_recalcMissionFlightStatus()
     bool   foundRTL =                   false;
     bool   vehicleYawSpecificallySet =  false;
     double totalHorizontalDistance =    0;
+    bool   showGimbalOnlyWhenSet =      _planViewSettings->showGimbalWhen()->enumStringValue() == "Set";
 
     for (int i=0; i<_visualItems->count(); i++) {
         VisualMissionItem*  item =          qobject_cast<VisualMissionItem*>(_visualItems->get(i));
@@ -1511,11 +1512,11 @@ void MissionController::_recalcMissionFlightStatus()
 
         // Look for specific gimbal changes
         double gimbalYaw = item->specifiedGimbalYaw();
-        if (!qIsNaN(gimbalYaw)) {
+        if (!qIsNaN(gimbalYaw) || showGimbalOnlyWhenSet) {
             _missionFlightStatus.gimbalYaw = gimbalYaw;
         }
         double gimbalPitch = item->specifiedGimbalPitch();
-        if (!qIsNaN(gimbalPitch)) {
+        if (!qIsNaN(gimbalPitch) || showGimbalOnlyWhenSet) {
             _missionFlightStatus.gimbalPitch = gimbalPitch;
         }
 
diff --git a/src/Settings/PlanView.SettingsGroup.json b/src/Settings/PlanView.SettingsGroup.json
index dcb198b..851438c 100644
--- a/src/Settings/PlanView.SettingsGroup.json
+++ b/src/Settings/PlanView.SettingsGroup.json
@@ -24,9 +24,18 @@
     "defaultValue":     false
 },
 {
-    "name":                 "useConditionGate",
-    "shortDescription":     "Use MAV_CMD_CONDITION_GATE for pattern generation",
-    "type":                 "bool",
-    "defaultValue":         false
+    "name":             "useConditionGate",
+    "shortDescription": "Use MAV_CMD_CONDITION_GATE for pattern generation",
+    "type":             "bool",
+    "defaultValue":     false
+},
+{
+    "name":             "showGimbalWhen",
+    "shortDescription": "Show gimbal yaw visual when yaw known/set",
+    "longDescription":  "Shows the gimbal yaw when the it's explcitly set by the user or simply when known (propagated from previous)",
+    "type":             "uint32",
+    "enumValues":       "0,1",
+    "enumStrings":      "Known,Set",
+    "defaultValue":     0
 }
 ]
diff --git a/src/Settings/PlanViewSettings.cc b/src/Settings/PlanViewSettings.cc
index 9af8227..608cb32 100644
--- a/src/Settings/PlanViewSettings.cc
+++ b/src/Settings/PlanViewSettings.cc
@@ -22,3 +22,4 @@ DECLARE_SETTINGSFACT(PlanViewSettings, aboveTerrainWarning)
 DECLARE_SETTINGSFACT(PlanViewSettings, showMissionItemStatus)
 DECLARE_SETTINGSFACT(PlanViewSettings, useConditionGate)
 DECLARE_SETTINGSFACT(PlanViewSettings, takeoffItemNotRequired)
+DECLARE_SETTINGSFACT(PlanViewSettings, showGimbalWhen)
diff --git a/src/Settings/PlanViewSettings.h b/src/Settings/PlanViewSettings.h
index c9bed13..34bb984 100644
--- a/src/Settings/PlanViewSettings.h
+++ b/src/Settings/PlanViewSettings.h
@@ -25,4 +25,5 @@ public:
     DEFINE_SETTINGFACT(showMissionItemStatus)
     DEFINE_SETTINGFACT(useConditionGate)
     DEFINE_SETTINGFACT(takeoffItemNotRequired)
+    DEFINE_SETTINGFACT(showGimbalWhen)
 };