From 103301f19adbd7cc0d0be1aa74a4280649cf13df Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 16 Apr 2022 16:45:53 +0200 Subject: [PATCH] Massive UI revamping (v7): Implemented channel move to another device and more --- doc/img/exit_round.xcf | Bin 0 -> 36228 bytes .../beamsteeringcwmod/beamsteeringcwmod.cpp | 12 ++ .../beamsteeringcwmod/beamsteeringcwmod.h | 4 +- .../beamsteeringcwmod/beamsteeringcwmodgui.h | 1 + .../interferometer/interferometer.cpp | 12 ++ .../interferometer/interferometer.h | 2 + .../interferometer/interferometergui.h | 1 + plugins/channelrx/chanalyzer/chanalyzer.cpp | 12 ++ plugins/channelrx/chanalyzer/chanalyzer.h | 2 + plugins/channelrx/chanalyzer/chanalyzergui.h | 1 + plugins/channelrx/demodadsb/adsbdemod.cpp | 12 ++ plugins/channelrx/demodadsb/adsbdemod.h | 2 + plugins/channelrx/demodadsb/adsbdemodgui.h | 1 + plugins/channelrx/demodais/aisdemod.cpp | 12 ++ plugins/channelrx/demodais/aisdemod.h | 2 + plugins/channelrx/demodais/aisdemodgui.h | 1 + plugins/channelrx/demodam/amdemod.cpp | 12 ++ plugins/channelrx/demodam/amdemod.h | 2 + plugins/channelrx/demodam/amdemodgui.h | 1 + plugins/channelrx/demodapt/aptdemod.cpp | 12 ++ plugins/channelrx/demodapt/aptdemod.h | 2 + plugins/channelrx/demodapt/aptdemodgui.h | 1 + plugins/channelrx/demodatv/atvdemod.cpp | 12 ++ plugins/channelrx/demodatv/atvdemod.h | 2 + plugins/channelrx/demodatv/atvdemodgui.h | 1 + plugins/channelrx/demodbfm/bfmdemod.cpp | 12 ++ plugins/channelrx/demodbfm/bfmdemod.h | 2 + plugins/channelrx/demodbfm/bfmdemodgui.h | 1 + .../demodchirpchat/chirpchatdemod.cpp | 12 ++ .../channelrx/demodchirpchat/chirpchatdemod.h | 2 + .../demodchirpchat/chirpchatdemodgui.h | 1 + plugins/channelrx/demoddab/dabdemod.cpp | 12 ++ plugins/channelrx/demoddab/dabdemod.h | 2 + plugins/channelrx/demoddab/dabdemodgui.h | 1 + plugins/channelrx/demoddatv/datvdemod.cpp | 12 ++ plugins/channelrx/demoddatv/datvdemod.h | 4 +- plugins/channelrx/demoddatv/datvdemodgui.cpp | 74 ++++---- plugins/channelrx/demoddatv/datvdemodgui.h | 3 +- plugins/channelrx/demoddsd/dsddemod.cpp | 12 ++ plugins/channelrx/demoddsd/dsddemod.h | 2 + plugins/channelrx/demoddsd/dsddemodgui.h | 1 + plugins/channelrx/demodfreedv/freedvdemod.cpp | 12 ++ plugins/channelrx/demodfreedv/freedvdemod.h | 2 + .../channelrx/demodfreedv/freedvdemodgui.h | 1 + .../channelrx/demodfreedv/freedvdemodgui.ui | 52 ++++-- plugins/channelrx/demodnfm/nfmdemod.cpp | 12 ++ plugins/channelrx/demodnfm/nfmdemod.h | 2 + plugins/channelrx/demodnfm/nfmdemodgui.h | 1 + plugins/channelrx/demodpacket/packetdemod.cpp | 12 ++ plugins/channelrx/demodpacket/packetdemod.h | 2 + .../channelrx/demodpacket/packetdemodgui.h | 1 + plugins/channelrx/demodpager/pagerdemod.cpp | 12 ++ plugins/channelrx/demodpager/pagerdemod.h | 2 + plugins/channelrx/demodpager/pagerdemodgui.h | 1 + .../demodradiosonde/radiosondedemod.cpp | 12 ++ .../demodradiosonde/radiosondedemod.h | 2 + .../demodradiosonde/radiosondedemodgui.h | 1 + plugins/channelrx/demodssb/ssbdemod.cpp | 12 ++ plugins/channelrx/demodssb/ssbdemod.h | 2 + plugins/channelrx/demodssb/ssbdemodgui.h | 1 + plugins/channelrx/demodssb/ssbdemodgui.ui | 33 ++-- plugins/channelrx/demodvor/vordemod.cpp | 12 ++ plugins/channelrx/demodvor/vordemod.h | 2 + plugins/channelrx/demodvor/vordemodgui.h | 1 + plugins/channelrx/demodvorsc/vordemodsc.cpp | 12 ++ plugins/channelrx/demodvorsc/vordemodsc.h | 2 + plugins/channelrx/demodvorsc/vordemodscgui.h | 1 + plugins/channelrx/demodwfm/wfmdemod.cpp | 12 ++ plugins/channelrx/demodwfm/wfmdemod.h | 2 + plugins/channelrx/demodwfm/wfmdemodgui.h | 1 + plugins/channelrx/filesink/filesink.cpp | 12 ++ plugins/channelrx/filesink/filesink.h | 2 + plugins/channelrx/filesink/filesinkgui.h | 1 + plugins/channelrx/freqtracker/freqtracker.cpp | 12 ++ plugins/channelrx/freqtracker/freqtracker.h | 2 + .../channelrx/freqtracker/freqtrackergui.h | 1 + plugins/channelrx/localsink/localsink.cpp | 12 ++ plugins/channelrx/localsink/localsink.h | 2 + plugins/channelrx/localsink/localsinkgui.h | 1 + plugins/channelrx/noisefigure/noisefigure.cpp | 12 ++ plugins/channelrx/noisefigure/noisefigure.h | 2 + .../channelrx/noisefigure/noisefiguregui.h | 1 + .../radioastronomy/radioastronomy.cpp | 12 ++ .../channelrx/radioastronomy/radioastronomy.h | 2 + .../radioastronomy/radioastronomygui.h | 1 + plugins/channelrx/radioclock/radioclock.cpp | 12 ++ plugins/channelrx/radioclock/radioclock.h | 2 + plugins/channelrx/radioclock/radioclockgui.h | 1 + plugins/channelrx/remotesink/remotesink.cpp | 12 ++ plugins/channelrx/remotesink/remotesink.h | 2 + plugins/channelrx/remotesink/remotesinkgui.h | 1 + .../channelrx/sigmffilesink/sigmffilesink.cpp | 12 ++ .../channelrx/sigmffilesink/sigmffilesink.h | 2 + .../sigmffilesink/sigmffilesinkgui.h | 1 + plugins/channelrx/udpsink/udpsink.cpp | 12 ++ plugins/channelrx/udpsink/udpsink.h | 2 + plugins/channelrx/udpsink/udpsinkgui.h | 1 + plugins/channeltx/filesource/filesource.cpp | 12 ++ plugins/channeltx/filesource/filesource.h | 2 + plugins/channeltx/filesource/filesourcegui.h | 1 + plugins/channeltx/localsource/localsource.cpp | 12 ++ plugins/channeltx/localsource/localsource.h | 2 + .../channeltx/localsource/localsourcegui.h | 1 + .../mod802.15.4/ieee_802_15_4_mod.cpp | 12 ++ .../channeltx/mod802.15.4/ieee_802_15_4_mod.h | 2 + .../mod802.15.4/ieee_802_15_4_modgui.h | 1 + .../mod802.15.4/ieee_802_15_4_modgui.ui | 72 +++++--- plugins/channeltx/modais/aismod.cpp | 12 ++ plugins/channeltx/modais/aismod.h | 2 + plugins/channeltx/modais/aismodgui.h | 1 + plugins/channeltx/modam/ammod.cpp | 12 ++ plugins/channeltx/modam/ammod.h | 2 + plugins/channeltx/modam/ammodgui.h | 1 + plugins/channeltx/modam/ammodgui.ui | 44 +++-- plugins/channeltx/modatv/atvmod.cpp | 12 ++ plugins/channeltx/modatv/atvmod.h | 2 + plugins/channeltx/modatv/atvmodgui.h | 1 + .../channeltx/modchirpchat/chirpchatmod.cpp | 12 ++ plugins/channeltx/modchirpchat/chirpchatmod.h | 2 + .../channeltx/modchirpchat/chirpchatmodgui.h | 1 + plugins/channeltx/moddatv/datvmod.cpp | 12 ++ plugins/channeltx/moddatv/datvmod.h | 2 + plugins/channeltx/moddatv/datvmodgui.h | 1 + plugins/channeltx/modfreedv/freedvmod.cpp | 12 ++ plugins/channeltx/modfreedv/freedvmod.h | 2 + plugins/channeltx/modfreedv/freedvmodgui.h | 1 + plugins/channeltx/modnfm/nfmmod.cpp | 12 ++ plugins/channeltx/modnfm/nfmmod.h | 2 + plugins/channeltx/modnfm/nfmmodgui.h | 1 + plugins/channeltx/modnfm/nfmmodgui.ui | 16 +- plugins/channeltx/modpacket/packetmod.cpp | 12 ++ plugins/channeltx/modpacket/packetmod.h | 2 + plugins/channeltx/modpacket/packetmodgui.h | 1 + plugins/channeltx/modssb/ssbmod.cpp | 12 ++ plugins/channeltx/modssb/ssbmod.h | 2 + plugins/channeltx/modssb/ssbmodgui.h | 1 + plugins/channeltx/modssb/ssbmodgui.ui | 56 +++--- plugins/channeltx/modwfm/wfmmod.cpp | 12 ++ plugins/channeltx/modwfm/wfmmod.h | 2 + plugins/channeltx/modwfm/wfmmodgui.h | 1 + .../channeltx/remotesource/remotesource.cpp | 12 ++ plugins/channeltx/remotesource/remotesource.h | 3 +- .../channeltx/remotesource/remotesourcegui.h | 1 + plugins/channeltx/udpsource/udpsource.cpp | 12 ++ plugins/channeltx/udpsource/udpsource.h | 2 + plugins/channeltx/udpsource/udpsourcegui.h | 1 + plugins/channeltx/udpsource/udpsourcegui.ui | 78 +++++++-- plugins/samplesink/testsink/testsinkgui.ui | 35 +++- sdrbase/channel/channelapi.cpp | 1 - sdrbase/channel/channelapi.h | 5 +- sdrgui/CMakeLists.txt | 2 + sdrgui/channel/channelgui.cpp | 22 ++- sdrgui/channel/channelgui.h | 5 + sdrgui/device/deviceuiset.cpp | 37 ++++ sdrgui/device/deviceuiset.h | 6 +- sdrgui/gui/devicesetselectiondialog.cpp | 65 +++++++ sdrgui/gui/devicesetselectiondialog.h | 73 ++++++++ sdrgui/mainwindow.cpp | 165 ++++++++++++------ sdrgui/mainwindow.h | 4 +- sdrgui/resources/exit_round.png | Bin 0 -> 8704 bytes sdrgui/resources/res.qrc | 1 + 161 files changed, 1312 insertions(+), 231 deletions(-) create mode 100644 doc/img/exit_round.xcf create mode 100644 sdrgui/gui/devicesetselectiondialog.cpp create mode 100644 sdrgui/gui/devicesetselectiondialog.h create mode 100644 sdrgui/resources/exit_round.png diff --git a/doc/img/exit_round.xcf b/doc/img/exit_round.xcf new file mode 100644 index 0000000000000000000000000000000000000000..46ddba6e9e4d8b68aa49fa0735600feee10bde17 GIT binary patch literal 36228 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 SH>_c(^T$7a2SdJv@&5p|9y|&F literal 0 HcmV?d00001 diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp index cd21f50b5..97b7e8074 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp @@ -80,6 +80,18 @@ BeamSteeringCWMod::~BeamSteeringCWMod() delete m_thread; } +void BeamSteeringCWMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeMIMOChannel(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addMIMOChannel(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void BeamSteeringCWMod::startSources() { qDebug("BeamSteeringCWMod::startSources"); diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h index 04f56beeb..0d50058a3 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h @@ -88,8 +88,10 @@ public: BeamSteeringCWMod(DeviceAPI *deviceAPI); virtual ~BeamSteeringCWMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } - virtual void startSinks() {} + virtual void startSinks() {} virtual void stopSinks() {} virtual void startSources(); //!< thread start() virtual void stopSources(); //!< thread exit() and wait() diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h index 4c88cdd67..093b9f245 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } private: Ui::BeamSteeringCWModGUI* ui; diff --git a/plugins/channelmimo/interferometer/interferometer.cpp b/plugins/channelmimo/interferometer/interferometer.cpp index 17e06f543..47afd801d 100644 --- a/plugins/channelmimo/interferometer/interferometer.cpp +++ b/plugins/channelmimo/interferometer/interferometer.cpp @@ -82,6 +82,18 @@ Interferometer::~Interferometer() delete m_thread; } +void Interferometer::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeMIMOChannel(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addMIMOChannel(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void Interferometer::startSinks() { if (m_deviceSampleRate != 0) { diff --git a/plugins/channelmimo/interferometer/interferometer.h b/plugins/channelmimo/interferometer/interferometer.h index 9cb6b8118..403569e76 100644 --- a/plugins/channelmimo/interferometer/interferometer.h +++ b/plugins/channelmimo/interferometer/interferometer.h @@ -88,6 +88,8 @@ public: Interferometer(DeviceAPI *deviceAPI); virtual ~Interferometer(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void startSinks(); //!< thread start() virtual void stopSinks(); //!< thread exit() and wait() diff --git a/plugins/channelmimo/interferometer/interferometergui.h b/plugins/channelmimo/interferometer/interferometergui.h index 2d8ac1670..47919d1e0 100644 --- a/plugins/channelmimo/interferometer/interferometergui.h +++ b/plugins/channelmimo/interferometer/interferometergui.h @@ -55,6 +55,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } private: Ui::InterferometerGUI* ui; diff --git a/plugins/channelrx/chanalyzer/chanalyzer.cpp b/plugins/channelrx/chanalyzer/chanalyzer.cpp index d009a329b..9a00de8aa 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzer.cpp @@ -92,6 +92,18 @@ ChannelAnalyzer::~ChannelAnalyzer() qDebug("ChannelAnalyzer::~ChannelAnalyzer: done"); } +void ChannelAnalyzer::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + int ChannelAnalyzer::getChannelSampleRate() { DeviceSampleSource *source = m_deviceAPI->getSampleSource(); diff --git a/plugins/channelrx/chanalyzer/chanalyzer.h b/plugins/channelrx/chanalyzer/chanalyzer.h index 5cc6b5542..7bbb36f98 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.h +++ b/plugins/channelrx/chanalyzer/chanalyzer.h @@ -64,6 +64,8 @@ public: ChannelAnalyzer(DeviceAPI *deviceAPI); virtual ~ChannelAnalyzer(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } ScopeVis *getScopeVis() { return &m_scopeVis; } void setScopeVis(ScopeVis *scopeVis) { m_basebandSink->setScopeVis(scopeVis); } diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.h b/plugins/channelrx/chanalyzer/chanalyzergui.h index bfd8016ed..c44a9f8a9 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.h +++ b/plugins/channelrx/chanalyzer/chanalyzergui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodadsb/adsbdemod.cpp b/plugins/channelrx/demodadsb/adsbdemod.cpp index 6bf711ab5..2764ff2e3 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.cpp +++ b/plugins/channelrx/demodadsb/adsbdemod.cpp @@ -109,6 +109,18 @@ ADSBDemod::~ADSBDemod() delete m_thread; } +void ADSBDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t ADSBDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodadsb/adsbdemod.h b/plugins/channelrx/demodadsb/adsbdemod.h index db4a80797..69214119f 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.h +++ b/plugins/channelrx/demodadsb/adsbdemod.h @@ -65,6 +65,8 @@ public: ADSBDemod(DeviceAPI *deviceAPI); virtual ~ADSBDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.h b/plugins/channelrx/demodadsb/adsbdemodgui.h index d3d1fa96b..95553329f 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.h +++ b/plugins/channelrx/demodadsb/adsbdemodgui.h @@ -760,6 +760,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } void highlightAircraft(Aircraft *aircraft); void targetAircraft(Aircraft *aircraft); diff --git a/plugins/channelrx/demodais/aisdemod.cpp b/plugins/channelrx/demodais/aisdemod.cpp index 9079b2b93..67904a891 100644 --- a/plugins/channelrx/demodais/aisdemod.cpp +++ b/plugins/channelrx/demodais/aisdemod.cpp @@ -97,6 +97,18 @@ AISDemod::~AISDemod() delete m_basebandSink; } +void AISDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t AISDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodais/aisdemod.h b/plugins/channelrx/demodais/aisdemod.h index 713f05229..7e8d3017b 100644 --- a/plugins/channelrx/demodais/aisdemod.h +++ b/plugins/channelrx/demodais/aisdemod.h @@ -93,6 +93,8 @@ public: AISDemod(DeviceAPI *deviceAPI); virtual ~AISDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodais/aisdemodgui.h b/plugins/channelrx/demodais/aisdemodgui.h index a77d95f25..5856f1852 100644 --- a/plugins/channelrx/demodais/aisdemodgui.h +++ b/plugins/channelrx/demodais/aisdemodgui.h @@ -65,6 +65,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodam/amdemod.cpp b/plugins/channelrx/demodam/amdemod.cpp index b420cf5b5..325aad209 100644 --- a/plugins/channelrx/demodam/amdemod.cpp +++ b/plugins/channelrx/demodam/amdemod.cpp @@ -113,6 +113,18 @@ AMDemod::~AMDemod() delete m_basebandSink; } +void AMDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t AMDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index 145f36748..156684802 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -64,6 +64,8 @@ public: AMDemod(DeviceAPI *deviceAPI); virtual ~AMDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodam/amdemodgui.h b/plugins/channelrx/demodam/amdemodgui.h index 7e838efc0..7d2440134 100644 --- a/plugins/channelrx/demodam/amdemodgui.h +++ b/plugins/channelrx/demodam/amdemodgui.h @@ -39,6 +39,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodapt/aptdemod.cpp b/plugins/channelrx/demodapt/aptdemod.cpp index 96b01b626..54b1a8f8f 100644 --- a/plugins/channelrx/demodapt/aptdemod.cpp +++ b/plugins/channelrx/demodapt/aptdemod.cpp @@ -115,6 +115,18 @@ APTDemod::~APTDemod() delete m_basebandSink; } +void APTDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t APTDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodapt/aptdemod.h b/plugins/channelrx/demodapt/aptdemod.h index 303ade6da..65ef1ac13 100644 --- a/plugins/channelrx/demodapt/aptdemod.h +++ b/plugins/channelrx/demodapt/aptdemod.h @@ -188,6 +188,8 @@ public: APTDemod(DeviceAPI *deviceAPI); virtual ~APTDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodapt/aptdemodgui.h b/plugins/channelrx/demodapt/aptdemodgui.h index ecd76ef13..1cb07b223 100644 --- a/plugins/channelrx/demodapt/aptdemodgui.h +++ b/plugins/channelrx/demodapt/aptdemodgui.h @@ -83,6 +83,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index 7770a6348..0eeb224db 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -75,6 +75,18 @@ ATVDemod::~ATVDemod() delete m_basebandSink; } +void ATVDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void ATVDemod::start() { qDebug("ATVDemod::start"); diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index e8e246c0c..f70342a17 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -63,6 +63,8 @@ public: ATVDemod(DeviceAPI *deviceAPI); virtual ~ATVDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodatv/atvdemodgui.h b/plugins/channelrx/demodatv/atvdemodgui.h index e66415e89..123bf011e 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.h +++ b/plugins/channelrx/demodatv/atvdemodgui.h @@ -58,6 +58,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodbfm/bfmdemod.cpp b/plugins/channelrx/demodbfm/bfmdemod.cpp index 2afb6de93..97617df1d 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.cpp +++ b/plugins/channelrx/demodbfm/bfmdemod.cpp @@ -96,6 +96,18 @@ BFMDemod::~BFMDemod() delete m_thread; } +void BFMDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t BFMDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodbfm/bfmdemod.h b/plugins/channelrx/demodbfm/bfmdemod.h index 0d6b654af..49bbe0ac9 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.h +++ b/plugins/channelrx/demodbfm/bfmdemod.h @@ -70,6 +70,8 @@ public: BFMDemod(DeviceAPI *deviceAPI); virtual ~BFMDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } void setBasebandMessageQueueToGUI(MessageQueue *messageQueue) { m_basebandSink->setMessageQueueToGUI(messageQueue); } diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.h b/plugins/channelrx/demodbfm/bfmdemodgui.h index 79892b3a8..e89dabe31 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.h +++ b/plugins/channelrx/demodbfm/bfmdemodgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp b/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp index 17d261310..a0f2b0ef8 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp +++ b/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp @@ -97,6 +97,18 @@ ChirpChatDemod::~ChirpChatDemod() delete m_thread; } +void ChirpChatDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t ChirpChatDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemod.h b/plugins/channelrx/demodchirpchat/chirpchatdemod.h index 618782e9d..d9dec0a35 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemod.h +++ b/plugins/channelrx/demodchirpchat/chirpchatdemod.h @@ -202,6 +202,8 @@ public: ChirpChatDemod(DeviceAPI* deviceAPI); virtual ~ChirpChatDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } using BasebandSampleSink::feed; diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h index ea5a547cc..123c613d8 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h +++ b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h @@ -54,6 +54,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } private slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demoddab/dabdemod.cpp b/plugins/channelrx/demoddab/dabdemod.cpp index e42c47928..7319bc582 100644 --- a/plugins/channelrx/demoddab/dabdemod.cpp +++ b/plugins/channelrx/demoddab/dabdemod.cpp @@ -108,6 +108,18 @@ DABDemod::~DABDemod() delete m_basebandSink; } +void DABDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t DABDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demoddab/dabdemod.h b/plugins/channelrx/demoddab/dabdemod.h index a2423a7b9..a177a3872 100644 --- a/plugins/channelrx/demoddab/dabdemod.h +++ b/plugins/channelrx/demoddab/dabdemod.h @@ -313,6 +313,8 @@ public: DABDemod(DeviceAPI *deviceAPI); virtual ~DABDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demoddab/dabdemodgui.h b/plugins/channelrx/demoddab/dabdemodgui.h index 2ce282c2c..9ed800f16 100644 --- a/plugins/channelrx/demoddab/dabdemodgui.h +++ b/plugins/channelrx/demoddab/dabdemodgui.h @@ -61,6 +61,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demoddatv/datvdemod.cpp b/plugins/channelrx/demoddatv/datvdemod.cpp index 988508501..e50a04956 100644 --- a/plugins/channelrx/demoddatv/datvdemod.cpp +++ b/plugins/channelrx/demoddatv/datvdemod.cpp @@ -88,6 +88,18 @@ DATVDemod::~DATVDemod() m_basebandSink->deleteLater(); } +void DATVDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void DATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool firstOfBurst) { (void) firstOfBurst; diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index 78befcd87..bd90cf38b 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -43,8 +43,10 @@ public: DATVDemod(DeviceAPI *); virtual ~DATVDemod(); - virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } + virtual void getIdentifier(QString& id) { id = objectName(); } virtual QString getIdentifier() const { return objectName(); } virtual void getTitle(QString& title) { title = objectName(); } diff --git a/plugins/channelrx/demoddatv/datvdemodgui.cpp b/plugins/channelrx/demoddatv/datvdemodgui.cpp index 83ffed036..73515445c 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.cpp +++ b/plugins/channelrx/demoddatv/datvdemodgui.cpp @@ -97,7 +97,7 @@ bool DATVDemodGUI::handleMessage(const Message& message) { DATVDemod::MsgConfigureDATVDemod& cfg = (DATVDemod::MsgConfigureDATVDemod&) message; m_settings = cfg.getSettings(); - m_objChannelMarker.updateSettings(static_cast(m_settings.m_channelMarker)); + m_channelMarker.updateSettings(static_cast(m_settings.m_channelMarker)); displaySettings(); return true; } @@ -132,14 +132,14 @@ void DATVDemodGUI::handleInputMessages() void DATVDemodGUI::channelMarkerChangedByCursor() { - ui->deltaFrequency->setValue(m_objChannelMarker.getCenterFrequency()); - m_settings.m_centerFrequency = m_objChannelMarker.getCenterFrequency(); + ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); + m_settings.m_centerFrequency = m_channelMarker.getCenterFrequency(); applySettings(); } void DATVDemodGUI::channelMarkerHighlightedByCursor() { - getRollupContents()->setHighlighted(m_objChannelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } @@ -156,7 +156,7 @@ void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) { if (m_contextMenuType == ContextMenuChannelSettings) { - BasicChannelSettingsDialog dialog(&m_objChannelMarker, this); + BasicChannelSettingsDialog dialog(&m_channelMarker, this); dialog.setUseReverseAPI(m_settings.m_useReverseAPI); dialog.setReverseAPIAddress(m_settings.m_reverseAPIAddress); dialog.setReverseAPIPort(m_settings.m_reverseAPIPort); @@ -165,8 +165,8 @@ void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) dialog.move(p); dialog.exec(); - m_settings.m_rgbColor = m_objChannelMarker.getColor().rgb(); - m_settings.m_title = m_objChannelMarker.getTitle(); + m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); + m_settings.m_title = m_channelMarker.getTitle(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); m_settings.m_reverseAPIAddress = dialog.getReverseAPIAddress(); m_settings.m_reverseAPIPort = dialog.getReverseAPIPort(); @@ -174,7 +174,7 @@ void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); - setTitle(m_objChannelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -188,8 +188,8 @@ void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) dialog.exec(); m_settings.m_streamIndex = dialog.getSelectedStreamIndex(); - m_objChannelMarker.clearStreamIndexes(); - m_objChannelMarker.addStreamIndex(m_settings.m_streamIndex); + m_channelMarker.clearStreamIndexes(); + m_channelMarker.addStreamIndex(m_settings.m_streamIndex); displayStreamIndex(); applySettings(); } @@ -202,7 +202,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba ui(new Ui::DATVDemodGUI), m_objPluginAPI(objPluginAPI), m_deviceUISet(deviceUISet), - m_objChannelMarker(this), + m_channelMarker(this), m_deviceCenterFrequency(0), m_basebandSampleRate(1), m_blnBasicSettingsShown(false), @@ -241,7 +241,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba connect(m_datvDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); } - m_settings.setChannelMarker(&m_objChannelMarker); + m_settings.setChannelMarker(&m_channelMarker); m_settings.setRollupState(&m_rollupState); connect(ui->screenTV_2, &DATVideoRender::onMetaDataChanged, this, &DATVDemodGUI::on_StreamMetaDataChanged); @@ -264,18 +264,18 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba ui->rfBandwidth->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); ui->rfBandwidth->setValueRange(true, 8, 0, 50000000); - m_objChannelMarker.blockSignals(true); - m_objChannelMarker.setColor(Qt::magenta); - m_objChannelMarker.setBandwidth(6000000); - m_objChannelMarker.setCenterFrequency(0); - m_objChannelMarker.setTitle("DATV Demodulator"); - m_objChannelMarker.blockSignals(false); - m_objChannelMarker.setVisible(true); + m_channelMarker.blockSignals(true); + m_channelMarker.setColor(Qt::magenta); + m_channelMarker.setBandwidth(6000000); + m_channelMarker.setCenterFrequency(0); + m_channelMarker.setTitle("DATV Demodulator"); + m_channelMarker.blockSignals(false); + m_channelMarker.setVisible(true); - connect(&m_objChannelMarker, SIGNAL(changedByCursor()), this, SLOT(channelMarkerChangedByCursor())); - connect(&m_objChannelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor())); + connect(&m_channelMarker, SIGNAL(changedByCursor()), this, SLOT(channelMarkerChangedByCursor())); + connect(&m_channelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor())); - m_deviceUISet->addChannelMarker(&m_objChannelMarker); + m_deviceUISet->addChannelMarker(&m_channelMarker); // QPixmap pixmapTarget = QPixmap(":/film.png"); // pixmapTarget = pixmapTarget.scaled(16, 16, Qt::KeepAspectRatio, Qt::SmoothTransformation); @@ -312,18 +312,18 @@ void DATVDemodGUI::blockApplySettings(bool blnBlock) void DATVDemodGUI::displaySettings() { - m_objChannelMarker.blockSignals(true); - m_objChannelMarker.setCenterFrequency(m_settings.m_centerFrequency); - m_objChannelMarker.setColor(m_settings.m_rgbColor); - m_objChannelMarker.setTitle(m_settings.m_title); - m_objChannelMarker.blockSignals(false); - m_objChannelMarker.setBandwidth(m_settings.m_rfBandwidth); + m_channelMarker.blockSignals(true); + m_channelMarker.setCenterFrequency(m_settings.m_centerFrequency); + m_channelMarker.setColor(m_settings.m_rgbColor); + m_channelMarker.setTitle(m_settings.m_title); + m_channelMarker.blockSignals(false); + m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); blockApplySettings(true); setTitleColor(m_settings.m_rgbColor); - setWindowTitle(m_objChannelMarker.getTitle()); - setTitle(m_objChannelMarker.getTitle()); + setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); ui->deltaFrequency->setValue(m_settings.m_centerFrequency); ui->chkAllowDrift->setChecked(m_settings.m_allowDrift); @@ -475,7 +475,7 @@ void DATVDemodGUI::applySettings(bool force) { qDebug("DATVDemodGUI::applySettings"); - setTitleColor(m_objChannelMarker.getColor()); + setTitleColor(m_channelMarker.getColor()); QString msg = tr("DATVDemodGUI::applySettings: force: %1").arg(force ? "true" : "false"); m_settings.debug(msg); @@ -488,14 +488,14 @@ void DATVDemodGUI::applySettings(bool force) void DATVDemodGUI::leaveEvent(QEvent*) { blockApplySettings(true); - m_objChannelMarker.setHighlighted(false); + m_channelMarker.setHighlighted(false); blockApplySettings(false); } void DATVDemodGUI::enterEvent(QEvent*) { blockApplySettings(true); - m_objChannelMarker.setHighlighted(true); + m_channelMarker.setHighlighted(true); blockApplySettings(false); } @@ -790,16 +790,16 @@ void DATVDemodGUI::on_StreamDataAvailable(int intBytes, int intPercent, qint64 i void DATVDemodGUI::on_deltaFrequency_changed(qint64 value) { - m_objChannelMarker.setCenterFrequency(value); - m_settings.m_centerFrequency = m_objChannelMarker.getCenterFrequency(); + m_channelMarker.setCenterFrequency(value); + m_settings.m_centerFrequency = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); applySettings(); } void DATVDemodGUI::on_rfBandwidth_changed(qint64 value) { - m_objChannelMarker.setBandwidth(value); - m_settings.m_rfBandwidth = m_objChannelMarker.getBandwidth(); + m_channelMarker.setBandwidth(value); + m_settings.m_rfBandwidth = m_channelMarker.getBandwidth(); applySettings(); } diff --git a/plugins/channelrx/demoddatv/datvdemodgui.h b/plugins/channelrx/demoddatv/datvdemodgui.h index a3028f206..1b2511983 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.h +++ b/plugins/channelrx/demoddatv/datvdemodgui.h @@ -58,6 +58,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } @@ -109,7 +110,7 @@ private: PluginAPI* m_objPluginAPI; DeviceUISet* m_deviceUISet; - ChannelMarker m_objChannelMarker; + ChannelMarker m_channelMarker; RollupState m_rollupState; DATVDemod* m_datvDemod; MessageQueue m_inputMessageQueue; diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp index 051c6fc66..6ea650bdd 100644 --- a/plugins/channelrx/demoddsd/dsddemod.cpp +++ b/plugins/channelrx/demoddsd/dsddemod.cpp @@ -98,6 +98,18 @@ DSDDemod::~DSDDemod() delete m_thread; } +void DSDDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t DSDDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demoddsd/dsddemod.h b/plugins/channelrx/demoddsd/dsddemod.h index e402cad24..620138826 100644 --- a/plugins/channelrx/demoddsd/dsddemod.h +++ b/plugins/channelrx/demoddsd/dsddemod.h @@ -65,6 +65,8 @@ public: DSDDemod(DeviceAPI *deviceAPI); virtual ~DSDDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demoddsd/dsddemodgui.h b/plugins/channelrx/demoddsd/dsddemodgui.h index 55453875f..618a853fc 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.h +++ b/plugins/channelrx/demoddsd/dsddemodgui.h @@ -60,6 +60,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodfreedv/freedvdemod.cpp b/plugins/channelrx/demodfreedv/freedvdemod.cpp index b5ff705e5..dfa55ed6d 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemod.cpp @@ -89,6 +89,18 @@ FreeDVDemod::~FreeDVDemod() delete m_thread; } +void FreeDVDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t FreeDVDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodfreedv/freedvdemod.h b/plugins/channelrx/demodfreedv/freedvdemod.h index 8404998d8..078a840c8 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.h +++ b/plugins/channelrx/demodfreedv/freedvdemod.h @@ -77,6 +77,8 @@ public: FreeDVDemod(DeviceAPI *deviceAPI); virtual ~FreeDVDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } using BasebandSampleSink::feed; diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.h b/plugins/channelrx/demodfreedv/freedvdemodgui.h index c68bfaa15..4edb7d8fd 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.h +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.h @@ -58,6 +58,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.ui b/plugins/channelrx/demodfreedv/freedvdemodgui.ui index 4c1ab1c80..a9f8f818c 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.ui +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.ui @@ -6,12 +6,12 @@ 0 0 - 442 - 523 + 412 + 478 - + 0 0 @@ -36,7 +36,7 @@ 0 0 - 441 + 410 171 @@ -661,12 +661,24 @@ - 10 + 0 170 - 218 + 410 284 + + + 0 + 0 + + + + + 410 + 0 + + Channel Spectrum @@ -688,6 +700,12 @@ + + + 0 + 0 + + 200 @@ -715,12 +733,23 @@
gui/rollupcontents.h
1 + + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
LevelMeterSignalDB QWidget
gui/levelmeter.h
1
+ + ValueDialZ + QWidget +
gui/valuedialz.h
+ 1 +
GLSpectrum QWidget @@ -733,17 +762,6 @@
gui/glspectrumgui.h
1
- - ValueDialZ - QWidget -
gui/valuedialz.h
- 1 -
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
LevelMeterVU QWidget diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index 1239c0e36..b532c7fe7 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -102,6 +102,18 @@ NFMDemod::~NFMDemod() delete m_thread; } +void NFMDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t NFMDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index 6581b053f..546df2274 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -64,6 +64,8 @@ public: NFMDemod(DeviceAPI *deviceAPI); virtual ~NFMDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.h b/plugins/channelrx/demodnfm/nfmdemodgui.h index 6ae22810b..e1681c039 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.h +++ b/plugins/channelrx/demodnfm/nfmdemodgui.h @@ -38,6 +38,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodpacket/packetdemod.cpp b/plugins/channelrx/demodpacket/packetdemod.cpp index 94886d91f..c7dfd2038 100644 --- a/plugins/channelrx/demodpacket/packetdemod.cpp +++ b/plugins/channelrx/demodpacket/packetdemod.cpp @@ -99,6 +99,18 @@ PacketDemod::~PacketDemod() delete m_basebandSink; } +void PacketDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t PacketDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodpacket/packetdemod.h b/plugins/channelrx/demodpacket/packetdemod.h index 861ece372..296f1503a 100644 --- a/plugins/channelrx/demodpacket/packetdemod.h +++ b/plugins/channelrx/demodpacket/packetdemod.h @@ -67,6 +67,8 @@ public: PacketDemod(DeviceAPI *deviceAPI); virtual ~PacketDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodpacket/packetdemodgui.h b/plugins/channelrx/demodpacket/packetdemodgui.h index e7ed265ed..80f860986 100644 --- a/plugins/channelrx/demodpacket/packetdemodgui.h +++ b/plugins/channelrx/demodpacket/packetdemodgui.h @@ -66,6 +66,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodpager/pagerdemod.cpp b/plugins/channelrx/demodpager/pagerdemod.cpp index 8f7552375..eaa12a793 100644 --- a/plugins/channelrx/demodpager/pagerdemod.cpp +++ b/plugins/channelrx/demodpager/pagerdemod.cpp @@ -92,6 +92,18 @@ PagerDemod::~PagerDemod() delete m_basebandSink; } +void PagerDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t PagerDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodpager/pagerdemod.h b/plugins/channelrx/demodpager/pagerdemod.h index 3561bf0a4..a283cc5d0 100644 --- a/plugins/channelrx/demodpager/pagerdemod.h +++ b/plugins/channelrx/demodpager/pagerdemod.h @@ -122,6 +122,8 @@ public: PagerDemod(DeviceAPI *deviceAPI); virtual ~PagerDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodpager/pagerdemodgui.h b/plugins/channelrx/demodpager/pagerdemodgui.h index 5e9c3b718..b4b3b82e4 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.h +++ b/plugins/channelrx/demodpager/pagerdemodgui.h @@ -60,6 +60,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodradiosonde/radiosondedemod.cpp b/plugins/channelrx/demodradiosonde/radiosondedemod.cpp index 6964c3d2b..86944c1ea 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemod.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemod.cpp @@ -96,6 +96,18 @@ RadiosondeDemod::~RadiosondeDemod() delete m_basebandSink; } +void RadiosondeDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t RadiosondeDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodradiosonde/radiosondedemod.h b/plugins/channelrx/demodradiosonde/radiosondedemod.h index 5703eac62..c103794aa 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemod.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemod.h @@ -102,6 +102,8 @@ public: RadiosondeDemod(DeviceAPI *deviceAPI); virtual ~RadiosondeDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodgui.h b/plugins/channelrx/demodradiosonde/radiosondedemodgui.h index 0f64739b0..1958c2503 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodgui.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemodgui.h @@ -61,6 +61,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodssb/ssbdemod.cpp b/plugins/channelrx/demodssb/ssbdemod.cpp index a3ebb7910..3cd877eb0 100644 --- a/plugins/channelrx/demodssb/ssbdemod.cpp +++ b/plugins/channelrx/demodssb/ssbdemod.cpp @@ -96,6 +96,18 @@ SSBDemod::~SSBDemod() delete m_thread; } +void SSBDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t SSBDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index 3345cbb05..119dc700d 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -66,6 +66,8 @@ public: SSBDemod(DeviceAPI *deviceAPI); virtual ~SSBDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } using BasebandSampleSink::feed; diff --git a/plugins/channelrx/demodssb/ssbdemodgui.h b/plugins/channelrx/demodssb/ssbdemodgui.h index f5da7c3ed..3134732f5 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.h +++ b/plugins/channelrx/demodssb/ssbdemodgui.h @@ -41,6 +41,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodssb/ssbdemodgui.ui b/plugins/channelrx/demodssb/ssbdemodgui.ui index 1bc6325e8..6896c617b 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.ui +++ b/plugins/channelrx/demodssb/ssbdemodgui.ui @@ -969,17 +969,25 @@
- + + + + 0 + 0 + + + + + 0 + 30 + + +
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
RollupContents QWidget @@ -987,10 +995,9 @@ 1 - ValueDialZ - QWidget -
gui/valuedialz.h
- 1 + ButtonSwitch + QToolButton +
gui/buttonswitch.h
LevelMeterSignalDB @@ -998,6 +1005,12 @@
gui/levelmeter.h
1
+ + ValueDialZ + QWidget +
gui/valuedialz.h
+ 1 +
GLSpectrum QWidget diff --git a/plugins/channelrx/demodvor/vordemod.cpp b/plugins/channelrx/demodvor/vordemod.cpp index efb88b475..f09204d93 100644 --- a/plugins/channelrx/demodvor/vordemod.cpp +++ b/plugins/channelrx/demodvor/vordemod.cpp @@ -96,6 +96,18 @@ VORDemod::~VORDemod() delete m_basebandSink; } +void VORDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t VORDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodvor/vordemod.h b/plugins/channelrx/demodvor/vordemod.h index 8ffd638da..ef16083d6 100644 --- a/plugins/channelrx/demodvor/vordemod.h +++ b/plugins/channelrx/demodvor/vordemod.h @@ -65,6 +65,8 @@ public: VORDemod(DeviceAPI *deviceAPI); virtual ~VORDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodvor/vordemodgui.h b/plugins/channelrx/demodvor/vordemodgui.h index 875cfdf9c..f368a7b54 100644 --- a/plugins/channelrx/demodvor/vordemodgui.h +++ b/plugins/channelrx/demodvor/vordemodgui.h @@ -219,6 +219,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } void selectVOR(VORGUI *vorGUI, bool selected); diff --git a/plugins/channelrx/demodvorsc/vordemodsc.cpp b/plugins/channelrx/demodvorsc/vordemodsc.cpp index d4d3ea223..fb30218d9 100644 --- a/plugins/channelrx/demodvorsc/vordemodsc.cpp +++ b/plugins/channelrx/demodvorsc/vordemodsc.cpp @@ -98,6 +98,18 @@ VORDemodSC::~VORDemodSC() delete m_basebandSink; } +void VORDemodSC::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t VORDemodSC::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodvorsc/vordemodsc.h b/plugins/channelrx/demodvorsc/vordemodsc.h index 5bca0a6df..3741eb873 100644 --- a/plugins/channelrx/demodvorsc/vordemodsc.h +++ b/plugins/channelrx/demodvorsc/vordemodsc.h @@ -65,6 +65,8 @@ public: VORDemodSC(DeviceAPI *deviceAPI); virtual ~VORDemodSC(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodvorsc/vordemodscgui.h b/plugins/channelrx/demodvorsc/vordemodscgui.h index a1534a077..557a2775d 100644 --- a/plugins/channelrx/demodvorsc/vordemodscgui.h +++ b/plugins/channelrx/demodvorsc/vordemodscgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/demodwfm/wfmdemod.cpp b/plugins/channelrx/demodwfm/wfmdemod.cpp index dfda76957..aab213164 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.cpp +++ b/plugins/channelrx/demodwfm/wfmdemod.cpp @@ -99,6 +99,18 @@ WFMDemod::~WFMDemod() delete m_thread; } +void WFMDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t WFMDemod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index beef2586b..9002f6932 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -63,6 +63,8 @@ public: WFMDemod(DeviceAPI *deviceAPI); virtual ~WFMDemod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.h b/plugins/channelrx/demodwfm/wfmdemodgui.h index 3c83d13d8..772b4d6f0 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.h +++ b/plugins/channelrx/demodwfm/wfmdemodgui.h @@ -36,6 +36,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/filesink/filesink.cpp b/plugins/channelrx/filesink/filesink.cpp index f9491275b..96b492628 100644 --- a/plugins/channelrx/filesink/filesink.cpp +++ b/plugins/channelrx/filesink/filesink.cpp @@ -101,6 +101,18 @@ FileSink::~FileSink() delete m_basebandSink; } +void FileSink::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void FileSink::setMessageQueueToGUI(MessageQueue* queue) { ChannelAPI::setMessageQueueToGUI(queue); diff --git a/plugins/channelrx/filesink/filesink.h b/plugins/channelrx/filesink/filesink.h index 679d2a04a..a2b97d9a7 100644 --- a/plugins/channelrx/filesink/filesink.h +++ b/plugins/channelrx/filesink/filesink.h @@ -84,6 +84,8 @@ public: FileSink(DeviceAPI *deviceAPI); virtual ~FileSink(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/filesink/filesinkgui.h b/plugins/channelrx/filesink/filesinkgui.h index 10a8da955..d16d37e0f 100644 --- a/plugins/channelrx/filesink/filesinkgui.h +++ b/plugins/channelrx/filesink/filesinkgui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/freqtracker/freqtracker.cpp b/plugins/channelrx/freqtracker/freqtracker.cpp index 934e9f146..dfc6b753f 100644 --- a/plugins/channelrx/freqtracker/freqtracker.cpp +++ b/plugins/channelrx/freqtracker/freqtracker.cpp @@ -101,6 +101,18 @@ FreqTracker::~FreqTracker() delete m_thread; } +void FreqTracker::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t FreqTracker::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/freqtracker/freqtracker.h b/plugins/channelrx/freqtracker/freqtracker.h index e77c60dd5..628cd76cb 100644 --- a/plugins/channelrx/freqtracker/freqtracker.h +++ b/plugins/channelrx/freqtracker/freqtracker.h @@ -63,6 +63,8 @@ public: FreqTracker(DeviceAPI *deviceAPI); virtual ~FreqTracker(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/freqtracker/freqtrackergui.h b/plugins/channelrx/freqtracker/freqtrackergui.h index eb3cac976..702b61c25 100644 --- a/plugins/channelrx/freqtracker/freqtrackergui.h +++ b/plugins/channelrx/freqtracker/freqtrackergui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/localsink/localsink.cpp b/plugins/channelrx/localsink/localsink.cpp index abfd2f096..758f9e1fa 100644 --- a/plugins/channelrx/localsink/localsink.cpp +++ b/plugins/channelrx/localsink/localsink.cpp @@ -93,6 +93,18 @@ LocalSink::~LocalSink() delete m_thread; } +void LocalSink::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t LocalSink::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/localsink/localsink.h b/plugins/channelrx/localsink/localsink.h index 9dce4752a..d25a2972a 100644 --- a/plugins/channelrx/localsink/localsink.h +++ b/plugins/channelrx/localsink/localsink.h @@ -64,6 +64,8 @@ public: LocalSink(DeviceAPI *deviceAPI); virtual ~LocalSink(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/localsink/localsinkgui.h b/plugins/channelrx/localsink/localsinkgui.h index a0f8c2b1c..55a7344cd 100644 --- a/plugins/channelrx/localsink/localsinkgui.h +++ b/plugins/channelrx/localsink/localsinkgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } private: Ui::LocalSinkGUI* ui; diff --git a/plugins/channelrx/noisefigure/noisefigure.cpp b/plugins/channelrx/noisefigure/noisefigure.cpp index 0953a028c..ff5f3160d 100644 --- a/plugins/channelrx/noisefigure/noisefigure.cpp +++ b/plugins/channelrx/noisefigure/noisefigure.cpp @@ -110,6 +110,18 @@ NoiseFigure::~NoiseFigure() delete m_basebandSink; } +void NoiseFigure::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t NoiseFigure::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/noisefigure/noisefigure.h b/plugins/channelrx/noisefigure/noisefigure.h index 65cbb3c41..f64437436 100644 --- a/plugins/channelrx/noisefigure/noisefigure.h +++ b/plugins/channelrx/noisefigure/noisefigure.h @@ -172,6 +172,8 @@ public: NoiseFigure(DeviceAPI *deviceAPI); virtual ~NoiseFigure(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/noisefigure/noisefiguregui.h b/plugins/channelrx/noisefigure/noisefiguregui.h index c04a7e12e..249697592 100644 --- a/plugins/channelrx/noisefigure/noisefiguregui.h +++ b/plugins/channelrx/noisefigure/noisefiguregui.h @@ -63,6 +63,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/radioastronomy/radioastronomy.cpp b/plugins/channelrx/radioastronomy/radioastronomy.cpp index cf06ca0dd..98c8bf794 100644 --- a/plugins/channelrx/radioastronomy/radioastronomy.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomy.cpp @@ -154,6 +154,18 @@ RadioAstronomy::~RadioAstronomy() delete m_worker; } +void RadioAstronomy::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t RadioAstronomy::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/radioastronomy/radioastronomy.h b/plugins/channelrx/radioastronomy/radioastronomy.h index 59b3a1420..aac4fc559 100644 --- a/plugins/channelrx/radioastronomy/radioastronomy.h +++ b/plugins/channelrx/radioastronomy/radioastronomy.h @@ -346,6 +346,8 @@ public: RadioAstronomy(DeviceAPI *deviceAPI); virtual ~RadioAstronomy(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.h b/plugins/channelrx/radioastronomy/radioastronomygui.h index d82e265d4..2ae11b487 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.h +++ b/plugins/channelrx/radioastronomy/radioastronomygui.h @@ -206,6 +206,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/radioclock/radioclock.cpp b/plugins/channelrx/radioclock/radioclock.cpp index 14b9437ef..bf0859890 100644 --- a/plugins/channelrx/radioclock/radioclock.cpp +++ b/plugins/channelrx/radioclock/radioclock.cpp @@ -99,6 +99,18 @@ RadioClock::~RadioClock() delete m_basebandSink; } +void RadioClock::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t RadioClock::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/radioclock/radioclock.h b/plugins/channelrx/radioclock/radioclock.h index 2a8714b78..af0558895 100644 --- a/plugins/channelrx/radioclock/radioclock.h +++ b/plugins/channelrx/radioclock/radioclock.h @@ -112,6 +112,8 @@ public: RadioClock(DeviceAPI *deviceAPI); virtual ~RadioClock(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/radioclock/radioclockgui.h b/plugins/channelrx/radioclock/radioclockgui.h index 74259e465..73b04177a 100644 --- a/plugins/channelrx/radioclock/radioclockgui.h +++ b/plugins/channelrx/radioclock/radioclockgui.h @@ -58,6 +58,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/remotesink/remotesink.cpp b/plugins/channelrx/remotesink/remotesink.cpp index 00e6ef750..bbba6c7f4 100644 --- a/plugins/channelrx/remotesink/remotesink.cpp +++ b/plugins/channelrx/remotesink/remotesink.cpp @@ -99,6 +99,18 @@ RemoteSink::~RemoteSink() delete m_basebandSink; } +void RemoteSink::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t RemoteSink::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/remotesink/remotesink.h b/plugins/channelrx/remotesink/remotesink.h index 0764449da..476ed6677 100644 --- a/plugins/channelrx/remotesink/remotesink.h +++ b/plugins/channelrx/remotesink/remotesink.h @@ -65,6 +65,8 @@ public: RemoteSink(DeviceAPI *deviceAPI); virtual ~RemoteSink(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/remotesink/remotesinkgui.h b/plugins/channelrx/remotesink/remotesinkgui.h index 84332a6fe..60354c528 100644 --- a/plugins/channelrx/remotesink/remotesinkgui.h +++ b/plugins/channelrx/remotesink/remotesinkgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; } virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } private: Ui::RemoteSinkGUI* ui; diff --git a/plugins/channelrx/sigmffilesink/sigmffilesink.cpp b/plugins/channelrx/sigmffilesink/sigmffilesink.cpp index ffe624604..a2879bead 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesink.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesink.cpp @@ -101,6 +101,18 @@ SigMFFileSink::~SigMFFileSink() delete m_basebandSink; } +void SigMFFileSink::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void SigMFFileSink::setMessageQueueToGUI(MessageQueue* queue) { ChannelAPI::setMessageQueueToGUI(queue); diff --git a/plugins/channelrx/sigmffilesink/sigmffilesink.h b/plugins/channelrx/sigmffilesink/sigmffilesink.h index 3d8b4e82c..4923c9fc4 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesink.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesink.h @@ -84,6 +84,8 @@ public: SigMFFileSink(DeviceAPI *deviceAPI); virtual ~SigMFFileSink(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h index 2813e6f44..e97e4d006 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channelrx/udpsink/udpsink.cpp b/plugins/channelrx/udpsink/udpsink.cpp index 4db88391c..81a90f9c3 100644 --- a/plugins/channelrx/udpsink/udpsink.cpp +++ b/plugins/channelrx/udpsink/udpsink.cpp @@ -92,6 +92,18 @@ UDPSink::~UDPSink() delete m_thread; } +void UDPSink::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t UDPSink::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSourceStreams(); diff --git a/plugins/channelrx/udpsink/udpsink.h b/plugins/channelrx/udpsink/udpsink.h index c70f6bd43..6a5dac3db 100644 --- a/plugins/channelrx/udpsink/udpsink.h +++ b/plugins/channelrx/udpsink/udpsink.h @@ -63,6 +63,8 @@ public: UDPSink(DeviceAPI *deviceAPI); virtual ~UDPSink(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } void enableSpectrum(bool enable); diff --git a/plugins/channelrx/udpsink/udpsinkgui.h b/plugins/channelrx/udpsink/udpsinkgui.h index cce4e24be..fe476b533 100644 --- a/plugins/channelrx/udpsink/udpsinkgui.h +++ b/plugins/channelrx/udpsink/udpsinkgui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/filesource/filesource.cpp b/plugins/channeltx/filesource/filesource.cpp index 2bb39a9b0..fcce597f2 100644 --- a/plugins/channeltx/filesource/filesource.cpp +++ b/plugins/channeltx/filesource/filesource.cpp @@ -92,6 +92,18 @@ FileSource::~FileSource() delete m_thread; } +void FileSource::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void FileSource::start() { qDebug("FileSource::start"); diff --git a/plugins/channeltx/filesource/filesource.h b/plugins/channeltx/filesource/filesource.h index 9b7db6307..6a7de9be0 100644 --- a/plugins/channeltx/filesource/filesource.h +++ b/plugins/channeltx/filesource/filesource.h @@ -147,6 +147,8 @@ public: FileSource(DeviceAPI *deviceAPI); virtual ~FileSource(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/filesource/filesourcegui.h b/plugins/channeltx/filesource/filesourcegui.h index 7f5c227c7..8eec2f10f 100644 --- a/plugins/channeltx/filesource/filesourcegui.h +++ b/plugins/channeltx/filesource/filesourcegui.h @@ -53,6 +53,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/localsource/localsource.cpp b/plugins/channeltx/localsource/localsource.cpp index 7e1bef605..05c3d795f 100644 --- a/plugins/channeltx/localsource/localsource.cpp +++ b/plugins/channeltx/localsource/localsource.cpp @@ -84,6 +84,18 @@ LocalSource::~LocalSource() delete m_thread; } +void LocalSource::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void LocalSource::start() { qDebug("LocalSource::start"); diff --git a/plugins/channeltx/localsource/localsource.h b/plugins/channeltx/localsource/localsource.h index 889ebc125..37963a533 100644 --- a/plugins/channeltx/localsource/localsource.h +++ b/plugins/channeltx/localsource/localsource.h @@ -63,6 +63,8 @@ public: LocalSource(DeviceAPI *deviceAPI); virtual ~LocalSource(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/localsource/localsourcegui.h b/plugins/channeltx/localsource/localsourcegui.h index 3dc9b8908..52f358eed 100644 --- a/plugins/channeltx/localsource/localsourcegui.h +++ b/plugins/channeltx/localsource/localsourcegui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } private: Ui::LocalSourceGUI* ui; diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp index 029063a44..592e7f94e 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp @@ -97,6 +97,18 @@ IEEE_802_15_4_Mod::~IEEE_802_15_4_Mod() delete m_thread; } +void IEEE_802_15_4_Mod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void IEEE_802_15_4_Mod::start() { qDebug("IEEE_802_15_4_Mod::start"); diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h index 8068e7f67..6dd3bd28a 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h @@ -91,6 +91,8 @@ public: IEEE_802_15_4_Mod(DeviceAPI *deviceAPI); ~IEEE_802_15_4_Mod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h index 2071794f8..b8f7ac261 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h @@ -62,6 +62,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui index 6e565edc6..472cb688b 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui @@ -6,19 +6,19 @@ 0 0 - 605 + 622 937 - + 0 0 - 0 + 600 0 @@ -40,15 +40,15 @@ - 2 - 2 + 0 + 0 600 151 - 600 + 598 0 @@ -586,14 +586,14 @@ - + 0 0 - 600 + 598 0 @@ -634,9 +634,15 @@ 284 + + + 0 + 0 + + - 600 + 598 0 @@ -661,6 +667,12 @@ + + + 0 + 0 + + 200 @@ -691,7 +703,7 @@ - 600 + 598 0 @@ -716,6 +728,12 @@ + + + 0 + 0 + + 200 @@ -743,29 +761,17 @@
gui/rollupcontents.h
1
+ + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
ValueDialZ QWidget
gui/valuedialz.h
1
- - GLScope - QWidget -
gui/glscope.h
- 1 -
- - GLScopeGUI - QWidget -
gui/glscopegui.h
- 1 -
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
GLSpectrum QWidget @@ -784,6 +790,18 @@
gui/levelmeter.h
1
+ + GLScope + QWidget +
gui/glscope.h
+ 1 +
+ + GLScopeGUI + QWidget +
gui/glscopegui.h
+ 1 +
deltaFrequency diff --git a/plugins/channeltx/modais/aismod.cpp b/plugins/channeltx/modais/aismod.cpp index 40eccd9a4..2de16546e 100644 --- a/plugins/channeltx/modais/aismod.cpp +++ b/plugins/channeltx/modais/aismod.cpp @@ -99,6 +99,18 @@ AISMod::~AISMod() delete m_thread; } +void AISMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void AISMod::start() { qDebug("AISMod::start"); diff --git a/plugins/channeltx/modais/aismod.h b/plugins/channeltx/modais/aismod.h index 1f610be16..3492ec4dc 100644 --- a/plugins/channeltx/modais/aismod.h +++ b/plugins/channeltx/modais/aismod.h @@ -152,6 +152,8 @@ public: AISMod(DeviceAPI *deviceAPI); virtual ~AISMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modais/aismodgui.h b/plugins/channeltx/modais/aismodgui.h index 502d5eb0b..c327f5cbb 100644 --- a/plugins/channeltx/modais/aismodgui.h +++ b/plugins/channeltx/modais/aismodgui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modam/ammod.cpp b/plugins/channeltx/modam/ammod.cpp index e50093b66..c1742d396 100644 --- a/plugins/channeltx/modam/ammod.cpp +++ b/plugins/channeltx/modam/ammod.cpp @@ -97,6 +97,18 @@ AMMod::~AMMod() delete m_thread; } +void AMMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t AMMod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSinkStreams(); diff --git a/plugins/channeltx/modam/ammod.h b/plugins/channeltx/modam/ammod.h index 46001df0b..66658c438 100644 --- a/plugins/channeltx/modam/ammod.h +++ b/plugins/channeltx/modam/ammod.h @@ -174,6 +174,8 @@ public: AMMod(DeviceAPI *deviceAPI); virtual ~AMMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modam/ammodgui.h b/plugins/channeltx/modam/ammodgui.h index c9ec32652..7e4c9595f 100644 --- a/plugins/channeltx/modam/ammodgui.h +++ b/plugins/channeltx/modam/ammodgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modam/ammodgui.ui b/plugins/channeltx/modam/ammodgui.ui index 0e57ea350..b1f136cf0 100644 --- a/plugins/channeltx/modam/ammodgui.ui +++ b/plugins/channeltx/modam/ammodgui.ui @@ -6,19 +6,19 @@ 0 0 - 342 - 363 + 360 + 347 - + 0 0 - 0 + 360 0 @@ -37,15 +37,21 @@ - 10 - 10 - 320 + 0 + 0 + 358 341 + + + 0 + 0 + + - 280 + 358 0 @@ -730,29 +736,29 @@
gui/rollupcontents.h
1 + + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
+ + ValueDialZ + QWidget +
gui/valuedialz.h
+ 1 +
LevelMeterVU QWidget
gui/levelmeter.h
1
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
CWKeyerGUI QWidget
gui/cwkeyergui.h
1
- - ValueDialZ - QWidget -
gui/valuedialz.h
- 1 -
diff --git a/plugins/channeltx/modatv/atvmod.cpp b/plugins/channeltx/modatv/atvmod.cpp index c39f1723c..0eb8dad6d 100644 --- a/plugins/channeltx/modatv/atvmod.cpp +++ b/plugins/channeltx/modatv/atvmod.cpp @@ -94,6 +94,18 @@ ATVMod::~ATVMod() delete m_thread; } +void ATVMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t ATVMod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSinkStreams(); diff --git a/plugins/channeltx/modatv/atvmod.h b/plugins/channeltx/modatv/atvmod.h index 4c2cc4daf..185e11fd0 100644 --- a/plugins/channeltx/modatv/atvmod.h +++ b/plugins/channeltx/modatv/atvmod.h @@ -246,6 +246,8 @@ public: ATVMod(DeviceAPI *deviceAPI); virtual ~ATVMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modatv/atvmodgui.h b/plugins/channeltx/modatv/atvmodgui.h index b6fbd5af3..a146ff4b4 100644 --- a/plugins/channeltx/modatv/atvmodgui.h +++ b/plugins/channeltx/modatv/atvmodgui.h @@ -55,6 +55,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modchirpchat/chirpchatmod.cpp b/plugins/channeltx/modchirpchat/chirpchatmod.cpp index 4ed11d89b..c2d3412fa 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmod.cpp +++ b/plugins/channeltx/modchirpchat/chirpchatmod.cpp @@ -93,6 +93,18 @@ ChirpChatMod::~ChirpChatMod() delete m_thread; } +void ChirpChatMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void ChirpChatMod::start() { qDebug("ChirpChatMod::start"); diff --git a/plugins/channeltx/modchirpchat/chirpchatmod.h b/plugins/channeltx/modchirpchat/chirpchatmod.h index 09c0c0b22..cfbc82d89 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmod.h +++ b/plugins/channeltx/modchirpchat/chirpchatmod.h @@ -89,6 +89,8 @@ public: ChirpChatMod(DeviceAPI *deviceAPI); virtual ~ChirpChatMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modchirpchat/chirpchatmodgui.h b/plugins/channeltx/modchirpchat/chirpchatmodgui.h index ce012587b..bfb017afb 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmodgui.h +++ b/plugins/channeltx/modchirpchat/chirpchatmodgui.h @@ -54,6 +54,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/moddatv/datvmod.cpp b/plugins/channeltx/moddatv/datvmod.cpp index 796ebd9b9..83b429850 100644 --- a/plugins/channeltx/moddatv/datvmod.cpp +++ b/plugins/channeltx/moddatv/datvmod.cpp @@ -97,6 +97,18 @@ DATVMod::~DATVMod() delete m_thread; } +void DATVMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + uint32_t DATVMod::getNumberOfDeviceStreams() const { return m_deviceAPI->getNbSinkStreams(); diff --git a/plugins/channeltx/moddatv/datvmod.h b/plugins/channeltx/moddatv/datvmod.h index 0cd939f2e..c4d1a3764 100644 --- a/plugins/channeltx/moddatv/datvmod.h +++ b/plugins/channeltx/moddatv/datvmod.h @@ -202,6 +202,8 @@ public: DATVMod(DeviceAPI *deviceAPI); virtual ~DATVMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/moddatv/datvmodgui.h b/plugins/channeltx/moddatv/datvmodgui.h index f0aba1bb8..4982fa555 100644 --- a/plugins/channeltx/moddatv/datvmodgui.h +++ b/plugins/channeltx/moddatv/datvmodgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modfreedv/freedvmod.cpp b/plugins/channeltx/modfreedv/freedvmod.cpp index bee8aa146..9667d4e8b 100644 --- a/plugins/channeltx/modfreedv/freedvmod.cpp +++ b/plugins/channeltx/modfreedv/freedvmod.cpp @@ -97,6 +97,18 @@ FreeDVMod::~FreeDVMod() delete m_thread; } +void FreeDVMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void FreeDVMod::start() { qDebug("FreeDVMod::start"); diff --git a/plugins/channeltx/modfreedv/freedvmod.h b/plugins/channeltx/modfreedv/freedvmod.h index 49f2cc6d8..41660950f 100644 --- a/plugins/channeltx/modfreedv/freedvmod.h +++ b/plugins/channeltx/modfreedv/freedvmod.h @@ -178,6 +178,8 @@ public: FreeDVMod(DeviceAPI *deviceAPI); virtual ~FreeDVMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modfreedv/freedvmodgui.h b/plugins/channeltx/modfreedv/freedvmodgui.h index ad79495de..0275e17ef 100644 --- a/plugins/channeltx/modfreedv/freedvmodgui.h +++ b/plugins/channeltx/modfreedv/freedvmodgui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modnfm/nfmmod.cpp b/plugins/channeltx/modnfm/nfmmod.cpp index 0f5457afc..faaf386da 100644 --- a/plugins/channeltx/modnfm/nfmmod.cpp +++ b/plugins/channeltx/modnfm/nfmmod.cpp @@ -98,6 +98,18 @@ NFMMod::~NFMMod() delete m_thread; } +void NFMMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void NFMMod::start() { qDebug("NFMMod::start"); diff --git a/plugins/channeltx/modnfm/nfmmod.h b/plugins/channeltx/modnfm/nfmmod.h index 121b1a9a1..90a4ce786 100644 --- a/plugins/channeltx/modnfm/nfmmod.h +++ b/plugins/channeltx/modnfm/nfmmod.h @@ -174,6 +174,8 @@ public: NFMMod(DeviceAPI *deviceAPI); virtual ~NFMMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modnfm/nfmmodgui.h b/plugins/channeltx/modnfm/nfmmodgui.h index 2343874b4..e4dbd25a0 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.h +++ b/plugins/channeltx/modnfm/nfmmodgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modnfm/nfmmodgui.ui b/plugins/channeltx/modnfm/nfmmodgui.ui index 925309b4d..ec293e1c7 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.ui +++ b/plugins/channeltx/modnfm/nfmmodgui.ui @@ -6,19 +6,19 @@ 0 0 - 363 - 300 + 360 + 278 - + 0 0 - 0 + 360 0 @@ -37,15 +37,15 @@ - 2 - 2 - 341 + 0 + 0 + 358 271 - 280 + 358 0 diff --git a/plugins/channeltx/modpacket/packetmod.cpp b/plugins/channeltx/modpacket/packetmod.cpp index c08f28d3c..d3f086bba 100644 --- a/plugins/channeltx/modpacket/packetmod.cpp +++ b/plugins/channeltx/modpacket/packetmod.cpp @@ -103,6 +103,18 @@ PacketMod::~PacketMod() delete m_thread; } +void PacketMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void PacketMod::start() { qDebug("PacketMod::start"); diff --git a/plugins/channeltx/modpacket/packetmod.h b/plugins/channeltx/modpacket/packetmod.h index 7a9bd95d6..ebb7ebf78 100644 --- a/plugins/channeltx/modpacket/packetmod.h +++ b/plugins/channeltx/modpacket/packetmod.h @@ -142,6 +142,8 @@ public: PacketMod(DeviceAPI *deviceAPI); virtual ~PacketMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modpacket/packetmodgui.h b/plugins/channeltx/modpacket/packetmodgui.h index 4c5fba36d..644cbdea6 100644 --- a/plugins/channeltx/modpacket/packetmodgui.h +++ b/plugins/channeltx/modpacket/packetmodgui.h @@ -56,6 +56,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modssb/ssbmod.cpp b/plugins/channeltx/modssb/ssbmod.cpp index 44ad84076..51860e1fe 100644 --- a/plugins/channeltx/modssb/ssbmod.cpp +++ b/plugins/channeltx/modssb/ssbmod.cpp @@ -99,6 +99,18 @@ SSBMod::~SSBMod() delete m_thread; } +void SSBMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void SSBMod::start() { qDebug("SSBMod::start"); diff --git a/plugins/channeltx/modssb/ssbmod.h b/plugins/channeltx/modssb/ssbmod.h index 77afa532f..6603f9ac0 100644 --- a/plugins/channeltx/modssb/ssbmod.h +++ b/plugins/channeltx/modssb/ssbmod.h @@ -176,6 +176,8 @@ public: SSBMod(DeviceAPI *deviceAPI); virtual ~SSBMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modssb/ssbmodgui.h b/plugins/channeltx/modssb/ssbmodgui.h index 74e95c05a..5a132e8e6 100644 --- a/plugins/channeltx/modssb/ssbmodgui.h +++ b/plugins/channeltx/modssb/ssbmodgui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/modssb/ssbmodgui.ui b/plugins/channeltx/modssb/ssbmodgui.ui index 0465fac0a..06b6eb17f 100644 --- a/plugins/channeltx/modssb/ssbmodgui.ui +++ b/plugins/channeltx/modssb/ssbmodgui.ui @@ -6,19 +6,19 @@ 0 0 - 430 - 643 + 414 + 331 - + 0 0 - 430 + 414 0 @@ -36,13 +36,13 @@ 0 0 - 430 + 412 331 - 385 + 412 0 @@ -503,6 +503,7 @@ + Liberation Sans 8 @@ -524,6 +525,7 @@ + Liberation Sans 8 @@ -536,6 +538,7 @@ + Liberation Sans 8 @@ -557,6 +560,7 @@ + Liberation Sans 8 @@ -572,6 +576,7 @@ + Liberation Sans 8 @@ -593,6 +598,7 @@ + Liberation Sans 8 @@ -1202,6 +1208,12 @@ 284 + + + 0 + 0 + + Channel Spectrum @@ -1250,6 +1262,17 @@
gui/rollupcontents.h
1 + + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
+ + ValueDialZ + QWidget +
gui/valuedialz.h
+ 1 +
GLSpectrum QWidget @@ -1262,34 +1285,23 @@
gui/glspectrumgui.h
1
+ + TickedSlider + QSlider +
gui/tickedslider.h
+
LevelMeterVU QWidget
gui/levelmeter.h
1
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
CWKeyerGUI QWidget
gui/cwkeyergui.h
1
- - ValueDialZ - QWidget -
gui/valuedialz.h
- 1 -
- - TickedSlider - QSlider -
gui/tickedslider.h
-
diff --git a/plugins/channeltx/modwfm/wfmmod.cpp b/plugins/channeltx/modwfm/wfmmod.cpp index ae83b93a3..c0859f4f5 100644 --- a/plugins/channeltx/modwfm/wfmmod.cpp +++ b/plugins/channeltx/modwfm/wfmmod.cpp @@ -96,6 +96,18 @@ WFMMod::~WFMMod() delete m_thread; } +void WFMMod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void WFMMod::start() { qDebug("WFMMod::start"); diff --git a/plugins/channeltx/modwfm/wfmmod.h b/plugins/channeltx/modwfm/wfmmod.h index 0f05972bb..625164ef9 100644 --- a/plugins/channeltx/modwfm/wfmmod.h +++ b/plugins/channeltx/modwfm/wfmmod.h @@ -174,6 +174,8 @@ public: WFMMod(DeviceAPI *deviceAPI); virtual ~WFMMod(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/modwfm/wfmmodgui.h b/plugins/channeltx/modwfm/wfmmodgui.h index 3c14d722e..26ef490c7 100644 --- a/plugins/channeltx/modwfm/wfmmodgui.h +++ b/plugins/channeltx/modwfm/wfmmodgui.h @@ -54,6 +54,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/remotesource/remotesource.cpp b/plugins/channeltx/remotesource/remotesource.cpp index 89af2e0db..5458f7294 100644 --- a/plugins/channeltx/remotesource/remotesource.cpp +++ b/plugins/channeltx/remotesource/remotesource.cpp @@ -88,6 +88,18 @@ RemoteSource::~RemoteSource() delete m_thread; } +void RemoteSource::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void RemoteSource::start() { qDebug("RemoteSource::start"); diff --git a/plugins/channeltx/remotesource/remotesource.h b/plugins/channeltx/remotesource/remotesource.h index ec9f27a11..6b3f831f5 100644 --- a/plugins/channeltx/remotesource/remotesource.h +++ b/plugins/channeltx/remotesource/remotesource.h @@ -155,8 +155,9 @@ public: RemoteSource(DeviceAPI *deviceAPI); virtual ~RemoteSource(); - virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/remotesource/remotesourcegui.h b/plugins/channeltx/remotesource/remotesourcegui.h index 6a095e0ee..6f8cd729e 100644 --- a/plugins/channeltx/remotesource/remotesourcegui.h +++ b/plugins/channeltx/remotesource/remotesourcegui.h @@ -55,6 +55,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/udpsource/udpsource.cpp b/plugins/channeltx/udpsource/udpsource.cpp index 68f9e9b91..f9a96d86f 100644 --- a/plugins/channeltx/udpsource/udpsource.cpp +++ b/plugins/channeltx/udpsource/udpsource.cpp @@ -82,6 +82,18 @@ UDPSource::~UDPSource() delete m_thread; } +void UDPSource::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSourceAPI(this); + m_deviceAPI->removeChannelSource(this); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSource(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + void UDPSource::start() { qDebug("UDPSource::start"); diff --git a/plugins/channeltx/udpsource/udpsource.h b/plugins/channeltx/udpsource/udpsource.h index 4d9cb6297..4a4fe6caf 100644 --- a/plugins/channeltx/udpsource/udpsource.h +++ b/plugins/channeltx/udpsource/udpsource.h @@ -95,6 +95,8 @@ public: UDPSource(DeviceAPI *deviceAPI); virtual ~UDPSource(); virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } virtual void start(); virtual void stop(); diff --git a/plugins/channeltx/udpsource/udpsourcegui.h b/plugins/channeltx/udpsource/udpsourcegui.h index f9cfdecf0..aa8afa1d8 100644 --- a/plugins/channeltx/udpsource/udpsourcegui.h +++ b/plugins/channeltx/udpsource/udpsourcegui.h @@ -57,6 +57,7 @@ public: virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } public slots: void channelMarkerChangedByCursor(); diff --git a/plugins/channeltx/udpsource/udpsourcegui.ui b/plugins/channeltx/udpsource/udpsourcegui.ui index ee3d3a970..dcc1dc6d8 100644 --- a/plugins/channeltx/udpsource/udpsourcegui.ui +++ b/plugins/channeltx/udpsource/udpsourcegui.ui @@ -6,10 +6,16 @@ 0 0 - 395 - 403 + 414 + 400 + + + 0 + 0 + + 395 @@ -18,7 +24,7 @@ - 400 + 414 16777215 @@ -39,13 +45,13 @@ 2 2 - 390 + 412 221 - 390 + 412 0 @@ -190,6 +196,15 @@ + + + + 26 + 26 + 26 + + + @@ -210,6 +225,15 @@ + + + + 26 + 26 + 26 + + + @@ -230,11 +254,21 @@ + + + + 26 + 26 + 26 + + + + Liberation Sans 8 @@ -1003,6 +1037,12 @@ 156 + + + 0 + 0 + + Channel Spectrum @@ -1024,6 +1064,12 @@ + + + 0 + 0 + + Liberation Mono @@ -1045,6 +1091,17 @@
gui/rollupcontents.h
1 + + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
+ + ValueDialZ + QWidget +
gui/valuedialz.h
+ 1 +
GLSpectrum QWidget @@ -1057,23 +1114,12 @@
gui/glspectrumgui.h
1
- - ValueDialZ - QWidget -
gui/valuedialz.h
- 1 -
LevelMeterVU QWidget
gui/levelmeter.h
1
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
diff --git a/plugins/samplesink/testsink/testsinkgui.ui b/plugins/samplesink/testsink/testsinkgui.ui index 545630c60..267f0a318 100644 --- a/plugins/samplesink/testsink/testsinkgui.ui +++ b/plugins/samplesink/testsink/testsinkgui.ui @@ -7,7 +7,7 @@ 0 0 360 - 320 + 350
@@ -293,9 +293,15 @@ + + + 0 + 0 + + - 200 + 354 200 @@ -308,24 +314,37 @@ - + + + + 0 + 0 + + + + + 354 + 30 + + +
+ + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
ValueDial QWidget
gui/valuedial.h
1
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
GLSpectrum QWidget diff --git a/sdrbase/channel/channelapi.cpp b/sdrbase/channel/channelapi.cpp index 557359d4a..861507547 100644 --- a/sdrbase/channel/channelapi.cpp +++ b/sdrbase/channel/channelapi.cpp @@ -28,7 +28,6 @@ ChannelAPI::ChannelAPI(const QString& uri, StreamType streamType) : m_uri(uri), m_indexInDeviceSet(-1), m_deviceSetIndex(0), - m_deviceAPI(0), m_uid(UidCalculator::getNewObjectId()) { connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); diff --git a/sdrbase/channel/channelapi.h b/sdrbase/channel/channelapi.h index dd284db0a..b7168d1b8 100644 --- a/sdrbase/channel/channelapi.h +++ b/sdrbase/channel/channelapi.h @@ -52,6 +52,8 @@ public: ChannelAPI(const QString& name, StreamType streamType); virtual ~ChannelAPI() {} virtual void destroy() = 0; + virtual void setDeviceAPI(DeviceAPI*) = 0; + virtual DeviceAPI *getDeviceAPI() = 0; virtual void getIdentifier(QString& id) = 0; virtual QString getIdentifier() const = 0; @@ -129,8 +131,6 @@ public: int getDeviceSetIndex() const { return m_deviceSetIndex; } void setDeviceSetIndex(int deviceSetIndex) { m_deviceSetIndex = deviceSetIndex; } - DeviceAPI *getDeviceAPI() { return m_deviceAPI; } - void setDeviceAPI(DeviceAPI *deviceAPI) { m_deviceAPI = deviceAPI; } uint64_t getUID() const { return m_uid; } // MIMO support @@ -167,7 +167,6 @@ private: int m_indexInDeviceSet; int m_deviceSetIndex; - DeviceAPI *m_deviceAPI; uint64_t m_uid; signals: diff --git a/sdrgui/CMakeLists.txt b/sdrgui/CMakeLists.txt index 95842d5aa..d83e53ec2 100644 --- a/sdrgui/CMakeLists.txt +++ b/sdrgui/CMakeLists.txt @@ -27,6 +27,7 @@ set(sdrgui_SOURCES gui/cwkeyergui.cpp gui/datetimedelegate.cpp gui/decimaldelegate.cpp + gui/devicesetselectiondialog.cpp gui/devicesetpresetsdialog.cpp gui/devicestreamselectiondialog.cpp gui/deviceuserargsdialog.cpp @@ -124,6 +125,7 @@ set(sdrgui_HEADERS gui/cwkeyergui.h gui/datetimedelegate.h gui/decimaldelegate.h + gui/devicesetselectiondialog.h gui/devicesetpresetsdialog.h gui/devicestreamselectiondialog.h gui/deviceuserargsdialog.h diff --git a/sdrgui/channel/channelgui.cpp b/sdrgui/channel/channelgui.cpp index 89f008f96..1ad76e619 100644 --- a/sdrgui/channel/channelgui.cpp +++ b/sdrgui/channel/channelgui.cpp @@ -28,6 +28,7 @@ #include "mainwindow.h" #include "gui/workspaceselectiondialog.h" +#include "gui/devicesetselectiondialog.h" #include "gui/rollupcontents.h" #include "channelgui.h" @@ -97,6 +98,12 @@ ChannelGUI::ChannelGUI(QWidget *parent) : m_duplicateButton->setIcon(m_duplicateIcon); m_duplicateButton->setToolTip("Duplicate channel"); + m_moveToDeviceButton = new QPushButton(); + m_moveToDeviceButton->setFixedSize(20, 20); + QIcon moveRoundIcon(":/exit_round.png"); + m_moveToDeviceButton->setIcon(moveRoundIcon); + m_moveToDeviceButton->setToolTip("Move to another device"); + m_statusFrequency = new QLabel(); // QFont font = m_statusFrequency->font(); // font.setPointSize(8); @@ -142,6 +149,7 @@ ChannelGUI::ChannelGUI(QWidget *parent) : m_bottomLayout = new QHBoxLayout(); m_bottomLayout->setContentsMargins(0, 0, 0, 0); m_bottomLayout->addWidget(m_duplicateButton); + m_bottomLayout->addWidget(m_moveToDeviceButton); m_bottomLayout->addWidget(m_statusFrequency); m_bottomLayout->addWidget(m_statusLabel); m_sizeGripBottomRight = new QSizeGrip(this); @@ -165,6 +173,7 @@ ChannelGUI::ChannelGUI(QWidget *parent) : connect(m_hideButton, SIGNAL(clicked()), this, SLOT(hide())); connect(m_closeButton, SIGNAL(clicked()), this, SLOT(close())); connect(m_duplicateButton, SIGNAL(clicked()), this, SLOT(duplicateChannel())); + connect(m_moveToDeviceButton, SIGNAL(clicked()), this, SLOT(openMoveToDeviceSetDialog())); connect( m_rollupContents, @@ -185,6 +194,8 @@ ChannelGUI::~ChannelGUI() delete m_layouts; delete m_statusLabel; delete m_statusFrequency; + delete m_moveToDeviceButton; + delete m_duplicateButton; delete m_closeButton; delete m_hideButton; delete m_shrinkButton; @@ -280,10 +291,19 @@ void ChannelGUI::onWidgetRolled(QWidget *widget, bool show) void ChannelGUI::duplicateChannel() { - qDebug("ChannelGUI::duplicateChannel"); emit duplicateChannelEmitted(); } +void ChannelGUI::openMoveToDeviceSetDialog() +{ + DeviceSetSelectionDialog dialog(MainWindow::getInstance()->getDeviceUISets(), m_deviceSetIndex, this); + dialog.exec(); + + if (dialog.hasChanged() && (dialog.getSelectedIndex() != m_deviceSetIndex)) { + emit moveToDeviceSet(dialog.getSelectedIndex()); + } +} + void ChannelGUI::shrinkWindow() { qDebug("ChannelGUI::shrinkWindow"); diff --git a/sdrgui/channel/channelgui.h b/sdrgui/channel/channelgui.h index 7ab78dc6d..28a8b7434 100644 --- a/sdrgui/channel/channelgui.h +++ b/sdrgui/channel/channelgui.h @@ -31,6 +31,7 @@ class QVBoxLayout; class QHBoxLayout; class QSizeGrip; class RollupContents; +class ChannelMarker; class SDRGUI_API ChannelGUI : public QMdiSubWindow { @@ -66,6 +67,7 @@ public: virtual QColor getTitleColor() const = 0; virtual void zetHidden(bool hidden) = 0; virtual bool getHidden() const = 0; + virtual ChannelMarker& getChannelMarker() = 0; virtual MessageQueue* getInputMessageQueue() = 0; @@ -114,6 +116,7 @@ private: QPushButton *m_hideButton; QPushButton *m_closeButton; QPushButton *m_duplicateButton; + QPushButton *m_moveToDeviceButton; QLabel *m_statusFrequency; QLabel *m_statusLabel; QVBoxLayout *m_layouts; @@ -132,12 +135,14 @@ private slots: void openMoveToWorkspaceDialog(); void onWidgetRolled(QWidget *widget, bool show); void duplicateChannel(); + void openMoveToDeviceSetDialog(); signals: void closing(); void moveToWorkspace(int workspaceIndex); void forceShrink(); void duplicateChannelEmitted(); + void moveToDeviceSet(int deviceSetIndex); }; #endif // SDRGUI_CHANNEL_CHANNELGUI_H_ diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index 90a8dd5f9..1adb6df0f 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -97,6 +97,11 @@ void DeviceUISet::addChannelMarker(ChannelMarker* channelMarker) m_spectrum->addChannelMarker(channelMarker); } +void DeviceUISet::removeChannelMarker(ChannelMarker* channelMarker) +{ + m_spectrum->removeChannelMarker(channelMarker); +} + void DeviceUISet::registerRxChannelInstance(ChannelAPI *channelAPI, ChannelGUI* channelGUI) { m_channelInstanceRegistrations.append(ChannelInstanceRegistration(channelAPI, channelGUI, 0)); @@ -136,6 +141,20 @@ void DeviceUISet::registerChannelInstance(ChannelAPI *channelAPI, ChannelGUI* ch ); } +void DeviceUISet::unregisterChannelInstanceAt(int channelIndex) +{ + if ((channelIndex >= 0) && (channelIndex < m_channelInstanceRegistrations.count())) + { + m_channelInstanceRegistrations.removeAt(channelIndex); + m_deviceSet->removeChannelInstanceAt(channelIndex); + + // Renumerate + for (int i = 0; i < m_channelInstanceRegistrations.count(); i++) { + m_channelInstanceRegistrations.at(i).m_gui->setIndex(i); + } + } +} + void DeviceUISet::freeChannels() { for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) @@ -331,6 +350,12 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA this, [=](){ MainWindow::getInstance()->channelDuplicate(rxChannelGUI); } ); + QObject::connect( + rxChannelGUI, + &ChannelGUI::moveToDeviceSet, + this, + [=](int dsIndexDest){ MainWindow::getInstance()->channelMoveToDeviceSet(rxChannelGUI, dsIndexDest); } + ); } } } @@ -451,6 +476,12 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA this, [=](){ MainWindow::getInstance()->channelDuplicate(txChannelGUI); } ); + QObject::connect( + txChannelGUI, + &ChannelGUI::moveToDeviceSet, + this, + [=](int dsIndexDest){ MainWindow::getInstance()->channelMoveToDeviceSet(txChannelGUI, dsIndexDest); } + ); } } } @@ -573,6 +604,12 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi this, [=](){ MainWindow::getInstance()->channelDuplicate(mimoChannelGUI); } ); + QObject::connect( + mimoChannelGUI, + &ChannelGUI::moveToDeviceSet, + this, + [=](int dsIndexDest){ MainWindow::getInstance()->channelMoveToDeviceSet(mimoChannelGUI, dsIndexDest); } + ); } } } diff --git a/sdrgui/device/deviceuiset.h b/sdrgui/device/deviceuiset.h index 397944c25..f7572f790 100644 --- a/sdrgui/device/deviceuiset.h +++ b/sdrgui/device/deviceuiset.h @@ -73,9 +73,10 @@ public: void setIndex(int deviceSetIndex); int getIndex() const { return m_deviceSetIndex; } - GLSpectrum *getSpectrum() { return m_spectrum; } //!< Direct spectrum getter + GLSpectrum *getSpectrum() { return m_spectrum; } //!< Direct spectrum getter void setSpectrumScalingFactor(float scalef); - void addChannelMarker(ChannelMarker* channelMarker); //!< Add channel marker to spectrum + void addChannelMarker(ChannelMarker* channelMarker); //!< Add channel marker to spectrum + void removeChannelMarker(ChannelMarker* channelMarker); //!< Remove channel marker from spectrum int getNumberOfChannels() const { return m_channelInstanceRegistrations.size(); } void freeChannels(); @@ -94,6 +95,7 @@ public: void registerRxChannelInstance(ChannelAPI *channelAPI, ChannelGUI* channelGUI); void registerTxChannelInstance(ChannelAPI *channelAPI, ChannelGUI* channelGUI); void registerChannelInstance(ChannelAPI *channelAPI, ChannelGUI* channelGUI); + void unregisterChannelInstanceAt(int channelIndex); // These are the number of channel types available for selection void setNumberOfAvailableRxChannels(int number) { m_nbAvailableRxChannels = number; } diff --git a/sdrgui/gui/devicesetselectiondialog.cpp b/sdrgui/gui/devicesetselectiondialog.cpp new file mode 100644 index 000000000..dc836cfbf --- /dev/null +++ b/sdrgui/gui/devicesetselectiondialog.cpp @@ -0,0 +1,65 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 F4EXB // +// written by Edouard Griffiths // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/deviceuiset.h" +#include "device/devicegui.h" +#include "device/deviceapi.h" +#include "devicesetselectiondialog.h" + +#include "ui_workspaceselectiondialog.h" + +DeviceSetSelectionDialog::DeviceSetSelectionDialog(std::vector& deviceUIs, int channelDeviceSetIndex, QWidget *parent) : + QDialog(parent), + ui(new Ui::WorkspaceSelectionDialog), + m_deviceUIs(deviceUIs), + m_channelDeviceSetIndex(channelDeviceSetIndex), + m_hasChanged(false) +{ + ui->setupUi(this); + setWindowTitle("Device"); // Change window title + + DeviceUISet *originDeviceUISet = deviceUIs[channelDeviceSetIndex]; + int originDeviceType = (int) originDeviceUISet->m_deviceGUI->getDeviceType(); + + for (int i = 0; i < (int) m_deviceUIs.size(); i++) + { + DeviceUISet *deviceUISet = m_deviceUIs[i]; + + if ((int) deviceUISet->m_deviceGUI->getDeviceType() == originDeviceType) + { + ui->workspaceList->addItem(tr("%1:%2 %3") + .arg(getDeviceTypeChar(originDeviceType)) + .arg(i) + .arg(deviceUISet->m_deviceAPI->getSamplingDeviceDisplayName().split(" ")[0]) + ); + m_deviceSetIndexes.push_back(i); + } + } +} + +DeviceSetSelectionDialog::~DeviceSetSelectionDialog() +{ + delete ui; +} + +void DeviceSetSelectionDialog::accept() +{ + m_selectedDeviceSetIndex = m_deviceSetIndexes[ui->workspaceList->currentRow()]; + m_hasChanged = true; + QDialog::accept(); +} diff --git a/sdrgui/gui/devicesetselectiondialog.h b/sdrgui/gui/devicesetselectiondialog.h new file mode 100644 index 000000000..b59fd1fee --- /dev/null +++ b/sdrgui/gui/devicesetselectiondialog.h @@ -0,0 +1,73 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 F4EXB // +// written by Edouard Griffiths // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef SDRGUI_GUI_DEVICESETSELECTIONDIALOG_H_ +#define SDRGUI_GUI_DEVICESETSELECTIONDIALOG_H_ + +#include + +#include "export.h" + +namespace Ui { + class WorkspaceSelectionDialog; +} + +class DeviceUISet; + +class SDRGUI_API DeviceSetSelectionDialog : public QDialog +{ + Q_OBJECT +public: + explicit DeviceSetSelectionDialog(std::vector& deviceUIs, int channelDeviceSetIndex, QWidget *parent = nullptr); + ~DeviceSetSelectionDialog(); + + bool hasChanged() const { return m_hasChanged; } + int getSelectedIndex() const { return m_selectedDeviceSetIndex; } + +private: + Ui::WorkspaceSelectionDialog *ui; + std::vector& m_deviceUIs; + std::vector m_deviceSetIndexes; + int m_channelDeviceSetIndex; + int m_selectedDeviceSetIndex; + bool m_hasChanged; + + QString getDeviceTypeChar(int deviceType) + { + switch(deviceType) + { + case 0: + return "R"; + break; + case 1: + return "T"; + break; + case 2: + return "M"; + break; + default: + return "X"; + break; + } + } + +private slots: + void accept(); +}; + +#endif // SDRGUI_GUI_WORKSPACESELECTIONDIALOG_H_ diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 44aa30a21..99d0495e2 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -1759,14 +1759,14 @@ void MainWindow::addWorkspace() m_workspaces.back(), &Workspace::addTxDevice, this, - [=](Workspace *inWorkspace, int deviceIndex) { this->sampleSourceAdd(inWorkspace, inWorkspace, deviceIndex); } + [=](Workspace *inWorkspace, int deviceIndex) { this->sampleSinkAdd(inWorkspace, inWorkspace, deviceIndex); } ); QObject::connect( m_workspaces.back(), &Workspace::addMIMODevice, this, - [=](Workspace *inWorkspace, int deviceIndex) { this->sampleSourceAdd(inWorkspace, inWorkspace, deviceIndex); } + [=](Workspace *inWorkspace, int deviceIndex) { this->sampleMIMOAdd(inWorkspace, inWorkspace, deviceIndex); } ); QObject::connect( @@ -2119,22 +2119,64 @@ void MainWindow::sampleMIMOChange(int deviceSetIndex, int newDeviceIndex, Worksp } } -void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI) +void MainWindow::channelMoveToDeviceSet(ChannelGUI *gui, int dsIndexDestination) { - int deviceSetIndex = sourceChannelGUI->getDeviceSetIndex(); - int channelIndex = sourceChannelGUI->getIndex(); + int deviceSetIndex = gui->getDeviceSetIndex(); + int channelIndex = gui->getIndex(); + qDebug("MainWindow::channelMoveToDeviceSet: %s at %d:%d to %d", + qPrintable(gui->getTitle()), deviceSetIndex, channelIndex, dsIndexDestination); - qDebug("MainWindow::channelDuplicate: %s at %d:%d in workspace %d", - qPrintable(sourceChannelGUI->getTitle()), deviceSetIndex, channelIndex, sourceChannelGUI->getWorkspaceIndex()); - - if (deviceSetIndex < (int) m_deviceUIs.size()) + if ((deviceSetIndex < (int) m_deviceUIs.size()) && (dsIndexDestination < (int) m_deviceUIs.size())) { DeviceUISet *deviceUI = m_deviceUIs[deviceSetIndex]; - ChannelAPI *sourceChannelAPI = deviceUI->getChannelAt(channelIndex); - DeviceAPI *deviceAPI = deviceUI->m_deviceAPI; - ChannelGUI *gui = nullptr; + DeviceUISet *destDeviceUI = m_deviceUIs[dsIndexDestination]; + ChannelAPI *channelAPI = deviceUI->getChannelAt(channelIndex); + deviceUI->unregisterChannelInstanceAt(channelIndex); - if (deviceUI->m_deviceSourceEngine) // source device => Rx channels + if (deviceUI->m_deviceSourceEngine) // source devices + { + destDeviceUI->registerRxChannelInstance(channelAPI, gui); + } + else if (deviceUI->m_deviceSinkEngine) // sink devices + { + destDeviceUI->registerTxChannelInstance(channelAPI, gui); + } + else if (deviceUI->m_deviceMIMOEngine) // MIMO devices + { + destDeviceUI->registerChannelInstance(channelAPI, gui); + } + + gui->setIndex(channelAPI->getIndexInDeviceSet()); + gui->setDeviceSetIndex(dsIndexDestination); + DeviceAPI *destDeviceAPI = destDeviceUI->m_deviceAPI; + gui->setToolTip(destDeviceAPI->getSamplingDeviceDisplayName()); + channelAPI->setDeviceAPI(destDeviceAPI); + deviceUI->removeChannelMarker(&gui->getChannelMarker()); + destDeviceUI->addChannelMarker(&gui->getChannelMarker()); + } +} + +void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI) +{ + channelDuplicateToDeviceSet(sourceChannelGUI, sourceChannelGUI->getDeviceSetIndex()); // Duplicate in same device set +} + +void MainWindow::channelDuplicateToDeviceSet(ChannelGUI *sourceChannelGUI, int dsIndexDestination) +{ + int dsIndexSource = sourceChannelGUI->getDeviceSetIndex(); + int sourceChannelIndex = sourceChannelGUI->getIndex(); + + qDebug("MainWindow::channelDuplicateToDeviceSet: %s at %d:%d to %d in workspace %d", + qPrintable(sourceChannelGUI->getTitle()), dsIndexSource, sourceChannelIndex, dsIndexDestination, sourceChannelGUI->getWorkspaceIndex()); + + if ((dsIndexSource < (int) m_deviceUIs.size()) && (dsIndexDestination < (int) m_deviceUIs.size())) + { + DeviceUISet *sourceDeviceUI = m_deviceUIs[dsIndexSource]; + ChannelAPI *sourceChannelAPI = sourceDeviceUI->getChannelAt(sourceChannelIndex); + ChannelGUI *destChannelGUI = nullptr; + DeviceUISet *destDeviceUI = m_deviceUIs[dsIndexDestination]; + + if (destDeviceUI->m_deviceSourceEngine) // source device => Rx channels { PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); PluginInterface *pluginInterface = nullptr; @@ -2152,16 +2194,16 @@ void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI) { ChannelAPI *channelAPI; BasebandSampleSink *rxChannel; - pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI); - gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel); - deviceUI->registerRxChannelInstance(channelAPI, gui); - gui->setDeviceType(ChannelGUI::DeviceRx); - gui->setIndex(channelAPI->getIndexInDeviceSet()); + pluginInterface->createRxChannel(destDeviceUI->m_deviceAPI, &rxChannel, &channelAPI); + destChannelGUI = pluginInterface->createRxChannelGUI(destDeviceUI, rxChannel); + destDeviceUI->registerRxChannelInstance(channelAPI, destChannelGUI); + destChannelGUI->setDeviceType(ChannelGUI::DeviceRx); + destChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); QByteArray b = sourceChannelGUI->serialize(); - gui->deserialize(b); + destChannelGUI->deserialize(b); } } - else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels + else if (destDeviceUI->m_deviceSinkEngine) // sink device => Tx channels { PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins PluginInterface *pluginInterface = nullptr; @@ -2179,16 +2221,16 @@ void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI) { ChannelAPI *channelAPI; BasebandSampleSource *txChannel; - pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI); - gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel); - deviceUI->registerTxChannelInstance(channelAPI, gui); - gui->setDeviceType(ChannelGUI::DeviceTx); - gui->setIndex(channelAPI->getIndexInDeviceSet()); + pluginInterface->createTxChannel(destDeviceUI->m_deviceAPI, &txChannel, &channelAPI); + destChannelGUI = pluginInterface->createTxChannelGUI(destDeviceUI, txChannel); + destDeviceUI->registerTxChannelInstance(channelAPI, destChannelGUI); + destChannelGUI->setDeviceType(ChannelGUI::DeviceTx); + destChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); QByteArray b = sourceChannelGUI->serialize(); - gui->deserialize(b); + destChannelGUI->deserialize(b); } } - else if (deviceUI->m_deviceMIMOEngine) // MIMO device => Any type of channel is possible + else if (destDeviceUI->m_deviceMIMOEngine) // MIMO device => Any type of channel is possible { PluginAPI::ChannelRegistrations *rxChannelRegistrations = m_pluginManager->getRxChannelRegistrations(); PluginAPI::ChannelRegistrations *txChannelRegistrations = m_pluginManager->getTxChannelRegistrations(); @@ -2208,13 +2250,13 @@ void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI) { ChannelAPI *channelAPI; BasebandSampleSink *rxChannel; - pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI); - gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel); - deviceUI->registerRxChannelInstance(channelAPI, gui); - gui->setDeviceType(ChannelGUI::DeviceMIMO); - gui->setIndex(channelAPI->getIndexInDeviceSet()); + pluginInterface->createRxChannel(destDeviceUI->m_deviceAPI, &rxChannel, &channelAPI); + destChannelGUI = pluginInterface->createRxChannelGUI(destDeviceUI, rxChannel); + destDeviceUI->registerRxChannelInstance(channelAPI, destChannelGUI); + destChannelGUI->setDeviceType(ChannelGUI::DeviceMIMO); + destChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); QByteArray b = sourceChannelGUI->serialize(); - gui->deserialize(b); + destChannelGUI->deserialize(b); } else { @@ -2231,13 +2273,13 @@ void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI) { ChannelAPI *channelAPI; BasebandSampleSource *txChannel; - pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI); - gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel); - deviceUI->registerTxChannelInstance(channelAPI, gui); - gui->setDeviceType(ChannelGUI::DeviceMIMO); - gui->setIndex(channelAPI->getIndexInDeviceSet()); + pluginInterface->createTxChannel(destDeviceUI->m_deviceAPI, &txChannel, &channelAPI); + destChannelGUI = pluginInterface->createTxChannelGUI(destDeviceUI, txChannel); + destDeviceUI->registerTxChannelInstance(channelAPI, destChannelGUI); + destChannelGUI->setDeviceType(ChannelGUI::DeviceMIMO); + destChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); QByteArray b = sourceChannelGUI->serialize(); - gui->deserialize(b); + destChannelGUI->deserialize(b); } else { @@ -2254,42 +2296,49 @@ void MainWindow::channelDuplicate(ChannelGUI *sourceChannelGUI) { ChannelAPI *channelAPI; MIMOChannel *mimoChannel; - pluginInterface->createMIMOChannel(deviceUI->m_deviceAPI, &mimoChannel, &channelAPI); - gui = pluginInterface->createMIMOChannelGUI(deviceUI, mimoChannel); - deviceUI->registerChannelInstance(channelAPI, gui); - gui->setDeviceType(ChannelGUI::DeviceMIMO); - gui->setIndex(channelAPI->getIndexInDeviceSet()); + pluginInterface->createMIMOChannel(destDeviceUI->m_deviceAPI, &mimoChannel, &channelAPI); + destChannelGUI = pluginInterface->createMIMOChannelGUI(destDeviceUI, mimoChannel); + destDeviceUI->registerChannelInstance(channelAPI, destChannelGUI); + destChannelGUI->setDeviceType(ChannelGUI::DeviceMIMO); + destChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); QByteArray b = sourceChannelGUI->serialize(); - gui->deserialize(b); + destChannelGUI->deserialize(b); } } } } + DeviceAPI *destDeviceAPI = destDeviceUI->m_deviceAPI; int workspaceIndex = sourceChannelGUI->getWorkspaceIndex(); Workspace *workspace = workspaceIndex < m_workspaces.size() ? m_workspaces[sourceChannelGUI->getWorkspaceIndex()] : nullptr; - if (gui && workspace) + if (destChannelGUI && workspace) { QObject::connect( - gui, + destChannelGUI, &ChannelGUI::moveToWorkspace, this, - [=](int wsIndexDest){ this->channelMove(gui, wsIndexDest); } + [=](int wsIndexDest){ this->channelMove(destChannelGUI, wsIndexDest); } ); QObject::connect( - gui, + destChannelGUI, &ChannelGUI::duplicateChannelEmitted, this, - [=](){ this->channelDuplicate(gui); } + [=](){ this->channelDuplicate(destChannelGUI); } + ); + QObject::connect( + destChannelGUI, + &ChannelGUI::moveToDeviceSet, + this, + [=](int dsIndexDest){ this->channelMoveToDeviceSet(destChannelGUI, dsIndexDest); } ); - gui->setDeviceSetIndex(deviceSetIndex); - gui->setToolTip(deviceAPI->getSamplingDeviceDisplayName()); - gui->setWorkspaceIndex(workspace->getIndex()); + destChannelGUI->setDeviceSetIndex(dsIndexDestination); + destChannelGUI->setToolTip(destDeviceAPI->getSamplingDeviceDisplayName()); + destChannelGUI->setWorkspaceIndex(workspace->getIndex()); qDebug("MainWindow::channelDuplicate: adding %s to workspace #%d", - qPrintable(gui->getTitle()), workspace->getIndex()); - workspace->addToMdiArea((QMdiSubWindow*) gui); + qPrintable(destChannelGUI->getTitle()), workspace->getIndex()); + workspace->addToMdiArea((QMdiSubWindow*) destChannelGUI); } } } @@ -2385,6 +2434,12 @@ void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int this, [=](){ this->channelDuplicate(gui); } ); + QObject::connect( + gui, + &ChannelGUI::moveToDeviceSet, + this, + [=](int dsIndexDest){ this->channelMoveToDeviceSet(gui, dsIndexDest); } + ); gui->setDeviceSetIndex(deviceSetIndex); gui->setToolTip(deviceAPI->getSamplingDeviceDisplayName()); diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index adf825bc3..e49fa6d9c 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -81,8 +81,9 @@ public: int getNumberOfWorkspaces() const { return m_workspaces.size(); } public slots: - void channelMove(ChannelGUI *gui, int wsIndexDestnation); + void channelMove(ChannelGUI *gui, int wsIndexDestination); void channelDuplicate(ChannelGUI *gui); + void channelMoveToDeviceSet(ChannelGUI *gui, int dsIndexDestination); private: enum { @@ -146,6 +147,7 @@ private: void removeFeatureSet(unsigned int featureSetIndex); void removeAllFeatureSets(); void deleteChannel(int deviceSetIndex, int channelIndex); + void channelDuplicateToDeviceSet(ChannelGUI *sourceChannelGUI, int dsIndexDestination); void sampleDeviceChange(int deviceType, int deviceSetIndex, int newDeviceIndex, Workspace *workspace); void sampleSourceChange(int deviceSetIndex, int newDeviceIndex, Workspace *workspace); void sampleSinkChange(int deviceSetIndex, int newDeviceIndex, Workspace *workspace); diff --git a/sdrgui/resources/exit_round.png b/sdrgui/resources/exit_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6c185f8d3c322e4aaba8bdfd36222dde492104 GIT binary patch literal 8704 zcmeHNXH=70vkp~2Kv23RAs|Qz1PCosrGtUci&8>JAe0bDfKU~YDpdsOMd?LBnhHu0 zrGp>}DhMb=kfI_Twf=ER^H@&XU~3S=9$@hWzR}9(olzmiH`{Y0I=xk zYMM~Kc@8cHTFR$>$QlsXoejtLkCl=?90g?O(7!Zbx!vX;0cS{-8-lrbj z)Y`9(v7^QwNevrZT$+S5C(tBuBp)v~duEhb=hCaIt?l@AYWoRm`r5?4`>N`$L95n@ z<>=?h{(uq^G$9YHPgbHg`e;>0SIT$&G+>8(xk)QJHAQPL6!O0USUN zJhR`AzqW>T%$eL{lCZK1j`E{Yzw(4JPCm(!Tl(0Cjc@+JED`D<7~vh9`E0qR%7;gu z%U8VgJ2#$Ay=atL?O40LVY}_U&-?P!i7Oe3u?guD%RRnRUwrMF0|y+}?fm>8*ozst zh+r$7iLVYF(^El^Re@ch4?SC@yBr!nSTCzARb}T+m96$Zu_e8dZ5W4-Owk*}hWJk{ z?0uaY6H^ab6R-+v7}go|kj#(ZW$HimP@XVyrQ&(E|Ce-pBFihoj^qzgX^qPp`~3qA zG)tBID_Ia=y`!yN@-exELe%^F3i=%__jB*>58tOcR)n5yqt9IOi^>^0afwf7 zN&)`W;bQ=?uPcbYMYA{CDwf7Kt4~7kb~fkAbHzoguSV#+3qzanM=$G#JkSTyyahic zXJ@WNogdhqUh#k))hS2}o6O+jdurk!5F*IsSW=kis4pU{clPzLcc)ZwR*e%~vyl27 z!7i{#fxcLN`%QfblNgb@+66bjDbqf4*V4NB7X@)iCnxYqFKsrIe~g+A*apnkHK=dK zDhzdMXiMFVm)m1Lk(K7(End@KKL);KaTzyrw!Gr;JE39UQLp0chQ$Y8@IX7_?BliK z+=-2hK>t3V(R|qVDcPr@-}%}^vIN(7&#Vqkc^MyLdubPpy>Vmkq)+yCuZ59?;DBf{ z+!?;cb0)TDt9CqcC4{`(=PC5!%C!9c_blU)y^}dI3y(dOHfkn9rs_&xV@Dn0BVjDB zOXLzml&bVs3vtFfOXXYT_M6QL$lT+pJ%O8wOK1EgBhf;J-=Fk-4xUL5Z9Z;S?m)-R zjy~fPfBZI&YQYM9U?Nj@@#!6g#z_9~$J8$+9UYbxO0)%%xcz0{UV0nD)}*yw+bdiD z*4DFeHQ#i$>V(v%Hk&~9*Y7R)MT7W>nwtu8_Ra}i-^y==J&Dugr5-Ifn|q;LJz6(T z^Q$;wpKxzw)Ehjh`*rx^x~UGP6Gayx7uK(8Vc*Ydt5<_rD_e1ryg$NeVuQl3!?R$= z+qysv*q%pk5=jq7OG_L(IGW!zHGHkP>2-@7vBs)B#`I$7e@ zyM;No?3ucL(ufF-#i3#inaL|URvb$#oe+V6H_dHdy~3@-jh1oid%2g zxol72EN0OBJ=I_@CVt^=nnL^h>^C-6httBH4^1AN?lSr*r8k^Z{Jrb)S{NM?I>fiw zTsHUh-6{fD4{X#(mB*fag!a5dXsh$Gt^4?s**1z%U{3ZiEzsauXa0t}V~!Mh#(^;_ zp3yL<)8(E|nQv(7^boPsf$sx8-*mVny!UeSNvgnS*DW*5O$XDa-J->KWS&Whe=D(6 zOC_jQHw^?ssM}>s)hlCiag4RM6qsfIXw^_vB zHTi}rLCO;lUl`|gRSmtuOj%uo#HY;>Id z_l^hV(d(_q9~V*nR$y#3W#uJrIzZj?F>{*lxz;md_Nv4^ zj@)TT`DooE(ShWSoXY;o@@z@u-K%kDkp{XcVZwM_%jNh`AKO*6Yr{FvX#3388pvjTpPuUl zNt2wgI6sSUK~tk>K$BV4Q`Zsbn-VC`BJKImBqNR*{(4Xk9hIcDJWqYltDCja(S{eN zKk{1IrQoPd<15F9oQPFRWSZWsY1H4$zJ=lY8LA3C7Qd==*=Xe8OV2n{7Gm7M!&{W`%7e z=011Myqk#K$2Oa(n7j2Ci%4xWW47gAtr|hd_e5zwjjYdWO~i0rn4^!!T)u2rtqQWO zlj^dEST=8Pq^s8P=!MpMXH8_)9Ih}XqUV5jWd`N^s4G_#Kg32fvbS{KD!b`|UuaW1 zJ+>lrCR4!JMWk9m9t@fVRLA=9wX|7x-y+29BqwzQfBk;hZ107qYC-%NO5b{71sA`TQJFc|2`2ojK7-@0xbX;r3?v}%Mov`#R@g;f7^(BYdy4ox7w5_Ir zE7ECOuC>kQ)3&;3yi4tm%|PfrNQ3s3(zm2D89=7>h$DIGK6ge0(idzRvRd1ZGT%3r zm%V2?^blXkbJpZ$X_jC}UqT`cwAHIbnK&!QD%$x3pDsLWjk*>U&#bg@CPmX_a3c@i z;_<~Qsm;phw7{HN87HS}D>(2at5noan%J)DLb6gfzXI0T*{GE3n6;6OIS|e~+P2Il z+7L1sw4*70y+S+Yn;0kt12lZHropASXHsf}K_$png>w`VxdLv!)j z&fsyL<(e2&!me0^4YI*rT=(@jtEq>)dbcT;k;^`{n83C$+4 z3Gm*ewgmQC5Lc8gi7`Nd$6jy$O{$;9UB1nZ0FtT7`KM)!(fN!b*CpI9UE)c%ZIf7x z6;tEy(PKwm$kxTcMsA#zwA-8cF1g8;>buQzQKR3~+^@O|i!X8gwBak=+KYra9A#G~XY2(l@q4p{b( zj_YS^*<`fZENGt28jxYij+25_t6Tv9;c>qZC?<0 zrBfH9*8a8f%{x-kE-cak-7r7&T7YUs?cV8iCHuuk`wj!&<+66W2#HZ?_D;J4kvkzi zvuOW)g2F1M;Yy&ws==qdxT#*?=0`~u=btUy*H?zhy@+;MSwd`r zYCF%>B$WbhvQ!%G12! z&gS{E3NJMqGwTQgc_e|VLjOTN&W@x-Lr%;4-D@I~H*l)Sfbc1KKElFPb%m;*q}4fw z)V&HjnR7yjye(IbJUOY%6H6zWUXf$RKah84&hN>@Ij?ZZGwrC>b&9kuB)|z8uc;E! zrRoIMegNr%x={>Os|z?`E~?9_4d&Y(cKE9e$MnxROO+beH z-N$f_{%yW)vBYcV$GBoowfUP}3TZ=tr|3QP4Rv_g>Vt)b1k z0RIe~$}-fD2Ts?d^363qtu6b_IQnMaK4Y)vejZ9}s~|z&g%iB*cQR8Zc}hthSJ0({ zFbg_9fR$lN(IQVr4a*V`c`ViS-K#E3-t(sy-0M$9Bv#Q^(@o5zY44Y}yh%Me>{If+ z@B^EhL8HXGlQKpEAU(R5NlPmIY;PPeV;1E(sk>(LA`{=2!@rt}ARML*LXB&6L^U$T zmWF+;q;})Q-3{mEt9yuAOkp%|O(wBXXE!Ec9Vo-Ju4z0)&C6WFvoEEH)ezf2q zWw6+swgBP5fRD7oitXMo_18_S!ZlPm0<4aSLo?tcRox$td`44FqblDcF2suNF-9PD zx7}a;5VcJ1xA$2;>(Ak5F z?E$$-TOC82R($Ol1B2bt$c)-<+$*t{qteIh4RyX4DO*G_A)L|kmuKhcn7wIuz0z!v6pN?V2*E;Y1Br)e@7`nZL%HOVw9Zo-uH;2H2bju^{U3xa8T zyim1;1u(54%#3|6{mzS7o1xRyIQr?j?Tyu9)u(NuocEV)bjgt3w;6#@YZ%1gZK_gy z?yEGqJL;o5Omvr8X-0>LRyMm$&V{Bivd947)gs){HsXj4o7+G%vw7P$mMRGC)ei0Q zuM-cr77}RG{aE|M1~=|TPb6IwDM=+3ZH2UTO$R*Q>bC--R^i$j>aJ%4&zGC=$*2G= z=ry}Hy{tq$BU3)}yfA@$UzOs1BxIW~GJWbkYIJBzg)?5WU8wLT$n3bex*72}tx|?r zut$1hI%juL`_bhDu=);l%(58c{+8?0G2L=MCW4iqV0F9Ak}i5YnLDxd7{>_HyrRDd z4Q5FJ6RTP_65TLx{B!1URIQZ#xaKr=%_@Y9%`=6@1+4DL}h9PC7H`P zkIK8PQgVw!CWQ%R0~a=iFVkxFdtpYER$dV=?r-&Sd}y-|C_&_C{fN~Vbn^>#@v|Lt zF|6#HV$i*4&2ct1$9RDs^_lxZ<44NI3 z>j(%weG=32`3t0Gk#3!X+mY%#OdJ5962xg}AoVmfesAwktYl>;D(kl+Il`M`!>*j; ziV0^ZVr!&2S^R*P^I9I;CkE~Ei#JOF>SweBkyGR(t2t?e4@cjpA&?PEIXUVY*^<^ys31mD1%SnA;I_;0Q`JFC6g zUcCCnW#YXzm@0z3{7hyd%qzy%pJ;pw8;u_lKdu_xa2F=+?)wDB8>yNzD`(*4>xJJg zL!63NeEuBUlE%)+c^X&L&u+V3z)DB8aqIffb*m@QSW&!YVb&>D&EO>btHcK5xkviE zooGSHWP*;UQF7$g#7bR4O~5Og+*x(@;Ywa}H-+mPI#%nbHD0d!Cm+mSX|6;ST^iV3 zjk8~jMLL7&uQE{DWPCVEJIo4k5svoskU%+kI$|Wq9t29_001RbG698l!;nCZ7-t+_ z8NAZi3TlIsOI0$Qwtg zN|gIwy*hw$qCm-ErC?Ar#u0*YI)sABLljYzN2m-;K^lcQa0qh2ga0yIv`C-P8JH4mxn4yLlt2Z;6IftFy2H;!5v^q zK_#SrjX0s<+7v_-rEqW_C})f$0q=Y`0S!}10x{Yr{1j!4n)KdAWMYTgv%_3P=^5^%>I4uL?2WeZ24e;Fa7d@)Xk zhA8uX4WV67cxMb{eg9Tazsqs|Az2F2((+O;IT?r}3WcI%*$E9%fXOL9WE7-flr$<* zi2q;cL{BWq59N(fccw&2iH1@@htYt}9da!4cVGNmFb4!eDQg=Fqf~?$6b6S;-qK=F zX*d)Lmi#SX$%9q>d&EkT|A!N$LxsO=1C)8cWR&fNvRg_1v0eSf*#V9J#n*4S_%B+Z zK>usxAMyJyUH{Vcj~Mtz%Kui^zjXa02L6%qzt#2sMim@h&t6rcxjJSeRT(i}YiWU`zv|j1fD{Hyo>HMd=@s2ZtJ!yi&*3~1 zAZVXscXl}>T`n@3-1U-W+(iIvd1@dgAo0rs1B3ttXWYY(VmtrS@QSy|9WZGW`B<25-?m6sWBSIa696*L!eM)zdQ6 Kym!Ij+W!EWmbQQZ literal 0 HcmV?d00001 diff --git a/sdrgui/resources/res.qrc b/sdrgui/resources/res.qrc index 4b39bd761..81fc74a52 100644 --- a/sdrgui/resources/res.qrc +++ b/sdrgui/resources/res.qrc @@ -134,6 +134,7 @@ hide.png channels.png channels_add.png + exit_round.png LiberationMono-Regular.ttf LiberationSans-Regular.ttf