From c3b9c268ee2f63a364bdc6ef10856cd917d1afd7 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 30 Oct 2017 02:15:59 +0100 Subject: [PATCH] Better fix previous source plugin GUI delete by doing it explicitly in the main window --- sdrgui/device/devicesourceapi.cpp | 4 ---- sdrgui/mainwindow.cpp | 9 +++++++++ sdrgui/plugin/plugininterface.cpp | 8 ++++---- sdrgui/plugin/pluginmanager.cpp | 2 -- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/sdrgui/device/devicesourceapi.cpp b/sdrgui/device/devicesourceapi.cpp index 89f0e503c..5c9601193 100644 --- a/sdrgui/device/devicesourceapi.cpp +++ b/sdrgui/device/devicesourceapi.cpp @@ -176,10 +176,6 @@ void DeviceSourceAPI::setSampleSourcePluginInterface(PluginInterface *iface) void DeviceSourceAPI::setSampleSourcePluginInstanceGUI(PluginInstanceGUI *gui) { - if (m_sampleSourcePluginInstanceUI && (gui != m_sampleSourcePluginInstanceUI)) { - m_sampleSourcePluginInstanceUI->destroy(); - } - m_sampleSourcePluginInstanceUI = gui; } diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 4345e1770..710a14ea7 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -147,6 +147,10 @@ MainWindow::MainWindow(QWidget* parent) : exit(0); } + // delete previous plugin GUI + m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI()); + 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); @@ -233,6 +237,11 @@ void MainWindow::addSourceDevice() // Create a file source instance by default m_pluginManager->selectSampleSourceBySerialOrSequence("sdrangel.samplesource.filesource", "0", 0, m_deviceUIs.back()->m_deviceSourceAPI); + + // delete previous plugin GUI + m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI()); + 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); diff --git a/sdrgui/plugin/plugininterface.cpp b/sdrgui/plugin/plugininterface.cpp index 7db1c63ed..458379fd6 100644 --- a/sdrgui/plugin/plugininterface.cpp +++ b/sdrgui/plugin/plugininterface.cpp @@ -6,20 +6,20 @@ void PluginInterface::deleteSampleSourcePluginInstanceGUI(PluginInstanceGUI *ui) { - ui->destroy(); + if (ui) { ui->destroy(); } } void PluginInterface::deleteSampleSourcePluginInstanceInput(DeviceSampleSource *source) { - source->destroy(); + if (source) { source->destroy(); } } void PluginInterface::deleteSampleSinkPluginInstanceGUI(PluginInstanceGUI *ui) { - ui->destroy(); + if (ui) { ui->destroy(); } } void PluginInterface::deleteSampleSinkPluginInstanceOutput(DeviceSampleSink *sink) { - sink->destroy(); + if (sink) { sink->destroy(); } } diff --git a/sdrgui/plugin/pluginmanager.cpp b/sdrgui/plugin/pluginmanager.cpp index 4efe26d58..b3ef7ec25 100644 --- a/sdrgui/plugin/pluginmanager.cpp +++ b/sdrgui/plugin/pluginmanager.cpp @@ -355,7 +355,6 @@ int PluginManager::selectSampleSourceByIndex(int index, DeviceSourceAPI *deviceA << " seq: " << m_sampleSourceDevices[index].m_deviceSequence; deviceAPI->stopAcquisition(); - deviceAPI->setSampleSourcePluginInstanceGUI(0); // this effectively destroys the previous GUI if it exists deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_deviceSequence); deviceAPI->setHardwareId(m_sampleSourceDevices[index].m_hadrwareId); @@ -427,7 +426,6 @@ int PluginManager::selectSampleSourceBySerialOrSequence(const QString& sourceId, << " seq: " << m_sampleSourceDevices[index].m_deviceSequence; deviceAPI->stopAcquisition(); - deviceAPI->setSampleSourcePluginInstanceGUI(0); // this effectively destroys the previous GUI if it exists // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_deviceSequence);