Skip to content

Commit

Permalink
add connection presets in NodeManager
Browse files Browse the repository at this point in the history
  • Loading branch information
benkuper committed Nov 27, 2024
1 parent 568000d commit 52785cb
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 1 deletion.
95 changes: 94 additions & 1 deletion Source/Node/NodeManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ NodeManager::NodeManager(AudioProcessorGraph* graph,
audioOutputNodeID(audioOutputNodeID),
midiInputNodeID(midiInputNodeID),
midiOutputNodeID(midiOutputNodeID),
looperControlCC("Looper Control")
looperControlCC("Looper Control"),
presetsCC("Connection Presets")
{
managerFactory = NodeFactory::getInstance();

Expand All @@ -49,6 +50,18 @@ NodeManager::NodeManager(AudioProcessorGraph* graph,
connectionManager->hideInRemoteControl = true;
connectionManager->defaultHideInRemoteControl = true;
addChildControllableContainer(connectionManager.get());


presetEnum = presetsCC.addEnumParameter("Presets", "Patch configurations");
reloadPreset = presetsCC.addTrigger("Reload Preset", "Reload the current preset");
addPreset = presetsCC.addTrigger("Add Preset", "Add a new preset");
savePreset = presetsCC.addTrigger("Save Preset", "Save the current state as a preset");
newPresetName = presetsCC.addStringParameter("New Preset Name", "Name for the new preset when triggering add preset", "New Preset");
updatePresetName = presetsCC.addTrigger("Update Preset Name", "Update the name of the current preset");
deletePreset = presetsCC.addTrigger("Delete Preset", "Delete the current preset");
addChildControllableContainer(&presetsCC);

presets = var(new DynamicObject());
}


Expand Down Expand Up @@ -272,6 +285,56 @@ void NodeManager::onControllableFeedbackUpdate(ControllableContainer* cc, Contro
looper->clearAllTrigger->trigger();
}
}



if (cc == &presetsCC)
{
if (c == presetEnum)
{
loadCurrentPreset();
}
else if (c == reloadPreset)
{
loadCurrentPreset();
}
else if (c == addPreset)
{
String s = newPresetName->stringValue();
if (s.isEmpty()) s = "New preset";
String uniqueName = s;
int i = 1;
while (presets.hasProperty(uniqueName))
{
uniqueName = s + " " + String(i);
i++;
}
presets.getDynamicObject()->setProperty(uniqueName, connectionManager->getJSONData());
updatePresetEnum();
presetEnum->setValueWithKey(uniqueName);
}
else if (c == savePreset)
{
if (presetEnum->getValueKey().isNotEmpty())
{
presets.getDynamicObject()->setProperty(presetEnum->getValueKey(), connectionManager->getJSONData());
presetEnum->setValueWithKey(presetEnum->getValueKey());
}
}
else if (c == updatePresetName)
{
presets.getDynamicObject()->setProperty(newPresetName->stringValue(), presets.getProperty(presetEnum->getValueKey(), var()));
presets.getDynamicObject()->removeProperty(presetEnum->getValueKey());
updatePresetEnum();
presetEnum->setValueWithKey(newPresetName->stringValue());
}
else if (c == deletePreset)
{
//delete preset
presets.getDynamicObject()->removeProperty(presetEnum->getValueKey());
updatePresetEnum();
}
}
}

void NodeManager::updateLooperList()
Expand All @@ -293,6 +356,36 @@ bool NodeManager::hasPlayingNodes()
return false;
}

void NodeManager::updatePresetEnum()
{
Array<EnumParameter::EnumValue*> options;
options.add(new EnumParameter::EnumValue("None", var()));
NamedValueSet& nvSet = presets.getDynamicObject()->getProperties();
for (auto& nv : nvSet) options.add(new EnumParameter::EnumValue(nv.name.toString(), nv.name.toString()));
presetEnum->setOptions(options);
}

void NodeManager::loadCurrentPreset()
{
if (presetEnum->getValue().isVoid())
{
connectionManager->clear();
}
else
{
var data = presets.getProperty(presetEnum->getValue().toString(), var());
if (data.isVoid())
{
NLOGWARNING(niceName, "No data in preset " << presetEnum->getValue().toString());
}
else
{
connectionManager->loadJSONData(data);
}
}
}


var NodeManager::getJSONData()
{
var data = BaseManager::getJSONData();
Expand Down
14 changes: 14 additions & 0 deletions Source/Node/NodeManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,17 @@ class NodeManager :
Trigger* clearAllCurrentLooper;


ControllableContainer presetsCC;
EnumParameter* presetEnum;
StringParameter* newPresetName;
Trigger* addPreset;
Trigger* savePreset;
Trigger* deletePreset;
Trigger* reloadPreset;
Trigger* updatePresetName;
var presets;


AudioProcessorGraph* graph;
AudioProcessorGraph::NodeID audioInputNodeID;
AudioProcessorGraph::NodeID audioOutputNodeID;
Expand Down Expand Up @@ -87,6 +98,9 @@ class NodeManager :

bool hasPlayingNodes();

void updatePresetEnum();
void loadCurrentPreset();

var getJSONData() override;
void loadJSONDataManagerInternal(var data) override;
void afterLoadJSONDataInternal() override;
Expand Down

0 comments on commit 52785cb

Please sign in to comment.