From 29f975942c3789285e135a1c2f7e4f6f1acb05b9 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 15 Sep 2017 01:30:25 +0200 Subject: [PATCH] PluginManager::selectSampleSourceBySerialOrSequence: store plugin interface in device API --- sdrbase/device/devicesourceapi.cpp | 5 +++++ sdrbase/device/devicesourceapi.h | 4 ++++ sdrbase/mainwindow.cpp | 4 ++-- sdrbase/plugin/pluginmanager.cpp | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/sdrbase/device/devicesourceapi.cpp b/sdrbase/device/devicesourceapi.cpp index 517ccb4b3..41d4279dd 100644 --- a/sdrbase/device/devicesourceapi.cpp +++ b/sdrbase/device/devicesourceapi.cpp @@ -173,6 +173,11 @@ void DeviceSourceAPI::setSampleSourceSequence(int sequence) m_deviceSourceEngine->setSourceSequence(sequence); } +void DeviceSourceAPI::setSampleSourcePluginInterface(PluginInterface *interface) +{ + m_pluginInterface = interface; +} + void DeviceSourceAPI::setSampleSourcePluginInstanceUI(PluginInstanceUI *gui) { if (m_sampleSourcePluginInstanceUI != 0) diff --git a/sdrbase/device/devicesourceapi.h b/sdrbase/device/devicesourceapi.h index 7c39e38f3..15387ad19 100644 --- a/sdrbase/device/devicesourceapi.h +++ b/sdrbase/device/devicesourceapi.h @@ -36,6 +36,7 @@ class ChannelMarker; class QWidget; class PluginInstanceUI; class PluginAPI; +class PluginInterface; class Preset; class DeviceSinkAPI; @@ -72,12 +73,14 @@ public: void setSampleSourceSerial(const QString& serial); void setSampleSourceDisplayName(const QString& serial); void setSampleSourceSequence(int sequence); + void setSampleSourcePluginInterface(PluginInterface *interface); void setSampleSourcePluginInstanceUI(PluginInstanceUI *gui); const QString& getHardwareId() const { return m_hardwareId; } const QString& getSampleSourceId() const { return m_sampleSourceId; } const QString& getSampleSourceSerial() const { return m_sampleSourceSerial; } const QString& getSampleSourceDisplayName() const { return m_sampleSourceDisplayName; } + PluginInterface *getPluginInterface() { return m_pluginInterface; } uint32_t getSampleSourceSequence() const { return m_sampleSourceSequence; } void registerChannelInstance(const QString& channelName, PluginInstanceUI* pluginGUI); @@ -148,6 +151,7 @@ protected: QString m_sampleSourceSerial; QString m_sampleSourceDisplayName; uint32_t m_sampleSourceSequence; + PluginInterface* m_pluginInterface; PluginInstanceUI* m_sampleSourcePluginInstanceUI; ChannelInstanceRegistrations m_channelInstanceRegistrations; diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index 617373d77..ca55331c1 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -212,10 +212,10 @@ void MainWindow::addSourceDevice() ui->tabInputsSelect->addTab(m_deviceUIs.back()->m_samplingDeviceControl, tabNameCStr); ui->tabInputsSelect->setTabToolTip(deviceTabIndex, QString(uidCStr)); - int deviceIndex = m_pluginManager->selectSampleSourceBySerialOrSequence("sdrangel.samplesource.filesource", "0", 0, m_deviceUIs.back()->m_deviceSourceAPI); + m_pluginManager->selectSampleSourceBySerialOrSequence("sdrangel.samplesource.filesource", "0", 0, m_deviceUIs.back()->m_deviceSourceAPI); QWidget *gui; - PluginInstanceUI *pluginGUI = m_pluginManager->getPluginInterfaceAt(deviceIndex)->createSampleSourcePluginInstanceGUI( + PluginInstanceUI *pluginGUI = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceGUI( m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), &gui, m_deviceUIs.back()->m_deviceSourceAPI); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourcePluginInstanceUI(pluginGUI); m_deviceUIs.back()->m_deviceSourceAPI->setInputGUI(gui, m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceDisplayName()); diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index f1d21bd35..2fd0f358b 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -509,6 +509,7 @@ int PluginManager::selectSampleSourceBySerialOrSequence(const QString& sourceId, deviceAPI->setSampleSourceId(m_sampleSourceDevices[index].m_deviceId); deviceAPI->setSampleSourceSerial(m_sampleSourceDevices[index].m_deviceSerial); deviceAPI->setSampleSourceDisplayName(m_sampleSourceDevices[index].m_displayName); + deviceAPI->setSampleSourcePluginInterface(m_sampleSourceDevices[index].m_plugin); return index; }