From e9a32528d731bf2376c2935632b7c5ecf84c90a4 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 4 Oct 2020 10:30:49 +0200 Subject: [PATCH] Delete Feature in FeatureUISet --- plugins/feature/rigctlserver/rigctlservergui.cpp | 1 - plugins/feature/simpleptt/simplepttgui.cpp | 1 - sdrgui/feature/featureuiset.cpp | 10 +++++++--- sdrgui/feature/featureuiset.h | 5 +++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/plugins/feature/rigctlserver/rigctlservergui.cpp b/plugins/feature/rigctlserver/rigctlservergui.cpp index b7bf9cf3e..d096ffeea 100644 --- a/plugins/feature/rigctlserver/rigctlservergui.cpp +++ b/plugins/feature/rigctlserver/rigctlservergui.cpp @@ -145,7 +145,6 @@ RigCtlServerGUI::RigCtlServerGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISe RigCtlServerGUI::~RigCtlServerGUI() { - delete m_rigCtlServer; // When the GUI closes it has to delete the demodulator because it can be done with (x) delete ui; } diff --git a/plugins/feature/simpleptt/simplepttgui.cpp b/plugins/feature/simpleptt/simplepttgui.cpp index 6048dd26d..349063aa0 100644 --- a/plugins/feature/simpleptt/simplepttgui.cpp +++ b/plugins/feature/simpleptt/simplepttgui.cpp @@ -160,7 +160,6 @@ SimplePTTGUI::SimplePTTGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Fea SimplePTTGUI::~SimplePTTGUI() { - delete m_simplePTT; // When the GUI closes it has to delete the demodulator because it can be done with (x) delete ui; } diff --git a/sdrgui/feature/featureuiset.cpp b/sdrgui/feature/featureuiset.cpp index 7d10d887a..e4ce463e2 100644 --- a/sdrgui/feature/featureuiset.cpp +++ b/sdrgui/feature/featureuiset.cpp @@ -33,6 +33,7 @@ FeatureUISet::FeatureUISet(int tabIndex) FeatureUISet::~FeatureUISet() { + freeFeatures(); delete m_featureWindow; } @@ -48,7 +49,7 @@ void FeatureUISet::registerFeatureInstance(const QString& featureURI, FeatureGUI featureGUI, &FeatureGUI::closing, this, - [=](){ this->handleClosingFeatureGUI(featureGUI); }, + [=](){ this->handleClosingFeatureGUI(featureGUI, feature); }, Qt::QueuedConnection ); } @@ -81,6 +82,7 @@ void FeatureUISet::freeFeatures() { qDebug("FeatureUISet::freeFeatures: destroying feature [%s]", qPrintable(m_featureInstanceRegistrations[i].m_featureURI)); m_featureInstanceRegistrations[i].m_gui->destroy(); + m_featureInstanceRegistrations[i].m_feature->destroy(); } } @@ -92,6 +94,7 @@ void FeatureUISet::deleteFeature(int featureIndex) qPrintable(m_featureInstanceRegistrations[featureIndex].m_featureURI), featureIndex); m_featureInstanceRegistrations[featureIndex].m_gui->destroy(); + m_featureInstanceRegistrations[featureIndex].m_feature->destroy(); } } @@ -128,6 +131,7 @@ void FeatureUISet::loadFeatureSetSettings(const FeatureSetPreset *preset, Plugin { qDebug("FeatureUISet::loadFeatureSetSettings: destroying old feature [%s]", qPrintable(openFeatures[i].m_featureURI)); openFeatures[i].m_gui->destroy(); + openFeatures[i].m_feature->destroy(); } qDebug("FeatureUISet::loadFeatureSetSettings: %d feature(s) in preset", preset->getFeatureCount()); @@ -175,8 +179,8 @@ void FeatureUISet::saveFeatureSetSettings(FeatureSetPreset *preset) } -void FeatureUISet::handleClosingFeatureGUI(FeatureGUI *featureGUI) +void FeatureUISet::handleClosingFeatureGUI(FeatureGUI *featureGUI, Feature *feature) { - qDebug("FeatureUISet::handleClosingFeatureGUI"); removeFeatureInstance(featureGUI); + feature->destroy(); } diff --git a/sdrgui/feature/featureuiset.h b/sdrgui/feature/featureuiset.h index 52c70c085..f4d452ee1 100644 --- a/sdrgui/feature/featureuiset.h +++ b/sdrgui/feature/featureuiset.h @@ -43,7 +43,6 @@ public: int getNumberOfFeatures() const { return m_featureInstanceRegistrations.size(); } void registerFeatureInstance(const QString& featureURI, FeatureGUI* featureGUI, Feature *feature); void removeFeatureInstance(FeatureGUI* featureGUI); - void freeFeatures(); void deleteFeature(int featureIndex); const Feature *getFeatureAt(int featureIndex) const; Feature *getFeatureAt(int featureIndex); @@ -79,8 +78,10 @@ private: FeatureInstanceRegistrations m_featureInstanceRegistrations; int m_featureTabIndex; + void freeFeatures(); + private slots: - void handleClosingFeatureGUI(FeatureGUI *featureGUI); + void handleClosingFeatureGUI(FeatureGUI *featureGUI, Feature *feature); }; #endif // SDRGUI_FEATURE_FEATUREUISET_H_