Skip to content

Commit

Permalink
implement int and toggle UI controls
Browse files Browse the repository at this point in the history
  • Loading branch information
drlight-code committed Mar 5, 2020
1 parent bab9077 commit a896e04
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 35 deletions.
25 changes: 12 additions & 13 deletions Presets/simple-synth.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,27 @@ network:
controls:
- name: frequency
type: float
range: [100, 2000]
default: 440
range: [100, 2000]
message: /synth/freq

- name: amplitude
type: float
default: 0.8
message: /synth/amplitude

# - name: voices
# type: int
# range: [1, 6]
# default: 1
# message: /synth/voices
- name: vibrato
type: float
default: 0.0
message: /synth/vibrato

- name: flerp
type: toggle
default: on
message: /synth/flerp
- name: voices
type: int
default: 1
range: [1, 6]
message: /synth/voices

- name: freak out
- name: sub-oscillator
type: toggle
default: off
message: /synth/freak-out
message-mute: /synth/freak-out/mute
message: /synth/sub-osc
1 change: 1 addition & 0 deletions Source/ControlElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class ControlElement

enum class Type {
Float,
Int,
Toggle
};

Expand Down
11 changes: 8 additions & 3 deletions Source/ControlElementFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,19 @@ createControlElementUI
{
std::unique_ptr<ControlElementUI> product;

if(createInfo.type == ControlElement::Type::Float) {
switch (createInfo.type) {
case ControlElement::Type::Float:
case ControlElement::Type::Int: {
product = std::make_unique<ControlElementKnob>
(createInfo, oscSender);
break;
}
else if(createInfo.type == ControlElement::Type::Toggle) {

case ControlElement::Type::Toggle: {
product = std::make_unique<ControlElementToggle>
(createInfo, oscSender);
}
break;
}}

product->registerSendValue();

Expand Down
11 changes: 6 additions & 5 deletions Source/ControlElementKnob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,12 @@ ControlElementKnob
OSCSender & oscSender) :
ControlElementUI(createInfo, oscSender)
{
knob.reset (new Slider("knob"));
knob->setSliderStyle (Slider::RotaryVerticalDrag);
knob->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
knob->setRange (createInfo.range.first, createInfo.range.second, 0);
knob->setPaintingIsUnclipped (true);
knob = UIComponentFactory::createControlKnob ();

auto increment =
createInfo.type == ControlElement::Type::Int ? 1 : 0;
knob->setRange (createInfo.range.first,
createInfo.range.second, increment);
addAndMakeVisible (knob.get());

textEditor = UIComponentFactory::createControlTextEditor ();
Expand Down
43 changes: 29 additions & 14 deletions Source/ControlElementUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,19 +57,9 @@ ControlElementUI::
registerSendValue()
{
sendValue.removeListener (this);

sendValue.referTo
(getSpecificSendValue ());

// set below allowed range to trigger valueChanged later
sendValue.setValue
(createInfo.range.first -
std::numeric_limits<float>::epsilon ());

sendValue.referTo (getSpecificSendValue ());
sendValue.addListener (this);

// seting default value now triggers valueChanged -> send on init,
// even for default == 0 that would not trigger valueChanged.
sendValue.setValue (createInfo.defaultValue);
}

Expand Down Expand Up @@ -105,8 +95,33 @@ send()
{
if (!buttonMute->getToggleState()) {
auto value = sendValue.getValue();
auto oscMessage =
OSCMessage(String(createInfo.message), float(value));
oscSender.send(oscMessage);

switch (createInfo.type) {
case ControlElement::Type::Float: {
auto oscMessage =
OSCMessage(
String(createInfo.message),
float(value));
oscSender.send(oscMessage);
break;
}

case ControlElement::Type::Int: {
auto oscMessage =
OSCMessage(
String(createInfo.message),
int(value));
oscSender.send(oscMessage);
break;
}

case ControlElement::Type::Toggle:
auto oscMessage =
OSCMessage(
String(createInfo.message),
float(value));
oscSender.send(oscMessage);
break;
}
}
}
6 changes: 6 additions & 0 deletions Source/PresetParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const std::map<String, ControlElement::Type>
PresetParser::mapTypeNames =
{
{"float", ControlElement::Type::Float},
{"int", ControlElement::Type::Int},
{"toggle", ControlElement::Type::Toggle},
};

Expand Down Expand Up @@ -117,6 +118,11 @@ getControlElementCreateInfo
break;
}

case ControlElement::Type::Int: {
info.defaultValue = control["default"].as<int>();
break;
}

case ControlElement::Type::Toggle: {
info.defaultValue = control["default"].as<bool>();
break;
Expand Down
13 changes: 13 additions & 0 deletions Source/UIComponentFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,16 @@ createControlButton ()

return product;
}

std::unique_ptr<Slider>
UIComponentFactory::
createControlKnob ()
{
auto product = std::make_unique<Slider> ("knob");

product->setSliderStyle (Slider::RotaryVerticalDrag);
product->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
product->setPaintingIsUnclipped (true);

return product;
}
4 changes: 4 additions & 0 deletions Source/UIComponentFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,8 @@ class UIComponentFactory
static
std::unique_ptr<TextButton>
createControlButton ();

static
std::unique_ptr<Slider>
createControlKnob ();
};

0 comments on commit a896e04

Please sign in to comment.