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