From ca86cb781bab91077a8e18131c6dcb2723a79f2a Mon Sep 17 00:00:00 2001
From: f4exb <f4exb06@gmail.com>
Date: Mon, 24 Aug 2015 04:09:36 +0200
Subject: [PATCH] Deep redesign: fixed apply settings on mouse movements for
 channels that were missing conditional apply settings

---
 CMakeLists.txt                               |   4 +-
 plugins/channel/am/amdemod.cpp               |   1 +
 plugins/channel/chanalyzer/chanalyzergui.cpp |  25 ++--
 plugins/channel/lora/lorademodgui.cpp        |  15 +-
 plugins/channel/nfm/nfmdemod.cpp             |   1 +
 plugins/channel/ssb/ssbdemodgui.cpp          |  25 ++--
 plugins/channel/tcpsrc/tcpsrcgui.cpp         | 141 ++++++++++---------
 plugins/channel/wfm/wfmdemod.cpp             |  11 +-
 plugins/channel/wfm/wfmdemodgui.cpp          |  25 ++--
 9 files changed, 136 insertions(+), 112 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0cc3f1339..444c6845b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,9 +8,9 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
 
 project(sdrangelove)
 
-set(CMAKE_BUILD_TYPE "Release")
+#set(CMAKE_BUILD_TYPE "Release")
 #set(CMAKE_BUILD_TYPE "ReleaseWithDebugInfo")
-#set(CMAKE_BUILD_TYPE "Debug")
+set(CMAKE_BUILD_TYPE "Debug")
 
 set(QT_USE_QTOPENGL TRUE)
 set(CMAKE_AUTOMOC ON)
diff --git a/plugins/channel/am/amdemod.cpp b/plugins/channel/am/amdemod.cpp
index 62bb77f31..2626d6261 100644
--- a/plugins/channel/am/amdemod.cpp
+++ b/plugins/channel/am/amdemod.cpp
@@ -243,6 +243,7 @@ void AMDemod::apply()
 	m_running.m_inputSampleRate = m_config.m_inputSampleRate;
 	m_running.m_inputFrequencyOffset = m_config.m_inputFrequencyOffset;
 	m_running.m_rfBandwidth = m_config.m_rfBandwidth;
+	m_running.m_afBandwidth = m_config.m_afBandwidth;
 	m_running.m_squelch = m_config.m_squelch;
 	m_running.m_volume = m_config.m_volume;
 	m_running.m_audioSampleRate = m_config.m_audioSampleRate;
diff --git a/plugins/channel/chanalyzer/chanalyzergui.cpp b/plugins/channel/chanalyzer/chanalyzergui.cpp
index 8825f703c..381afb8ba 100644
--- a/plugins/channel/chanalyzer/chanalyzergui.cpp
+++ b/plugins/channel/chanalyzer/chanalyzergui.cpp
@@ -398,19 +398,22 @@ void ChannelAnalyzerGUI::blockApplySettings(bool block)
 
 void ChannelAnalyzerGUI::applySettings()
 {
-	setTitleColor(m_channelMarker->getColor());
-	ui->deltaFrequency->setValue(abs(m_channelMarker->getCenterFrequency()));
-	ui->deltaMinus->setChecked(m_channelMarker->getCenterFrequency() < 0);
+	if (m_doApplySettings)
+	{
+		setTitleColor(m_channelMarker->getColor());
+		ui->deltaFrequency->setValue(abs(m_channelMarker->getCenterFrequency()));
+		ui->deltaMinus->setChecked(m_channelMarker->getCenterFrequency() < 0);
 
-	m_channelizer->configure(m_channelizer->getInputMessageQueue(),
-		m_channelizer->getInputSampleRate(),
-		m_channelMarker->getCenterFrequency());
+		m_channelizer->configure(m_channelizer->getInputMessageQueue(),
+			m_channelizer->getInputSampleRate(),
+			m_channelMarker->getCenterFrequency());
 
-	m_channelAnalyzer->configure(m_channelAnalyzer->getInputMessageQueue(),
-		ui->BW->value() * 100.0,
-		ui->lowCut->value() * 100.0,
-		m_spanLog2,
-		ui->ssb->isChecked());
+		m_channelAnalyzer->configure(m_channelAnalyzer->getInputMessageQueue(),
+			ui->BW->value() * 100.0,
+			ui->lowCut->value() * 100.0,
+			m_spanLog2,
+			ui->ssb->isChecked());
+	}
 }
 
 void ChannelAnalyzerGUI::leaveEvent(QEvent*)
diff --git a/plugins/channel/lora/lorademodgui.cpp b/plugins/channel/lora/lorademodgui.cpp
index 583f850c8..62a565621 100644
--- a/plugins/channel/lora/lorademodgui.cpp
+++ b/plugins/channel/lora/lorademodgui.cpp
@@ -197,12 +197,15 @@ void LoRaDemodGUI::blockApplySettings(bool block)
 
 void LoRaDemodGUI::applySettings()
 {
-	const int  loraBW[] = BANDWIDTHSTRING;
-	int thisBW = loraBW[ui->BW->value()];
+	if (m_doApplySettings)
+	{
+		const int  loraBW[] = BANDWIDTHSTRING;
+		int thisBW = loraBW[ui->BW->value()];
 
-	m_channelizer->configure(m_channelizer->getInputMessageQueue(),
-		thisBW,
-		m_channelMarker->getCenterFrequency());
+		m_channelizer->configure(m_channelizer->getInputMessageQueue(),
+			thisBW,
+			m_channelMarker->getCenterFrequency());
 
-	m_LoRaDemod->configure(m_LoRaDemod->getInputMessageQueue(), thisBW);
+		m_LoRaDemod->configure(m_LoRaDemod->getInputMessageQueue(), thisBW);
+	}
 }
diff --git a/plugins/channel/nfm/nfmdemod.cpp b/plugins/channel/nfm/nfmdemod.cpp
index c751c4319..beac5b4a9 100644
--- a/plugins/channel/nfm/nfmdemod.cpp
+++ b/plugins/channel/nfm/nfmdemod.cpp
@@ -345,6 +345,7 @@ void NFMDemod::apply()
 	m_running.m_inputSampleRate = m_config.m_inputSampleRate;
 	m_running.m_inputFrequencyOffset = m_config.m_inputFrequencyOffset;
 	m_running.m_rfBandwidth = m_config.m_rfBandwidth;
+	m_running.m_afBandwidth = m_config.m_afBandwidth;
 	m_running.m_squelch = m_config.m_squelch;
 	m_running.m_volume = m_config.m_volume;
 	m_running.m_audioSampleRate = m_config.m_audioSampleRate;
diff --git a/plugins/channel/ssb/ssbdemodgui.cpp b/plugins/channel/ssb/ssbdemodgui.cpp
index 93ae3f751..889875325 100644
--- a/plugins/channel/ssb/ssbdemodgui.cpp
+++ b/plugins/channel/ssb/ssbdemodgui.cpp
@@ -349,19 +349,22 @@ void SSBDemodGUI::blockApplySettings(bool block)
 
 void SSBDemodGUI::applySettings()
 {
-	setTitleColor(m_channelMarker->getColor());
-	ui->deltaFrequency->setValue(abs(m_channelMarker->getCenterFrequency()));
-	ui->deltaMinus->setChecked(m_channelMarker->getCenterFrequency() < 0);
+	if (m_doApplySettings)
+	{
+		setTitleColor(m_channelMarker->getColor());
+		ui->deltaFrequency->setValue(abs(m_channelMarker->getCenterFrequency()));
+		ui->deltaMinus->setChecked(m_channelMarker->getCenterFrequency() < 0);
 
-	m_channelizer->configure(m_channelizer->getInputMessageQueue(),
-		48000,
-		m_channelMarker->getCenterFrequency());
+		m_channelizer->configure(m_channelizer->getInputMessageQueue(),
+			48000,
+			m_channelMarker->getCenterFrequency());
 
-	m_ssbDemod->configure(m_ssbDemod->getInputMessageQueue(),
-		ui->BW->value() * 100.0,
-		ui->lowCut->value() * 100.0,
-		ui->volume->value() / 10.0,
-		m_spanLog2);
+		m_ssbDemod->configure(m_ssbDemod->getInputMessageQueue(),
+			ui->BW->value() * 100.0,
+			ui->lowCut->value() * 100.0,
+			ui->volume->value() / 10.0,
+			m_spanLog2);
+	}
 }
 
 void SSBDemodGUI::leaveEvent(QEvent*)
diff --git a/plugins/channel/tcpsrc/tcpsrcgui.cpp b/plugins/channel/tcpsrc/tcpsrcgui.cpp
index 821590d6b..aed80e470 100644
--- a/plugins/channel/tcpsrc/tcpsrcgui.cpp
+++ b/plugins/channel/tcpsrc/tcpsrcgui.cpp
@@ -218,77 +218,80 @@ void TCPSrcGUI::blockApplySettings(bool block)
 
 void TCPSrcGUI::applySettings()
 {
-	bool ok;
-
-	Real outputSampleRate = ui->sampleRate->text().toDouble(&ok);
-
-	if((!ok) || (outputSampleRate < 1000))
+	if (m_doApplySettings)
 	{
-		outputSampleRate = 48000;
+		bool ok;
+
+		Real outputSampleRate = ui->sampleRate->text().toDouble(&ok);
+
+		if((!ok) || (outputSampleRate < 1000))
+		{
+			outputSampleRate = 48000;
+		}
+
+		Real rfBandwidth = ui->rfBandwidth->text().toDouble(&ok);
+
+		if((!ok) || (rfBandwidth > outputSampleRate))
+		{
+			rfBandwidth = outputSampleRate;
+		}
+
+		int tcpPort = ui->tcpPort->text().toInt(&ok);
+
+		if((!ok) || (tcpPort < 1) || (tcpPort > 65535))
+		{
+			tcpPort = 9999;
+		}
+
+		int boost = ui->boost->value();
+
+		setTitleColor(m_channelMarker->getColor());
+		ui->sampleRate->setText(QString("%1").arg(outputSampleRate, 0));
+		ui->rfBandwidth->setText(QString("%1").arg(rfBandwidth, 0));
+		ui->tcpPort->setText(QString("%1").arg(tcpPort));
+		ui->boost->setValue(boost);
+		m_channelMarker->disconnect(this, SLOT(channelMarkerChanged()));
+		m_channelMarker->setBandwidth((int)rfBandwidth);
+		connect(m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged()));
+		ui->glSpectrum->setSampleRate(outputSampleRate);
+
+		m_channelizer->configure(m_channelizer->getInputMessageQueue(),
+			outputSampleRate,
+			m_channelMarker->getCenterFrequency());
+
+		TCPSrc::SampleFormat sampleFormat;
+
+		switch(ui->sampleFormat->currentIndex())
+		{
+			case 0:
+				sampleFormat = TCPSrc::FormatSSB;
+				break;
+			case 1:
+				sampleFormat = TCPSrc::FormatNFM;
+				break;
+			case 2:
+				sampleFormat = TCPSrc::FormatS16LE;
+				break;
+			default:
+				sampleFormat = TCPSrc::FormatSSB;
+				break;
+		}
+
+		m_sampleFormat = sampleFormat;
+		m_outputSampleRate = outputSampleRate;
+		m_rfBandwidth = rfBandwidth;
+		m_tcpPort = tcpPort;
+		m_boost = boost;
+
+		m_tcpSrc->configure(m_tcpSrc->getInputMessageQueue(),
+			sampleFormat,
+			outputSampleRate,
+			rfBandwidth,
+			tcpPort,
+			boost);
+
+		ui->applyBtn->setEnabled(false);
 	}
-
-	Real rfBandwidth = ui->rfBandwidth->text().toDouble(&ok);
-
-	if((!ok) || (rfBandwidth > outputSampleRate))
-	{
-		rfBandwidth = outputSampleRate;
-	}
-
-	int tcpPort = ui->tcpPort->text().toInt(&ok);
-
-	if((!ok) || (tcpPort < 1) || (tcpPort > 65535))
-	{
-		tcpPort = 9999;
-	}
-
-	int boost = ui->boost->value();
-
-	setTitleColor(m_channelMarker->getColor());
-	ui->sampleRate->setText(QString("%1").arg(outputSampleRate, 0));
-	ui->rfBandwidth->setText(QString("%1").arg(rfBandwidth, 0));
-	ui->tcpPort->setText(QString("%1").arg(tcpPort));
-	ui->boost->setValue(boost);
-	m_channelMarker->disconnect(this, SLOT(channelMarkerChanged()));
-	m_channelMarker->setBandwidth((int)rfBandwidth);
-	connect(m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged()));
-	ui->glSpectrum->setSampleRate(outputSampleRate);
-
-	m_channelizer->configure(m_channelizer->getInputMessageQueue(),
-		outputSampleRate,
-		m_channelMarker->getCenterFrequency());
-
-	TCPSrc::SampleFormat sampleFormat;
-
-	switch(ui->sampleFormat->currentIndex())
-	{
-		case 0:
-			sampleFormat = TCPSrc::FormatSSB;
-			break;
-		case 1:
-			sampleFormat = TCPSrc::FormatNFM;
-			break;
-		case 2:
-			sampleFormat = TCPSrc::FormatS16LE;
-			break;
-		default:
-			sampleFormat = TCPSrc::FormatSSB;
-			break;
-	}
-
-	m_sampleFormat = sampleFormat;
-	m_outputSampleRate = outputSampleRate;
-	m_rfBandwidth = rfBandwidth;
-	m_tcpPort = tcpPort;
-	m_boost = boost;
-
-	m_tcpSrc->configure(m_tcpSrc->getInputMessageQueue(),
-		sampleFormat,
-		outputSampleRate,
-		rfBandwidth,
-		tcpPort,
-		boost);
-
-	ui->applyBtn->setEnabled(false);
 }
 
 void TCPSrcGUI::on_sampleFormat_currentIndexChanged(int index)
diff --git a/plugins/channel/wfm/wfmdemod.cpp b/plugins/channel/wfm/wfmdemod.cpp
index adc3e419f..ee9801f1f 100644
--- a/plugins/channel/wfm/wfmdemod.cpp
+++ b/plugins/channel/wfm/wfmdemod.cpp
@@ -199,9 +199,10 @@ bool WFMDemod::handleMessage(const Message& cmd)
 		m_config.m_afBandwidth = cfg.getAFBandwidth();
 		m_config.m_volume = cfg.getVolume();
 		m_config.m_squelch = cfg.getSquelch();
+
 		apply();
 
-		qDebug() << "  - MsgConfigureWFMDemod: m_rfBandwidth: " << m_config.m_rfBandwidth
+		qDebug() << "WFMDemod::handleMessage: MsgConfigureWFMDemod: m_rfBandwidth: " << m_config.m_rfBandwidth
 				<< " m_afBandwidth: " << m_config.m_afBandwidth
 				<< " m_volume: " << m_config.m_volume
 				<< " m_squelch: " << m_config.m_squelch;
@@ -212,7 +213,7 @@ bool WFMDemod::handleMessage(const Message& cmd)
 	{
 		if (m_sampleSink != 0)
 		{
-		   return m_sampleSink->handleMessage(cmd);
+		    return m_sampleSink->handleMessage(cmd);
 		}
 		else
 		{
@@ -227,12 +228,14 @@ void WFMDemod::apply()
 	if((m_config.m_inputFrequencyOffset != m_running.m_inputFrequencyOffset) ||
 		(m_config.m_inputSampleRate != m_running.m_inputSampleRate))
 	{
+		qDebug() << "WFMDemod::handleMessage: m_nco.setFreq";
 		m_nco.setFreq(-m_config.m_inputFrequencyOffset, m_config.m_inputSampleRate);
 	}
 
 	if((m_config.m_inputSampleRate != m_running.m_inputSampleRate) ||
 		(m_config.m_afBandwidth != m_running.m_afBandwidth))
 	{
+		qDebug() << "WFMDemod::handleMessage: m_interpolator.create";
 		m_interpolator.create(16, m_config.m_inputSampleRate, m_config.m_afBandwidth);
 		m_interpolatorDistanceRemain = (Real) m_config.m_inputSampleRate / m_config.m_audioSampleRate;
 		m_interpolatorDistance =  (Real) m_config.m_inputSampleRate / (Real) m_config.m_audioSampleRate;
@@ -242,6 +245,7 @@ void WFMDemod::apply()
 		(m_config.m_rfBandwidth != m_running.m_rfBandwidth) ||
 		(m_config.m_inputFrequencyOffset != m_running.m_inputFrequencyOffset))
 	{
+		qDebug() << "WFMDemod::handleMessage: m_rfFilter->create_filter";
 		Real lowCut = (m_config.m_inputFrequencyOffset - (m_config.m_rfBandwidth / 2.0)) / m_config.m_inputSampleRate;
 		Real hiCut  = (m_config.m_inputFrequencyOffset + (m_config.m_rfBandwidth / 2.0)) / m_config.m_inputSampleRate;
 		m_rfFilter->create_filter(lowCut, hiCut);
@@ -250,10 +254,12 @@ void WFMDemod::apply()
 	if((m_config.m_afBandwidth != m_running.m_afBandwidth) ||
 		(m_config.m_audioSampleRate != m_running.m_audioSampleRate))
 	{
+		qDebug() << "WFMDemod::handleMessage: m_lowpass.create";
 		m_lowpass.create(21, m_config.m_audioSampleRate, m_config.m_afBandwidth);
 	}
 
 	if(m_config.m_squelch != m_running.m_squelch) {
+		qDebug() << "WFMDemod::handleMessage: set m_squelchLevel";
 		m_squelchLevel = pow(10.0, m_config.m_squelch / 20.0);
 		m_squelchLevel *= m_squelchLevel;
 	}
@@ -261,6 +267,7 @@ void WFMDemod::apply()
 	m_running.m_inputSampleRate = m_config.m_inputSampleRate;
 	m_running.m_inputFrequencyOffset = m_config.m_inputFrequencyOffset;
 	m_running.m_rfBandwidth = m_config.m_rfBandwidth;
+	m_running.m_afBandwidth = m_config.m_afBandwidth;
 	m_running.m_squelch = m_config.m_squelch;
 	m_running.m_volume = m_config.m_volume;
 	m_running.m_audioSampleRate = m_config.m_audioSampleRate;
diff --git a/plugins/channel/wfm/wfmdemodgui.cpp b/plugins/channel/wfm/wfmdemodgui.cpp
index 6383c1a5a..c83dcd9ba 100644
--- a/plugins/channel/wfm/wfmdemodgui.cpp
+++ b/plugins/channel/wfm/wfmdemodgui.cpp
@@ -245,20 +245,23 @@ void WFMDemodGUI::blockApplySettings(bool block)
 
 void WFMDemodGUI::applySettings()
 {
-	setTitleColor(m_channelMarker->getColor());
+	if (m_doApplySettings)
+	{
+		setTitleColor(m_channelMarker->getColor());
 
-	m_channelizer->configure(m_channelizer->getInputMessageQueue(),
-		requiredBW(m_rfBW[ui->rfBW->value()]), // TODO: this is where requested sample rate is specified
-		m_channelMarker->getCenterFrequency());
+		m_channelizer->configure(m_channelizer->getInputMessageQueue(),
+			requiredBW(m_rfBW[ui->rfBW->value()]), // TODO: this is where requested sample rate is specified
+			m_channelMarker->getCenterFrequency());
 
-	ui->deltaFrequency->setValue(abs(m_channelMarker->getCenterFrequency()));
-	ui->deltaMinus->setChecked(m_channelMarker->getCenterFrequency() < 0);
+		ui->deltaFrequency->setValue(abs(m_channelMarker->getCenterFrequency()));
+		ui->deltaMinus->setChecked(m_channelMarker->getCenterFrequency() < 0);
 
-	m_wfmDemod->configure(m_wfmDemod->getInputMessageQueue(),
-		m_rfBW[ui->rfBW->value()],
-		ui->afBW->value() * 1000.0,
-		ui->volume->value() / 10.0,
-		ui->squelch->value());
+		m_wfmDemod->configure(m_wfmDemod->getInputMessageQueue(),
+			m_rfBW[ui->rfBW->value()],
+			ui->afBW->value() * 1000.0,
+			ui->volume->value() / 10.0,
+			ui->squelch->value());
+	}
 }
 
 void WFMDemodGUI::leaveEvent(QEvent*)