From 1d4cb21bb5c58abe791855170b1e7b4cf4ad34f5 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 16 Sep 2017 10:45:08 +0200 Subject: [PATCH] Separate construction/destruction for the source input plugin core and the GUI --- plugins/channelrx/chanalyzer/chanalyzergui.h | 2 +- .../channelrx/chanalyzerng/chanalyzernggui.h | 2 +- plugins/channelrx/demodam/amdemodgui.h | 2 +- plugins/channelrx/demodatv/atvdemodgui.h | 2 +- plugins/channelrx/demodbfm/bfmdemodgui.h | 2 +- plugins/channelrx/demoddsd/dsddemodgui.h | 2 +- plugins/channelrx/demodlora/lorademodgui.h | 2 +- plugins/channelrx/demodnfm/nfmdemodgui.h | 2 +- plugins/channelrx/demodssb/ssbdemodgui.h | 2 +- plugins/channelrx/demodwfm/wfmdemodgui.h | 2 +- plugins/channelrx/tcpsrc/tcpsrcgui.h | 2 +- plugins/channelrx/udpsrc/udpsrcgui.h | 2 +- plugins/channeltx/modam/ammodgui.h | 2 +- plugins/channeltx/modatv/atvmodgui.h | 2 +- plugins/channeltx/modnfm/nfmmodgui.h | 2 +- plugins/channeltx/modssb/ssbmodgui.h | 2 +- plugins/channeltx/modwfm/wfmmodgui.h | 2 +- plugins/channeltx/udpsink/udpsinkgui.h | 2 +- .../bladerfoutput/bladerfoutputgui.h | 2 +- plugins/samplesink/filesink/filesinkgui.h | 2 +- .../samplesink/hackrfoutput/hackrfoutputgui.h | 2 +- .../limesdroutput/limesdroutputgui.h | 2 +- .../sdrdaemonsink/sdrdaemonsinkgui.h | 2 +- plugins/samplesource/airspy/airspygui.cpp | 4 +-- plugins/samplesource/airspy/airspygui.h | 2 +- .../bladerfinput/bladerfinputgui.cpp | 4 +-- .../bladerfinput/bladerfinputgui.h | 2 +- plugins/samplesource/fcdpro/fcdprogui.cpp | 3 +-- plugins/samplesource/fcdpro/fcdprogui.h | 2 +- .../samplesource/fcdproplus/fcdproplusgui.cpp | 3 +-- .../samplesource/fcdproplus/fcdproplusgui.h | 2 +- .../samplesource/filesource/filesourcegui.cpp | 3 +-- .../samplesource/filesource/filesourcegui.h | 2 +- .../hackrfinput/hackrfinputgui.cpp | 4 +-- .../samplesource/hackrfinput/hackrfinputgui.h | 2 +- .../limesdrinput/limesdrinputgui.cpp | 6 ++--- .../limesdrinput/limesdrinputgui.h | 2 +- .../plutosdrinput/plutosdrinputgui.cpp | 3 +-- plugins/samplesource/rtlsdr/rtlsdrgui.cpp | 4 +-- plugins/samplesource/rtlsdr/rtlsdrgui.h | 2 +- .../sdrdaemonsource/sdrdaemonsourcegui.cpp | 4 +-- .../sdrdaemonsource/sdrdaemonsourcegui.h | 2 +- plugins/samplesource/sdrplay/sdrplaygui.cpp | 3 +-- plugins/samplesource/sdrplay/sdrplaygui.h | 2 +- sdrbase/device/devicesourceapi.cpp | 12 +-------- sdrbase/device/devicesourceapi.h | 2 +- sdrbase/mainwindow.cpp | 25 ++++++++++++++++--- sdrbase/plugin/plugininterface.cpp | 19 ++++++++++++++ sdrbase/plugin/plugininterface.h | 7 +++--- 49 files changed, 90 insertions(+), 82 deletions(-) diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.h b/plugins/channelrx/chanalyzer/chanalyzergui.h index ba446bada..9f7975960 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.h +++ b/plugins/channelrx/chanalyzer/chanalyzergui.h @@ -41,7 +41,7 @@ class ChannelAnalyzerGUI : public RollupWidget, public PluginInstanceUI { public: static ChannelAnalyzerGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/chanalyzerng/chanalyzernggui.h b/plugins/channelrx/chanalyzerng/chanalyzernggui.h index 38334f079..7dd0f2ff4 100644 --- a/plugins/channelrx/chanalyzerng/chanalyzernggui.h +++ b/plugins/channelrx/chanalyzerng/chanalyzernggui.h @@ -41,7 +41,7 @@ class ChannelAnalyzerNGGUI : public RollupWidget, public PluginInstanceUI { public: static ChannelAnalyzerNGGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/demodam/amdemodgui.h b/plugins/channelrx/demodam/amdemodgui.h index 2aab49e59..64506cc8c 100644 --- a/plugins/channelrx/demodam/amdemodgui.h +++ b/plugins/channelrx/demodam/amdemodgui.h @@ -22,7 +22,7 @@ class AMDemodGUI : public RollupWidget, public PluginInstanceUI { public: static AMDemodGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/demodatv/atvdemodgui.h b/plugins/channelrx/demodatv/atvdemodgui.h index 2efd83adb..0e270bab2 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.h +++ b/plugins/channelrx/demodatv/atvdemodgui.h @@ -42,7 +42,7 @@ class ATVDemodGUI : public RollupWidget, public PluginInstanceUI public: static ATVDemodGUI* create(PluginAPI* objPluginAPI, DeviceSourceAPI *objDeviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& strName); QString getName() const; diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.h b/plugins/channelrx/demodbfm/bfmdemodgui.h index 4f8cda0b6..525897c66 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.h +++ b/plugins/channelrx/demodbfm/bfmdemodgui.h @@ -42,7 +42,7 @@ class BFMDemodGUI : public RollupWidget, public PluginInstanceUI { public: static BFMDemodGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/demoddsd/dsddemodgui.h b/plugins/channelrx/demoddsd/dsddemodgui.h index 369ef33b3..15786019a 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.h +++ b/plugins/channelrx/demoddsd/dsddemodgui.h @@ -43,7 +43,7 @@ class DSDDemodGUI : public RollupWidget, public PluginInstanceUI { public: static DSDDemodGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/demodlora/lorademodgui.h b/plugins/channelrx/demodlora/lorademodgui.h index 3ba35f351..93e1f5e00 100644 --- a/plugins/channelrx/demodlora/lorademodgui.h +++ b/plugins/channelrx/demodlora/lorademodgui.h @@ -23,7 +23,7 @@ class LoRaDemodGUI : public RollupWidget, public PluginInstanceUI { public: static LoRaDemodGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.h b/plugins/channelrx/demodnfm/nfmdemodgui.h index 64e889364..1c2df82c9 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.h +++ b/plugins/channelrx/demodnfm/nfmdemodgui.h @@ -23,7 +23,7 @@ class NFMDemodGUI : public RollupWidget, public PluginInstanceUI { public: static NFMDemodGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/demodssb/ssbdemodgui.h b/plugins/channelrx/demodssb/ssbdemodgui.h index 51ac1f8e4..cf75266e1 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.h +++ b/plugins/channelrx/demodssb/ssbdemodgui.h @@ -24,7 +24,7 @@ class SSBDemodGUI : public RollupWidget, public PluginInstanceUI { public: static SSBDemodGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.h b/plugins/channelrx/demodwfm/wfmdemodgui.h index f600869bd..9aee10ad0 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.h +++ b/plugins/channelrx/demodwfm/wfmdemodgui.h @@ -22,7 +22,7 @@ class WFMDemodGUI : public RollupWidget, public PluginInstanceUI { public: static WFMDemodGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/tcpsrc/tcpsrcgui.h b/plugins/channelrx/tcpsrc/tcpsrcgui.h index cb6a7512e..ed35c716e 100644 --- a/plugins/channelrx/tcpsrc/tcpsrcgui.h +++ b/plugins/channelrx/tcpsrc/tcpsrcgui.h @@ -25,7 +25,7 @@ class TCPSrcGUI : public RollupWidget, public PluginInstanceUI { public: static TCPSrcGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channelrx/udpsrc/udpsrcgui.h b/plugins/channelrx/udpsrc/udpsrcgui.h index 7b1892691..420191b86 100644 --- a/plugins/channelrx/udpsrc/udpsrcgui.h +++ b/plugins/channelrx/udpsrc/udpsrcgui.h @@ -42,7 +42,7 @@ class UDPSrcGUI : public RollupWidget, public PluginInstanceUI { public: static UDPSrcGUI* create(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channeltx/modam/ammodgui.h b/plugins/channeltx/modam/ammodgui.h index d7f8cbf63..0bbfdb4a1 100644 --- a/plugins/channeltx/modam/ammodgui.h +++ b/plugins/channeltx/modam/ammodgui.h @@ -39,7 +39,7 @@ class AMModGUI : public RollupWidget, public PluginInstanceUI { public: static AMModGUI* create(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channeltx/modatv/atvmodgui.h b/plugins/channeltx/modatv/atvmodgui.h index f37f6a455..84dd439d9 100644 --- a/plugins/channeltx/modatv/atvmodgui.h +++ b/plugins/channeltx/modatv/atvmodgui.h @@ -40,7 +40,7 @@ class ATVModGUI : public RollupWidget, public PluginInstanceUI { public: static ATVModGUI* create(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channeltx/modnfm/nfmmodgui.h b/plugins/channeltx/modnfm/nfmmodgui.h index cdde2ec48..5d1fad4d9 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.h +++ b/plugins/channeltx/modnfm/nfmmodgui.h @@ -40,7 +40,7 @@ class NFMModGUI : public RollupWidget, public PluginInstanceUI { public: static NFMModGUI* create(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channeltx/modssb/ssbmodgui.h b/plugins/channeltx/modssb/ssbmodgui.h index cb377558d..49a81796e 100644 --- a/plugins/channeltx/modssb/ssbmodgui.h +++ b/plugins/channeltx/modssb/ssbmodgui.h @@ -40,7 +40,7 @@ class SSBModGUI : public RollupWidget, public PluginInstanceUI { public: static SSBModGUI* create(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channeltx/modwfm/wfmmodgui.h b/plugins/channeltx/modwfm/wfmmodgui.h index 32cfb2af5..d4d5cda08 100644 --- a/plugins/channeltx/modwfm/wfmmodgui.h +++ b/plugins/channeltx/modwfm/wfmmodgui.h @@ -40,7 +40,7 @@ class WFMModGUI : public RollupWidget, public PluginInstanceUI { public: static WFMModGUI* create(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/channeltx/udpsink/udpsinkgui.h b/plugins/channeltx/udpsink/udpsinkgui.h index de5193203..958ff178d 100644 --- a/plugins/channeltx/udpsink/udpsinkgui.h +++ b/plugins/channeltx/udpsink/udpsinkgui.h @@ -41,7 +41,7 @@ class UDPSinkGUI : public RollupWidget, public PluginInstanceUI { public: static UDPSinkGUI* create(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesink/bladerfoutput/bladerfoutputgui.h b/plugins/samplesink/bladerfoutput/bladerfoutputgui.h index fa64adc04..8947022e7 100644 --- a/plugins/samplesink/bladerfoutput/bladerfoutputgui.h +++ b/plugins/samplesink/bladerfoutput/bladerfoutputgui.h @@ -36,7 +36,7 @@ class BladerfOutputGui : public QWidget, public PluginInstanceUI { public: explicit BladerfOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent = NULL); virtual ~BladerfOutputGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesink/filesink/filesinkgui.h b/plugins/samplesink/filesink/filesinkgui.h index af914e9c7..bed2b354c 100644 --- a/plugins/samplesink/filesink/filesinkgui.h +++ b/plugins/samplesink/filesink/filesinkgui.h @@ -38,7 +38,7 @@ class FileSinkGui : public QWidget, public PluginInstanceUI { public: explicit FileSinkGui(DeviceSinkAPI *deviceAPI, QWidget* parent = NULL); virtual ~FileSinkGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputgui.h b/plugins/samplesink/hackrfoutput/hackrfoutputgui.h index 44e2099ed..ea998569b 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputgui.h +++ b/plugins/samplesink/hackrfoutput/hackrfoutputgui.h @@ -46,7 +46,7 @@ public: explicit HackRFOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent = NULL); virtual ~HackRFOutputGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesink/limesdroutput/limesdroutputgui.h b/plugins/samplesink/limesdroutput/limesdroutputgui.h index 0d46f15b9..6d698a9a0 100644 --- a/plugins/samplesink/limesdroutput/limesdroutputgui.h +++ b/plugins/samplesink/limesdroutput/limesdroutputgui.h @@ -36,7 +36,7 @@ class LimeSDROutputGUI : public QWidget, public PluginInstanceUI { public: explicit LimeSDROutputGUI(DeviceSinkAPI *deviceAPI, QWidget* parent = 0); virtual ~LimeSDROutputGUI(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h index dc2d7e495..15efa5a49 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h @@ -39,7 +39,7 @@ class SDRdaemonSinkGui : public QWidget, public PluginInstanceUI { public: explicit SDRdaemonSinkGui(DeviceSinkAPI *deviceAPI, QWidget* parent = NULL); virtual ~SDRdaemonSinkGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/airspy/airspygui.cpp b/plugins/samplesource/airspy/airspygui.cpp index f1b26c489..705e67926 100644 --- a/plugins/samplesource/airspy/airspygui.cpp +++ b/plugins/samplesource/airspy/airspygui.cpp @@ -38,8 +38,7 @@ AirspyGui::AirspyGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_sampleSource(0), m_lastEngineState((DSPDeviceSourceEngine::State)-1) { - m_sampleSource = new AirspyInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (AirspyInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); @@ -59,7 +58,6 @@ AirspyGui::AirspyGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : AirspyGui::~AirspyGui() { - delete m_sampleSource; // Valgrind memcheck delete ui; } diff --git a/plugins/samplesource/airspy/airspygui.h b/plugins/samplesource/airspy/airspygui.h index 05200c32b..9737f701e 100644 --- a/plugins/samplesource/airspy/airspygui.h +++ b/plugins/samplesource/airspy/airspygui.h @@ -38,7 +38,7 @@ class AirspyGui : public QWidget, public PluginInstanceUI { public: explicit AirspyGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~AirspyGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/bladerfinput/bladerfinputgui.cpp b/plugins/samplesource/bladerfinput/bladerfinputgui.cpp index fd8903f75..b252a20d8 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputgui.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinputgui.cpp @@ -37,8 +37,7 @@ BladerfInputGui::BladerfInputGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_sampleRate(0), m_lastEngineState((DSPDeviceSourceEngine::State)-1) { - m_sampleSource = new BladerfInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (BladerfInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); @@ -65,7 +64,6 @@ BladerfInputGui::BladerfInputGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : BladerfInputGui::~BladerfInputGui() { - delete m_sampleSource; // Valgrind memcheck delete ui; } diff --git a/plugins/samplesource/bladerfinput/bladerfinputgui.h b/plugins/samplesource/bladerfinput/bladerfinputgui.h index 700b506cd..d340895a6 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputgui.h +++ b/plugins/samplesource/bladerfinput/bladerfinputgui.h @@ -35,7 +35,7 @@ class BladerfInputGui : public QWidget, public PluginInstanceUI { public: explicit BladerfInputGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~BladerfInputGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/fcdpro/fcdprogui.cpp b/plugins/samplesource/fcdpro/fcdprogui.cpp index dcb1d3ad7..101857a44 100644 --- a/plugins/samplesource/fcdpro/fcdprogui.cpp +++ b/plugins/samplesource/fcdpro/fcdprogui.cpp @@ -34,8 +34,7 @@ FCDProGui::FCDProGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_sampleSource(NULL), m_lastEngineState((DSPDeviceSourceEngine::State)-1) { - m_sampleSource = new FCDProInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (FCDProInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); diff --git a/plugins/samplesource/fcdpro/fcdprogui.h b/plugins/samplesource/fcdpro/fcdprogui.h index 72839e6cd..3c75cf18a 100644 --- a/plugins/samplesource/fcdpro/fcdprogui.h +++ b/plugins/samplesource/fcdpro/fcdprogui.h @@ -36,7 +36,7 @@ class FCDProGui : public QWidget, public PluginInstanceUI { public: explicit FCDProGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~FCDProGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp index 3d7c9baca..cc1495186 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp @@ -35,8 +35,7 @@ FCDProPlusGui::FCDProPlusGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_sampleSource(NULL), m_lastEngineState((DSPDeviceSourceEngine::State)-1) { - m_sampleSource = new FCDProPlusInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (FCDProPlusInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); diff --git a/plugins/samplesource/fcdproplus/fcdproplusgui.h b/plugins/samplesource/fcdproplus/fcdproplusgui.h index b944aeefb..57c177d80 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusgui.h +++ b/plugins/samplesource/fcdproplus/fcdproplusgui.h @@ -35,7 +35,7 @@ class FCDProPlusGui : public QWidget, public PluginInstanceUI { public: explicit FCDProPlusGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~FCDProPlusGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/filesource/filesourcegui.cpp b/plugins/samplesource/filesource/filesourcegui.cpp index 76d0283ea..1ff550c25 100644 --- a/plugins/samplesource/filesource/filesourcegui.cpp +++ b/plugins/samplesource/filesource/filesourcegui.cpp @@ -66,9 +66,8 @@ FileSourceGui::FileSourceGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : ui->playLoop->setChecked(true); // FIXME: always play in a loop ui->playLoop->setEnabled(false); - m_sampleSource = new FileSourceInput(m_deviceAPI); + m_sampleSource = m_deviceAPI->getSampleSource(); connect(m_sampleSource->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); - m_deviceAPI->setSampleSource(m_sampleSource); connect(m_deviceAPI->getDeviceEngineOutputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleDSPMessages()), Qt::QueuedConnection); } diff --git a/plugins/samplesource/filesource/filesourcegui.h b/plugins/samplesource/filesource/filesourcegui.h index 52cbab908..44220462d 100644 --- a/plugins/samplesource/filesource/filesourcegui.h +++ b/plugins/samplesource/filesource/filesourcegui.h @@ -35,7 +35,7 @@ class FileSourceGui : public QWidget, public PluginInstanceUI { public: explicit FileSourceGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~FileSourceGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp index 679db7b7f..d02988959 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp @@ -40,8 +40,7 @@ HackRFInputGui::HackRFInputGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_sampleSource(NULL), m_lastEngineState((DSPDeviceSourceEngine::State)-1) { - m_sampleSource = new HackRFInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (HackRFInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); @@ -64,7 +63,6 @@ HackRFInputGui::HackRFInputGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : HackRFInputGui::~HackRFInputGui() { - delete m_sampleSource; // Valgrind memcheck delete ui; } diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.h b/plugins/samplesource/hackrfinput/hackrfinputgui.h index 27219e8e6..2e4f9786a 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.h +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.h @@ -45,7 +45,7 @@ public: explicit HackRFInputGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~HackRFInputGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp index 4fbdc4322..f56c7e4a1 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp @@ -40,9 +40,8 @@ LimeSDRInputGUI::LimeSDRInputGUI(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_statusCounter(0), m_deviceStatusCounter(0) { - m_limeSDRInput = new LimeSDRInput(m_deviceAPI); - m_sampleSource = (DeviceSampleSource *) m_limeSDRInput; - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = m_deviceAPI->getSampleSource(); + m_limeSDRInput = (LimeSDRInput*) m_sampleSource; ui->setupUi(this); @@ -81,7 +80,6 @@ LimeSDRInputGUI::LimeSDRInputGUI(DeviceSourceAPI *deviceAPI, QWidget* parent) : LimeSDRInputGUI::~LimeSDRInputGUI() { - delete m_sampleSource; // Valgrind memcheck delete ui; } diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.h b/plugins/samplesource/limesdrinput/limesdrinputgui.h index d60cff49c..92975a79b 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.h +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.h @@ -35,7 +35,7 @@ class LimeSDRInputGUI : public QWidget, public PluginInstanceUI { public: explicit LimeSDRInputGUI(DeviceSourceAPI *deviceAPI, QWidget* parent = 0); virtual ~LimeSDRInputGUI(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp index 0494b3136..4415a5b8c 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp @@ -40,8 +40,7 @@ PlutoSDRInputGui::PlutoSDRInputGui(DeviceSourceAPI *deviceAPI, QWidget* parent) m_doApplySettings(true), m_statusCounter(0) { - m_sampleSource = new PlutoSDRInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (PlutoSDRInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index 714d6da2c..449dd9328 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -36,8 +36,7 @@ RTLSDRGui::RTLSDRGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_sampleSource(0), m_lastEngineState((DSPDeviceSourceEngine::State)-1) { - m_sampleSource = new RTLSDRInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (RTLSDRInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); @@ -61,7 +60,6 @@ RTLSDRGui::RTLSDRGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : RTLSDRGui::~RTLSDRGui() { delete ui; - delete m_sampleSource; } void RTLSDRGui::destroy() diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.h b/plugins/samplesource/rtlsdr/rtlsdrgui.h index 775d0a0af..e63d772ae 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.h +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.h @@ -36,7 +36,7 @@ class RTLSDRGui : public QWidget, public PluginInstanceUI { public: explicit RTLSDRGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~RTLSDRGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp index bc0f66d64..608d4b022 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp @@ -102,9 +102,8 @@ SDRdaemonSourceGui::SDRdaemonSourceGui(DeviceSourceAPI *deviceAPI, QWidget* pare connect(&(deviceAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick())); connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware())); - m_sampleSource = new SDRdaemonSourceInput(m_deviceAPI); + m_sampleSource = (SDRdaemonSourceInput*) m_deviceAPI->getSampleSource(); connect(m_sampleSource->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); - m_deviceAPI->setSampleSource(m_sampleSource); displaySettings(); @@ -121,7 +120,6 @@ SDRdaemonSourceGui::SDRdaemonSourceGui(DeviceSourceAPI *deviceAPI, QWidget* pare SDRdaemonSourceGui::~SDRdaemonSourceGui() { - delete m_sampleSource; delete ui; } diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h index 68f7685e8..923b457db 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h @@ -36,7 +36,7 @@ class SDRdaemonSourceGui : public QWidget, public PluginInstanceUI { public: explicit SDRdaemonSourceGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~SDRdaemonSourceGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/plugins/samplesource/sdrplay/sdrplaygui.cpp b/plugins/samplesource/sdrplay/sdrplaygui.cpp index 52dc7c57f..a144bddfc 100644 --- a/plugins/samplesource/sdrplay/sdrplaygui.cpp +++ b/plugins/samplesource/sdrplay/sdrplaygui.cpp @@ -33,8 +33,7 @@ SDRPlayGui::SDRPlayGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : ui(new Ui::SDRPlayGui), m_deviceAPI(deviceAPI) { - m_sampleSource = new SDRPlayInput(m_deviceAPI); - m_deviceAPI->setSampleSource(m_sampleSource); + m_sampleSource = (SDRPlayInput*) m_deviceAPI->getSampleSource(); ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); diff --git a/plugins/samplesource/sdrplay/sdrplaygui.h b/plugins/samplesource/sdrplay/sdrplaygui.h index 2691f6f12..63453a0b5 100644 --- a/plugins/samplesource/sdrplay/sdrplaygui.h +++ b/plugins/samplesource/sdrplay/sdrplaygui.h @@ -38,7 +38,7 @@ class SDRPlayGui : public QWidget, public PluginInstanceUI { public: explicit SDRPlayGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL); virtual ~SDRPlayGui(); - void destroy(); + virtual void destroy(); void setName(const QString& name); QString getName() const; diff --git a/sdrbase/device/devicesourceapi.cpp b/sdrbase/device/devicesourceapi.cpp index c0508afb5..9c55edb59 100644 --- a/sdrbase/device/devicesourceapi.cpp +++ b/sdrbase/device/devicesourceapi.cpp @@ -212,7 +212,7 @@ void DeviceSourceAPI::renameChannelInstances() } } -void DeviceSourceAPI::freeAll() +void DeviceSourceAPI::freeChannels() { // while(!m_channelInstanceRegistrations.isEmpty()) // { @@ -225,16 +225,6 @@ void DeviceSourceAPI::freeAll() qDebug("DeviceSourceAPI::freeAll: destroying channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelName)); m_channelInstanceRegistrations[i].m_gui->destroy(); } - - - if(m_sampleSourcePluginInstanceUI != 0) - { - qDebug("DeviceSourceAPI::freeAll: destroying m_sampleSourcePluginGUI"); - m_deviceSourceEngine->setSource(0); - m_sampleSourcePluginInstanceUI->destroy(); - m_sampleSourcePluginInstanceUI = 0; - m_sampleSourceId.clear(); - } } void DeviceSourceAPI::loadSourceSettings(const Preset* preset) diff --git a/sdrbase/device/devicesourceapi.h b/sdrbase/device/devicesourceapi.h index 12906665e..9b7d17890 100644 --- a/sdrbase/device/devicesourceapi.h +++ b/sdrbase/device/devicesourceapi.h @@ -87,7 +87,7 @@ public: void registerChannelInstance(const QString& channelName, PluginInstanceUI* pluginGUI); void removeChannelInstance(PluginInstanceUI* pluginGUI); - void freeAll(); + void freeChannels(); void loadSourceSettings(const Preset* preset); void saveSourceSettings(Preset* preset); diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index aa4e44361..893dfc58b 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -140,6 +140,9 @@ MainWindow::MainWindow(QWidget* parent) : exit(0); } + DeviceSampleSource *source = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceInput( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), m_deviceUIs.back()->m_deviceSourceAPI); + m_deviceUIs.back()->m_deviceSourceAPI->setSampleSource(source); QWidget *gui; PluginInstanceUI *pluginGUI = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), &gui, m_deviceUIs.back()->m_deviceSourceAPI); @@ -218,8 +221,11 @@ void MainWindow::addSourceDevice() ui->tabInputsSelect->addTab(m_deviceUIs.back()->m_samplingDeviceControl, tabNameCStr); ui->tabInputsSelect->setTabToolTip(deviceTabIndex, QString(uidCStr)); + // Create a file source instance by default m_pluginManager->selectSampleSourceBySerialOrSequence("sdrangel.samplesource.filesource", "0", 0, m_deviceUIs.back()->m_deviceSourceAPI); - + DeviceSampleSource *source = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceInput( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), m_deviceUIs.back()->m_deviceSourceAPI); + m_deviceUIs.back()->m_deviceSourceAPI->setSampleSource(source); QWidget *gui; PluginInstanceUI *pluginGUI = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), &gui, m_deviceUIs.back()->m_deviceSourceAPI); @@ -290,8 +296,14 @@ void MainWindow::removeLastDevice() ui->tabSpectraGUI->removeTab(ui->tabSpectraGUI->count() - 1); ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1); - m_deviceUIs.back()->m_deviceSourceAPI->freeAll(); - m_deviceUIs.back()->m_deviceSourceAPI->clearBuddiesLists(); // remove old API from buddies lists + // deletes old UI and input object + m_deviceUIs.back()->m_deviceSourceAPI->freeChannels(); // destroys the channel instances + m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI()); + m_deviceUIs.back()->m_deviceSourceAPI->resetSampleSourceId(); + m_deviceUIs.back()->m_deviceSourceAPI->clearBuddiesLists(); // clear old API buddies lists + m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceInput( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()); ui->tabChannels->removeTab(ui->tabChannels->count() - 1); @@ -821,6 +833,7 @@ void MainWindow::on_sampleSource_confirmClicked(bool checked __attribute__((unus deviceUI->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI(deviceUI->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI()); deviceUI->m_deviceSourceAPI->resetSampleSourceId(); deviceUI->m_deviceSourceAPI->clearBuddiesLists(); // clear old API buddies lists + deviceUI->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceInput(deviceUI->m_deviceSourceAPI->getSampleSource()); m_pluginManager->selectSampleSourceByDevice(devicePtr, deviceUI->m_deviceSourceAPI); // sets the new API @@ -859,8 +872,12 @@ void MainWindow::on_sampleSource_confirmClicked(bool checked __attribute__((unus } // constructs new GUI and input object + DeviceSampleSource *source = deviceUI->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceInput( + deviceUI->m_deviceSourceAPI->getSampleSourceId(), deviceUI->m_deviceSourceAPI); + deviceUI->m_deviceSourceAPI->setSampleSource(source); QWidget *gui; - PluginInstanceUI *pluginUI = deviceUI->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI(deviceUI->m_deviceSourceAPI->getSampleSourceId(), &gui, deviceUI->m_deviceSourceAPI); + PluginInstanceUI *pluginUI = deviceUI->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( + deviceUI->m_deviceSourceAPI->getSampleSourceId(), &gui, deviceUI->m_deviceSourceAPI); deviceUI->m_deviceSourceAPI->setSampleSourcePluginInstanceGUI(pluginUI); setDeviceGUI(currentSourceTabIndex, gui, deviceUI->m_deviceSourceAPI->getSampleSourceDisplayName()); diff --git a/sdrbase/plugin/plugininterface.cpp b/sdrbase/plugin/plugininterface.cpp index 1b564ab70..898930630 100644 --- a/sdrbase/plugin/plugininterface.cpp +++ b/sdrbase/plugin/plugininterface.cpp @@ -1 +1,20 @@ +#include "dsp/devicesamplesource.h" #include "plugin/plugininterface.h" +#include "plugininstanceui.h" + + +void PluginInterface::deleteSampleSourcePluginInstanceGUI(PluginInstanceUI *ui) +{ + ui->destroy(); +} + +void PluginInterface::deleteSampleSourcePluginInstanceInput(DeviceSampleSource *source) +{ + source->destroy(); +} + +void PluginInterface::deleteSampleSinkPluginInstanceGUI(PluginInstanceUI *ui) +{ + ui->destroy(); +} + diff --git a/sdrbase/plugin/plugininterface.h b/sdrbase/plugin/plugininterface.h index 37f59eb06..ee5348c2b 100644 --- a/sdrbase/plugin/plugininterface.h +++ b/sdrbase/plugin/plugininterface.h @@ -4,8 +4,6 @@ #include #include -#include "plugininstanceui.h" - struct PluginDescriptor { // general plugin description const QString displayedName; @@ -63,13 +61,14 @@ public: virtual SamplingDevices enumSampleSources() { return SamplingDevices(); } virtual PluginInstanceUI* createSampleSourcePluginInstanceGUI(const QString& sourceId __attribute__((unused)), QWidget **widget __attribute__((unused)), DeviceSourceAPI *deviceAPI __attribute__((unused))) { return 0; } virtual DeviceSampleSource* createSampleSourcePluginInstanceInput(const QString& sourceId __attribute__((unused)), DeviceSourceAPI *deviceAPI __attribute__((unused))) { return 0; } // creates the input "core" - virtual void deleteSampleSourcePluginInstanceGUI(PluginInstanceUI *ui) { ui->destroy(); } + virtual void deleteSampleSourcePluginInstanceGUI(PluginInstanceUI *ui); + virtual void deleteSampleSourcePluginInstanceInput(DeviceSampleSource *source); // device sink plugins only virtual SamplingDevices enumSampleSinks() { return SamplingDevices(); } virtual PluginInstanceUI* createSampleSinkPluginInstanceGUI(const QString& sinkId __attribute__((unused)), QWidget **widget __attribute__((unused)), DeviceSinkAPI *deviceAPI __attribute__((unused))) { return 0; } virtual DeviceSampleSink* createSampleSinkPluginInstanceOutput(const QString& sinkId __attribute__((unused)), DeviceSinkAPI *deviceAPI __attribute__((unused))) { return 0; } // creates the output "core" - virtual void deleteSampleSinkPluginInstanceGUI(PluginInstanceUI *ui) { ui->destroy(); } + virtual void deleteSampleSinkPluginInstanceGUI(PluginInstanceUI *ui); }; Q_DECLARE_INTERFACE(PluginInterface, "SDRangel.PluginInterface/0.1");