diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 54ca2e6993..150019df94 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -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); } diff --git a/libs/ardour/triggerbox.cc b/libs/ardour/triggerbox.cc index 1f5087c1fa..68a272c194 100644 --- a/libs/ardour/triggerbox.cc +++ b/libs/ardour/triggerbox.cc @@ -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; }