From 700d17c9cf1b471fde107fb81b0155a9c425c259 Mon Sep 17 00:00:00 2001
From: srcejon <jon@beniston.com>
Date: Thu, 4 Apr 2024 21:41:32 +0100
Subject: [PATCH] Clear paths when closing.

---
 plugins/feature/sid/sidgui.cpp | 25 +++++++++++++++++++++++++
 plugins/feature/sid/sidgui.h   |  3 +++
 2 files changed, 28 insertions(+)

diff --git a/plugins/feature/sid/sidgui.cpp b/plugins/feature/sid/sidgui.cpp
index d8b04f698..a5883dc10 100644
--- a/plugins/feature/sid/sidgui.cpp
+++ b/plugins/feature/sid/sidgui.cpp
@@ -306,6 +306,9 @@ SIDGUI::~SIDGUI()
         disconnect(m_stix, &STIX::dataUpdated, this, &SIDGUI::stixDataUpdated);
     }
     m_statusTimer.stop();
+
+    clearFromMap();
+
     delete m_goesXRay;
     delete ui;
 }
@@ -1962,6 +1965,7 @@ void SIDGUI::on_map_currentTextChanged(const QString& text)
 // Plot paths from transmitters to receivers on map
 void SIDGUI::on_showPaths_clicked()
 {
+    clearFromMap();
 
     for (int i = 0; i < m_settings.m_channelSettings.size(); i++)
     {
@@ -2041,12 +2045,33 @@ void SIDGUI::on_showPaths_clicked()
 
                         MainCore::MsgMapItem *msg = MainCore::MsgMapItem::create(m_sid, swgMapItem);
                         messageQueue->push(msg);
+
+                        m_mapItemNames.append(name);
                     }
                 }
             }
         }
     }
+}
 
+void SIDGUI::clearFromMap()
+{
+    QList<ObjectPipe*> mapPipes;
+    MainCore::instance()->getMessagePipes().getMessagePipes(m_sid, "mapitems", mapPipes);
+
+    for (const auto& name : m_mapItemNames)
+    {
+        for (const auto& pipe : mapPipes)
+        {
+            MessageQueue *messageQueue = qobject_cast<MessageQueue*>(pipe->m_element);
+            SWGSDRangel::SWGMapItem *swgMapItem = new SWGSDRangel::SWGMapItem();
+            swgMapItem->setName(new QString(name));
+            swgMapItem->setImage(new QString(""));
+            swgMapItem->setType(3);
+            MainCore::MsgMapItem *msg = MainCore::MsgMapItem::create(m_sid, swgMapItem);
+            messageQueue->push(msg);
+        }
+    }
 }
 
 void SIDGUI::featuresChanged(const QStringList& renameFrom, const QStringList& renameTo)
diff --git a/plugins/feature/sid/sidgui.h b/plugins/feature/sid/sidgui.h
index 89e025971..7807450d9 100644
--- a/plugins/feature/sid/sidgui.h
+++ b/plugins/feature/sid/sidgui.h
@@ -195,6 +195,8 @@ private:
     AvailableChannelOrFeatureHandler m_availableFeatureHandler;
     AvailableChannelOrFeatureHandler m_availableChannelHandler;
 
+    QStringList m_mapItemNames;
+
     explicit SIDGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *feature, QWidget* parent = nullptr);
     virtual ~SIDGUI();
 
@@ -244,6 +246,7 @@ private:
     void connectDataUpdates();
     void disconnectDataUpdates();
     void getData();
+    void clearFromMap();
 
     static qreal pixelDistance(QChart *chart, QAbstractSeries *series, QPointF a, QPointF b);