triggerbox: reload sessions containing triggerboxen

This commit is contained in:
Paul Davis 2021-08-31 19:03:32 -06:00
parent af8be5e71d
commit dcfbdb482d
2 changed files with 36 additions and 1 deletions

View File

@ -3133,6 +3133,13 @@ Route::set_processor_state (const XMLNode& node, int version)
} else if (prop->value() == "diskwriter" && _disk_writer) {
_disk_writer->set_state (**niter, version);
new_order.push_back (_disk_writer);
} else if (prop->value() == "triggerbox") {
cerr << "Seen triggerbox!\n";
if (!_triggerbox) {
_triggerbox.reset (new TriggerBox (_session, _default_type));
}
_triggerbox->set_state (**niter, version);
new_order.push_back (_triggerbox);
} else {
set_processor_state (**niter, version, prop, new_order, must_configure);
}

View File

@ -824,6 +824,8 @@ TriggerBox::drop_triggers ()
(*t) = 0;
}
}
all_triggers.clear ();
}
Trigger*
@ -1211,6 +1213,7 @@ TriggerBox::get_state (void)
{
XMLNode& node (Processor::get_state ());
node.set_property (X_("type"), X_("triggerbox"));
node.set_property (X_("data-type"), _data_type.to_string());
XMLNode* trigger_child (new XMLNode (X_("Triggers")));
@ -1229,8 +1232,33 @@ TriggerBox::get_state (void)
}
int
TriggerBox::set_state (const XMLNode&, int version)
TriggerBox::set_state (const XMLNode& node, int version)
{
node.get_property (X_("data-type"), _data_type);
XMLNode* tnode (node.child (X_("Triggers")));
assert (tnode);
XMLNodeList const & tchildren (tnode->children());
drop_triggers ();
{
Glib::Threads::RWLock::WriterLock lm (trigger_lock);
for (XMLNodeList::const_iterator t = tchildren.begin(); t != tchildren.end(); ++t) {
Trigger* trig;
if (_data_type == DataType::AUDIO) {
trig = new AudioTrigger (all_triggers.size(), *this);
all_triggers.push_back (trig);
trig->set_state (**t, version);
} else {
}
}
}
return 0;
}