Skip to content
Snippets Groups Projects
Commit 6ad62f2a authored by Aaron Cuevas Lopez's avatar Aaron Cuevas Lopez
Browse files

Add multiselection record engine setting support

parent be2c006e
No related branches found
No related tags found
No related merge requests found
......@@ -33,11 +33,26 @@ EngineParameterComponent::EngineParameterComponent(EngineParameter& param)
but->setBounds(120,0,100,20);
addAndMakeVisible(but);
control = but;
name = param.name;
}
else if (param.type == EngineParameter::MULTI)
{
ComboBox* box = new ComboBox();
box->setBounds(120, 0, 100, 20);
StringArray options = StringArray::fromTokens(param.name, "|", "\"");
name = options[0];
options.remove(0);
box->addItemList(options, 1);
box->setSelectedId(param.multiParam.value + 1, dontSendNotification);
box->setEditableText(false);
addAndMakeVisible(box);
control = box;
}
else
{
Label* lab = new Label();
lab->setFont(Font("Small Text",10,Font::plain));
name = param.name;
switch (param.type)
{
case EngineParameter::BOOL:
......@@ -74,7 +89,7 @@ void EngineParameterComponent::paint(Graphics& g)
{
g.setColour(Colours::black);
g.setFont(13);
g.drawText(parameter.name+":",0,0,100,30,Justification::left,true);
g.drawText(name+":",0,0,100,30,Justification::left,true);
}
void EngineParameterComponent::labelTextChanged(Label* l)
......@@ -104,25 +119,28 @@ void EngineParameterComponent::saveValue()
switch (parameter.type)
{
case EngineParameter::BOOL:
parameter.boolParam.value = ((ToggleButton*)control.get())->getToggleState();
parameter.boolParam.value = static_cast<ToggleButton*>(control.get())->getToggleState();
break;
case EngineParameter::INT:
parameter.intParam.value = ((Label*)control.get())->getText().getIntValue();
parameter.intParam.value = static_cast<Label*>(control.get())->getText().getIntValue();
if (parameter.intParam.value < parameter.intParam.min)
parameter.intParam.value = parameter.intParam.min;
if (parameter.intParam.value > parameter.intParam.max)
parameter.intParam.value = parameter.intParam.max;
break;
case EngineParameter::FLOAT:
parameter.floatParam.value = ((Label*)control.get())->getText().getFloatValue();
parameter.floatParam.value = static_cast<Label*>(control.get())->getText().getFloatValue();
if (parameter.floatParam.value < parameter.floatParam.min)
parameter.floatParam.value = parameter.floatParam.min;
if (parameter.floatParam.value > parameter.floatParam.max)
parameter.floatParam.value = parameter.floatParam.max;
break;
case EngineParameter::STR:
parameter.strParam.value = ((Label*)control.get())->getText();
parameter.strParam.value = static_cast<Label*>(control.get())->getText();
break;
case EngineParameter::MULTI:
parameter.multiParam.value = static_cast<ComboBox*>(control.get())->getSelectedId() - 1;
break;
}
}
......@@ -135,7 +153,7 @@ EngineConfigComponent::EngineConfigComponent(RecordEngineManager* man, int heigh
for (int i = 0; i < man->getNumParameters(); i++)
{
EngineParameterComponent* par = new EngineParameterComponent(man->getParameter(i));
if (man->getParameter(i).type == EngineParameter::STR)
if (man->getParameter(i).type == EngineParameter::STR || man->getParameter(i).type == EngineParameter::MULTI)
hasString=true;
par->setBounds(10,10+40*i,300,30);
addAndMakeVisible(par);
......
......@@ -43,6 +43,7 @@ private:
ScopedPointer<Component> control;
EngineParameter::EngineParameterType type;
EngineParameter& parameter;
String name;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EngineParameterComponent);
};
......
......@@ -209,6 +209,9 @@ void EngineParameter::restoreDefault()
strParam.value = def;
break;
case MULTI:
multiParam.value = def;
default:
break;
}
......@@ -329,6 +332,10 @@ void RecordEngineManager::saveParametersToXml (XmlElement* xml)
param->setAttribute ("value", parameters[i]->strParam.value);
break;
case EngineParameter::MULTI:
param->setAttribute("type", "multi");
param->setAttribute("value", parameters[i]->multiParam.value);
default:
break;
}
......@@ -363,6 +370,11 @@ void RecordEngineManager::loadParametersFromXml (XmlElement* xml)
{
parameters[i]->strParam.value = xmlNode->getStringAttribute ("value");
}
else if ((xmlNode->getStringAttribute("type") == "multi")
&& (parameters[i]->type == EngineParameter::MULTI))
{
parameters[i]->multiParam.value = xmlNode->getIntAttribute("value");
}
}
}
}
......
......@@ -38,6 +38,8 @@
v = parameter.floatParam.value
#define strParameter(i,v) if ((parameter.id == i) && (parameter.type == EngineParameter::STR)) \
v = parameter.strParam.value
#define multiParameter(i,v) if ((parameter.id == i) && (parameter.type == EngineParameter::MULTI)) \
v = parameter.multiParam.value
struct RecordProcessorInfo
{
......@@ -219,7 +221,7 @@ typedef RecordEngine* (*EngineCreator)();
struct PLUGIN_API EngineParameter
{
public:
enum EngineParameterType { STR, INT, FLOAT, BOOL };
enum EngineParameterType { STR, INT, FLOAT, BOOL, MULTI };
EngineParameter (EngineParameterType paramType,
int paramId,
......@@ -250,6 +252,11 @@ public:
{
bool value;
} boolParam;
struct
{
int value;
} multiParam;
};
//Strings can't be inside an union. This means wasting a bit of memory, but adds more safety than using char*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment