From 019562728720428213df6563a954fb70d19f48a8 Mon Sep 17 00:00:00 2001
From: jsiegle <jsiegle@mit.edu>
Date: Sun, 11 Nov 2012 17:57:00 -0500
Subject: [PATCH] Implemented ParameterEditor deactivation during acquisition

---
 Source/Processors/Editors/GenericEditor.cpp   |   2 +
 Source/Processors/Editors/ParameterEditor.cpp | 113 +++++++++++++-----
 Source/Processors/Editors/ParameterEditor.h   |  29 +++--
 Source/Processors/Parameter.cpp               |   2 +-
 Source/Processors/ResamplingNode.cpp          |  12 +-
 5 files changed, 113 insertions(+), 45 deletions(-)

diff --git a/Source/Processors/Editors/GenericEditor.cpp b/Source/Processors/Editors/GenericEditor.cpp
index fe28f8efd..7690390c4 100755
--- a/Source/Processors/Editors/GenericEditor.cpp
+++ b/Source/Processors/Editors/GenericEditor.cpp
@@ -216,6 +216,8 @@ void GenericEditor::setEnabledState(bool t)
 void GenericEditor::startAcquisition()
 {
 
+	std::cout << "GenericEditor received message to start acquisition." << std::endl;
+
 	channelSelector->startAcquisition();
 
 	for (int n = 0; n < parameterEditors.size(); n++)
diff --git a/Source/Processors/Editors/ParameterEditor.cpp b/Source/Processors/Editors/ParameterEditor.cpp
index 1e137fae9..f8090d4fd 100755
--- a/Source/Processors/Editors/ParameterEditor.cpp
+++ b/Source/Processors/Editors/ParameterEditor.cpp
@@ -28,7 +28,6 @@ ParameterEditor::ParameterEditor(GenericProcessor* proc, Parameter& p, Font labe
 
 	activationState = true;
 
-
 	processor = proc;
 
 	shouldDeactivateDuringAcquisition = p.shouldDeactivateDuringAcquisition;
@@ -42,7 +41,7 @@ ParameterEditor::ParameterEditor(GenericProcessor* proc, Parameter& p, Font labe
 		addAndMakeVisible(pc);
 		pc->setBounds(0,0,12, 12);
 		pc->setName(String(p.getID()));
-		buttonArray.add(pc);
+		checkboxArray.add(pc);
 		//buttonIdArray.add(p.getID());
 		pc->addListener(this);
 
@@ -158,24 +157,62 @@ void ParameterEditor::parentHierarchyChanged()
 
 }
 
+void ParameterEditor::setEnabled(bool state)
+{
+
+	std::cout << "Changing editor state!" << std::endl;
+
+	if (shouldDeactivateDuringAcquisition)
+	{
+
+		for (int i = 0; i < sliderArray.size(); i++)
+		{
+			sliderArray[i]->isEnabled = state;
+			sliderArray[i]->setInterceptsMouseClicks(state, state);
+			sliderArray[i]->repaint();
+		}
+
+		for (int i = 0; i < buttonArray.size(); i++)
+		{
+			buttonArray[i]->isEnabled = state;
+			buttonArray[i]->setInterceptsMouseClicks(state, state);
+			buttonArray[i]->repaint();
+		}
+
+		for (int i = 0; i < checkboxArray.size(); i++)
+		{
+			checkboxArray[i]->isEnabled = state;
+			checkboxArray[i]->setInterceptsMouseClicks(state, state);
+			checkboxArray[i]->repaint();
+		}
+
+	}
+
+}
+
 void ParameterEditor::buttonClicked(Button* button)
 {
 	std::cout << "Button name: " << button->getName() << std::endl;
 	std::cout << "Button value: " << button->getButtonText() << std::endl;
-	
-	Array<int> a = channelSelector->getActiveChannels();
+
+	ParameterButton* b = (ParameterButton*) button;
+
+	if (b->isEnabled)
 	{
-		for (int i = 0; i < a.size(); i++)
+
+		Array<int> a = channelSelector->getActiveChannels();
 		{
-			//std::cout << a[i] << " ";
-			processor->setCurrentChannel(a[i]);
-			processor->setParameter(button->getName().getIntValue(),
-									button->getButtonText().getFloatValue());
-			//processor->
+			for (int i = 0; i < a.size(); i++)
+			{
+				//std::cout << a[i] << " ";
+				processor->setCurrentChannel(a[i]);
+				processor->setParameter(button->getName().getIntValue(),
+										button->getButtonText().getFloatValue());
+				//processor->
+			}
+			//std::cout << std::endl;
 		}
-		//std::cout << std::endl;
 	}
-
 	//processor->sliderValueChanged(slider);
 
 }
@@ -186,18 +223,23 @@ void ParameterEditor::sliderValueChanged(Slider* slider)
 
 	//std::cout << "Slider name: " << slider->getName() << std::endl;
 	//std::cout << "Slider value: " << slider->getValue() << std::endl;
-	
-	Array<int> a = channelSelector->getActiveChannels();
+
+	ParameterSlider* s = (ParameterSlider*) slider;
+
+	if (s->isEnabled)
 	{
-		for (int i = 0; i < a.size(); i++)
+		Array<int> a = channelSelector->getActiveChannels();
 		{
-			//std::cout << a[i] << " ";
-			processor->setCurrentChannel(a[i]);
-			processor->setParameter(slider->getName().getIntValue(),
-									slider->getValue());
-			//processor->
+			for (int i = 0; i < a.size(); i++)
+			{
+				//std::cout << a[i] << " ";
+				processor->setCurrentChannel(a[i]);
+				processor->setParameter(slider->getName().getIntValue(),
+										slider->getValue());
+				//processor->
+			}
+			//std::cout << std::endl;
 		}
-		//std::cout << std::endl;
 	}
 }
 
@@ -207,7 +249,7 @@ void ParameterEditor::sliderValueChanged(Slider* slider)
 
 ParameterButton::ParameterButton(var value, int buttonType, Font labelFont) :
 	Button("parameter"), type(buttonType), valueString(value.toString()),
-	font(labelFont)
+	font(labelFont), isEnabled(true)
 {
 
 	setButtonText(valueString);
@@ -227,7 +269,9 @@ ParameterButton::ParameterButton(var value, int buttonType, Font labelFont) :
     neutralOverGrad = ColourGradient(Colour(180,180,180),0.0,5.0f,
 										 Colour(150,150,150),0.0, 0.0,
 										 false);
-
+    deactivatedGrad = ColourGradient(Colour(120, 120, 120), 0.0, 5.0f,
+    									  Colour(100, 100, 100), 0.0, 0.0,
+    									  false);
 
 }
 
@@ -249,6 +293,11 @@ void ParameterButton::paintButton(Graphics& g, bool isMouseOver, bool isButtonDo
         	g.setGradientFill(neutralGrad);
      }
 
+     if (!isEnabled)
+     {
+     	g.setGradientFill(deactivatedGrad);
+     }
+
 	AffineTransform a = AffineTransform::scale(0.98f, 0.94f, float(getWidth())/2.0f,
 												float(getHeight())/2.0f);
 	g.fillPath(outlinePath, a);
@@ -308,7 +357,7 @@ void ParameterButton::resized()
 // ==== PARAMETER CHECKBOX =======================
 
 
-ParameterCheckbox::ParameterCheckbox(bool defaultState) : Button("name")
+ParameterCheckbox::ParameterCheckbox(bool defaultState) : Button("name"), isEnabled(true)
 {
 	setToggleState(defaultState, false);
 	setClickingTogglesState(true);
@@ -325,6 +374,9 @@ ParameterCheckbox::ParameterCheckbox(bool defaultState) : Button("name")
     neutralOverGrad = ColourGradient(Colour(180,180,180),0.0,5.0f,
 										 Colour(150,150,150),0.0, 0.0,
 										 true);
+    deactivatedGrad = ColourGradient(Colour(120, 120, 120), 0.0, 5.0f,
+    									  Colour(100, 100, 100), 0.0, 0.0,
+    									  false);
 }
 
 void ParameterCheckbox::paintButton(Graphics& g, bool isMouseOver, bool isButtonDown)
@@ -346,6 +398,11 @@ void ParameterCheckbox::paintButton(Graphics& g, bool isMouseOver, bool isButton
         	g.setGradientFill(neutralGrad);
      }
 
+      if (!isEnabled)
+     {
+     	g.setGradientFill(deactivatedGrad);
+     }
+
 	AffineTransform a = AffineTransform::scale(0.98f, 0.94f, float(getWidth())/2.0f,
 												float(getHeight())/2.0f);
 	
@@ -356,7 +413,7 @@ void ParameterCheckbox::paintButton(Graphics& g, bool isMouseOver, bool isButton
 // ========== PARAMETER SLIDER ====================
 
 ParameterSlider::ParameterSlider(float min, float max, 
-						float def, Font labelFont) : Slider("name"), font(labelFont)
+						float def, Font labelFont) : Slider("name"), font(labelFont), isEnabled(true)
 {
 
 	setSliderStyle(Slider::Rotary);
@@ -385,10 +442,10 @@ void ParameterSlider::paint(Graphics& g)
 
 	p = makeRotaryPath(getMinimum(), getMaximum(), getValue());
 
-	//if (activationState)
+	if (isEnabled)
 		g.setColour(Colour(240,179,12));
-	//else
-	//	g.setColour(Colour(75,75,75));
+	else
+		g.setColour(Colour(75,75,75));
 
 	g.fillPath(p);
 	
diff --git a/Source/Processors/Editors/ParameterEditor.h b/Source/Processors/Editors/ParameterEditor.h
index 64c464177..c4ad08af0 100755
--- a/Source/Processors/Editors/ParameterEditor.h
+++ b/Source/Processors/Editors/ParameterEditor.h
@@ -33,6 +33,10 @@
 #include "../Parameter.h"
 #include <stdio.h>
 
+class ParameterButton;
+class ParameterSlider;
+class ParameterCheckbox;
+
 /**
   
   Automatically creates an interactive editor for a particular
@@ -65,21 +69,19 @@ public:
     	channelSelector = ch;
     }
 
-    void setEnabled(bool t) {activationState = t;}
-
-     bool shouldDeactivateDuringAcquisition;
-
-      bool activationState;
+    // for inactivation during acquisition:
+    void setEnabled(bool t);
+    bool shouldDeactivateDuringAcquisition;
+    bool activationState;
 
 private:
 
-	Array<Slider*> sliderArray;
-	Array<Button*> buttonArray;
+	Array<ParameterSlider*> sliderArray;
+	Array<ParameterButton*> buttonArray;
+    Array<ParameterCheckbox*> checkboxArray;
 	Array<int> buttonIdArray;
 	Array<int> sliderIdArray;
-
-   
-   
+    Array<int> checkboxIdArray;
 
 	GenericProcessor* processor;
 	ChannelSelector* channelSelector;
@@ -99,6 +101,7 @@ public:
     ParameterButton(var value, int buttonType, Font labelFont);
     ~ParameterButton() {}
 
+    bool isEnabled;
 
 private:
     void paintButton(Graphics& g, bool isMouseOver, bool isButtonDown);
@@ -117,6 +120,7 @@ private:
     ColourGradient selectedOverGrad;
     ColourGradient neutralGrad;
     ColourGradient neutralOverGrad;
+    ColourGradient deactivatedGrad;
 
     enum {
 		LEFT,
@@ -133,6 +137,8 @@ public:
     ParameterCheckbox(bool defaultState);
     ~ParameterCheckbox() {}
 
+    bool isEnabled;
+
 private:
     void paintButton(Graphics& g, bool isMouseOver, bool isButtonDown);
     
@@ -140,6 +146,7 @@ private:
     ColourGradient selectedOverGrad;
     ColourGradient neutralGrad;
     ColourGradient neutralOverGrad;
+    ColourGradient deactivatedGrad;
 };
 
 class ParameterSlider : public Slider
@@ -149,6 +156,8 @@ public:
     ParameterSlider(float min, float max, float defaultValue, Font f);
     ~ParameterSlider() {}
 
+    bool isEnabled;
+
 private:
     void paint(Graphics& g);//Button(Graphics& g, bool isMouseOver, bool isButtonDown);
     
diff --git a/Source/Processors/Parameter.cpp b/Source/Processors/Parameter.cpp
index e2ce96e9a..f99b583d6 100755
--- a/Source/Processors/Parameter.cpp
+++ b/Source/Processors/Parameter.cpp
@@ -69,7 +69,7 @@ Parameter::Parameter(const String& name_, Array<var> a, int defaultVal, int ID,
 void Parameter::setValue(float val, int chan)
 {
     
-    std::cout << "Setting value of " << chan << " to " << val << std::endl;
+   // std::cout << "Setting value of " << chan << " to " << val << std::endl;
     
 	if (isBoolean())
 	{
diff --git a/Source/Processors/ResamplingNode.cpp b/Source/Processors/ResamplingNode.cpp
index 781efbf7f..ece0e527d 100755
--- a/Source/Processors/ResamplingNode.cpp
+++ b/Source/Processors/ResamplingNode.cpp
@@ -29,16 +29,13 @@
 ResamplingNode::ResamplingNode()
 	: GenericProcessor("Resampler"), 
 	  ratio (1.0), targetSampleRate(20000.0f)
-	 // destBufferPos(0),
-	 /// destBufferSampleRate(44100.0), sourceBufferSampleRate(40000.0),
-	//  destBuffer(0), tempBuffer(0)
 	
 {
 
 	filter = new Dsp::SmoothedFilterDesign 
 		<Dsp::RBJ::Design::LowPass, 1> (1024);
 
-	parameters.add(Parameter("Hz",500.0f, 44100.0f, targetSampleRate, 1, false));
+	parameters.add(Parameter("Hz",500.0f, 44100.0f, targetSampleRate, 0, true));
 
 	tempBuffer = new AudioSampleBuffer(16, TEMP_BUFFER_WIDTH);
 
@@ -61,7 +58,7 @@ AudioProcessorEditor* ResamplingNode::createEditor()
 void ResamplingNode::setParameter (int parameterIndex, float newValue)
 {
 
-	if (parameterIndex == 1)
+	if (parameterIndex == 0)
 	{
 		Parameter& p =  parameters.getReference(parameterIndex);
     	p.setValue(newValue, 0);
@@ -78,6 +75,8 @@ void ResamplingNode::setParameter (int parameterIndex, float newValue)
 		}
 
 		updateFilter();
+
+		//std::cout << "Got parameter update." << std::endl;
 	}
 
 	//std::cout << float(p[0]) << std::endl;
@@ -102,7 +101,8 @@ void ResamplingNode::updateSettings()
 	sourceBufferSampleRate = settings.sampleRate;
 	settings.sampleRate = targetSampleRate;
 
-	tempBuffer->setSize(getNumInputs(), TEMP_BUFFER_WIDTH);
+	if (getNumInputs() > 0)
+		tempBuffer->setSize(getNumInputs(), TEMP_BUFFER_WIDTH);
 
 	ratio = sourceBufferSampleRate / targetSampleRate;
 
-- 
GitLab