From 4fee6e65230e4f5790d110e6eb246ed5bbb9a721 Mon Sep 17 00:00:00 2001 From: jsiegle <jsiegle@mit.edu> Date: Wed, 11 Apr 2012 17:50:35 -0400 Subject: [PATCH] Added Parameter Slider --- Source/Processors/Editors/GenericEditor.cpp | 13 ++- Source/Processors/Editors/ParameterEditor.cpp | 95 ++++++++++++++++++- Source/Processors/Editors/ParameterEditor.h | 26 +++++ Source/Processors/SignalGenerator.cpp | 8 +- 4 files changed, 137 insertions(+), 5 deletions(-) diff --git a/Source/Processors/Editors/GenericEditor.cpp b/Source/Processors/Editors/GenericEditor.cpp index 496e2ea1e..2bbf74b01 100644 --- a/Source/Processors/Editors/GenericEditor.cpp +++ b/Source/Processors/Editors/GenericEditor.cpp @@ -88,11 +88,22 @@ GenericEditor::GenericEditor (GenericProcessor* owner)//, FilterViewport* vp) //grad.addColour(0.5, Colours::lightgrey); //grad.addColour(1.0f, Colours::grey); + int maxX = 20; + int maxY = 30; + for (int i = 0; i < owner->getNumParameters(); i++) { ParameterEditor* p = new ParameterEditor(owner->getParameterReference(i), titleFont); - p->setBounds(20, 40, 120, 30); + + int dWidth = p->desiredWidth; + int dHeight = p->desiredHeight; + + p->setBounds(maxX, maxY, dWidth, dHeight); addAndMakeVisible(p); + + maxY += dHeight; + maxY += 10; + } backgroundColor = Colour(10,10,10); diff --git a/Source/Processors/Editors/ParameterEditor.cpp b/Source/Processors/Editors/ParameterEditor.cpp index 7c72d3635..541ab3d36 100644 --- a/Source/Processors/Editors/ParameterEditor.cpp +++ b/Source/Processors/Editors/ParameterEditor.cpp @@ -29,6 +29,7 @@ ParameterEditor::ParameterEditor(Parameter& p, Font labelFont) if (p.isBoolean()) { std::cout << "Boolean parameter. Creating checkbox." << std::endl; + // create checkbox ParameterCheckbox* pc = new ParameterCheckbox((bool) p.getDefaultValue()); addAndMakeVisible(pc); @@ -41,11 +42,32 @@ ParameterEditor::ParameterEditor(Parameter& p, Font labelFont) label->setBounds(10, 1, 100, 10); addAndMakeVisible(label); + desiredWidth = 120; + desiredHeight = 25; + } else if (p.isContinuous()) { std::cout << "Continuous parameter. Creating slider." << std::endl; // create slider - //ParameterSlider* ps = new ParameterSlider(p.getName(), p.getPossibleValues()); + Array<var> possibleValues = p.getPossibleValues(); + ParameterSlider* ps = new ParameterSlider((float) possibleValues[0], + (float) possibleValues[1], + (float) p.getDefaultValue(), + labelFont); + + ps->setBounds(0,0, 40, 40); + addAndMakeVisible(ps); + + Label* label = new Label(p.getName(), p.getName()); + labelFont.setHeight(10); + int width = labelFont.getStringWidth(p.getName()); + label->setColour(Label::textColourId, Colours::darkgrey); + label->setFont(labelFont); + label->setBounds((40-width)/2-5, 40, 100, 10); + addAndMakeVisible(label); + + desiredWidth = 50; + desiredHeight = 50; } else if (p.isDiscrete()) { @@ -85,6 +107,9 @@ ParameterEditor::ParameterEditor(Parameter& p, Font labelFont) addAndMakeVisible(pb); } + + desiredWidth = 120; + desiredHeight = 30; } } @@ -243,4 +268,72 @@ void ParameterCheckbox::paintButton(Graphics& g, bool isMouseOver, bool isButton g.fillRoundedRectangle(1, 1, getWidth()-2, getHeight()-2, 2.0f); +} + +// ========== PARAMETER SLIDER ==================== + +ParameterSlider::ParameterSlider(float min, float max, + float def, Font labelFont) : Slider("name"), font(labelFont) +{ + + setSliderStyle(Slider::Rotary); + setRange(min,max,1.0f); + setValue(def); + setTextBoxStyle(Slider::NoTextBox, false, 40, 20); + +} + +void ParameterSlider::paint(Graphics& g) +{ + + ColourGradient grad = ColourGradient(Colour(40, 40, 40), 0.0f, 0.0f, + + Colour(80, 80, 80), 0.0, 40.0f, false); + + Path p; + p.addPieSegment(3, 3, getWidth()-6, getHeight()-6, 5*double_Pi/4-0.2, 5*double_Pi/4+3*double_Pi/2+0.2, 0.5); + + g.setGradientFill(grad); + g.fillPath(p); + //g.fillEllipse(3, 3, getWidth()-6, getHeight()-6); + + //g.setColour(Colours::lightgrey); + //g.fillEllipse(12, 12, getWidth()-24, getHeight()-24); + + p = makeRotaryPath(getMinimum(), getMaximum(), getValue()); + g.setColour(Colour(240,179,12)); + g.fillPath(p); + + //g.setColour(Colours::darkgrey); + font.setHeight(9.0); + g.setFont(font); + + + String valueString = String( (int) getValue()); + + int stringWidth = font.getStringWidth(valueString); + + g.setFont(font); + + g.setColour(Colours::darkgrey); + g.drawSingleLineText(valueString, getWidth()/2 - stringWidth/2, getHeight()/2+3); + +} + +Path ParameterSlider::makeRotaryPath(double min, double max, double val) +{ + Path p; + + double start = 5*double_Pi/4; + + double range = (val-min)/(max - min)*1.5*double_Pi + start; + + p.addPieSegment(6,6, getWidth()-12, getHeight()-12, start, range, 0.8); + + // p.startNewSubPath(5, getHeight()-5); + // p.addArc(5, 5, getWidth()-10, getWidth()-10, 5/4*double_Pi, range); + // //p.addArc(getWidth()-5, getHeight()-5, getWidth()-16, getWidth()-16, 5/4*double_Pi, range); + // p.closeSubPath(); + + return p; } \ No newline at end of file diff --git a/Source/Processors/Editors/ParameterEditor.h b/Source/Processors/Editors/ParameterEditor.h index d364ccee8..729d3a804 100644 --- a/Source/Processors/Editors/ParameterEditor.h +++ b/Source/Processors/Editors/ParameterEditor.h @@ -45,6 +45,9 @@ public: ParameterEditor(Parameter& p, Font labelFont); ~ParameterEditor(); + + int desiredWidth; + int desiredHeight; private: @@ -65,6 +68,7 @@ public: ParameterButton(var value, int buttonType, Font labelFont); ~ParameterButton() {} + private: void paintButton(Graphics& g, bool isMouseOver, bool isButtonDown); @@ -83,6 +87,8 @@ private: ColourGradient neutralGrad; ColourGradient neutralOverGrad; + + enum { LEFT, MIDDLE, @@ -107,4 +113,24 @@ private: ColourGradient neutralOverGrad; }; +class ParameterSlider : public Slider + +{ +public: + ParameterSlider(float min, float max, float defaultValue, Font f); + ~ParameterSlider() {} + +private: + void paint(Graphics& g);//Button(Graphics& g, bool isMouseOver, bool isButtonDown); + + Path makeRotaryPath(double, double, double); + + Font font; + // ColourGradient selectedGrad; + // ColourGradient selectedOverGrad; + // ColourGradient neutralGrad; + // ColourGradient neutralOverGrad; +}; + + #endif // __PARAMETEREDITOR_H_44537DA9__ diff --git a/Source/Processors/SignalGenerator.cpp b/Source/Processors/SignalGenerator.cpp index 5fcb29f6e..e8e4a088f 100644 --- a/Source/Processors/SignalGenerator.cpp +++ b/Source/Processors/SignalGenerator.cpp @@ -37,16 +37,18 @@ SignalGenerator::SignalGenerator() // create parameters, to be passed to the GenericEditor - //String paramName = String("Bill"); Array<var> a; a.add(1); a.add(2); a.add(3); - Parameter p = Parameter("Parameter name",true);//a,0); + //parameters.add(Parameter("SVN",0.0f, 100.0f, 50.0f)); - parameters.add(p); + parameters.add(Parameter("Param 1",a, 0));//true);//a,0); + parameters.add(Parameter("Param 1",a, 0));//true);//a,0); + + parameters.add(Parameter("Param 2",true)); } -- GitLab