From a9d4668dee644c96cc17c88a151d4ed348f7eb02 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 31 Aug 2021 16:46:19 -0600 Subject: [PATCH] triggerbox: state saving --- libs/ardour/ardour/triggerbox.h | 4 +++ libs/ardour/triggerbox.cc | 49 ++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/libs/ardour/ardour/triggerbox.h b/libs/ardour/ardour/triggerbox.h index 502c947e6a..a58fdc9835 100644 --- a/libs/ardour/ardour/triggerbox.h +++ b/libs/ardour/ardour/triggerbox.h @@ -206,11 +206,15 @@ class LIBARDOUR_API AudioTrigger : public Trigger { int set_region (boost::shared_ptr); + XMLNode& get_state (void); + int set_state (const XMLNode&, int version); + protected: void retrigger (); void set_usable_length (); private: + PBD::ID data_source; std::vector data; samplecnt_t read_index; samplecnt_t data_length; diff --git a/libs/ardour/triggerbox.cc b/libs/ardour/triggerbox.cc index 00e456f8ae..a9d7213167 100644 --- a/libs/ardour/triggerbox.cc +++ b/libs/ardour/triggerbox.cc @@ -8,6 +8,7 @@ #include "pbd/basename.h" #include "pbd/compose.h" #include "pbd/failed_constructor.h" +#include "pbd/types_convert.h" #include "temporal/tempo.h" @@ -88,6 +89,19 @@ XMLNode& Trigger::get_state (void) { XMLNode* node = new XMLNode (X_("Trigger")); + + node->set_property (X_("legato"), _legato); + node->set_property (X_("launch-style"), enum_2_string (_launch_style)); + node->set_property (X_("follow-action-0"), enum_2_string (_follow_action[0])); + node->set_property (X_("follow-action-1"), enum_2_string (_follow_action[1])); + node->set_property (X_("quantization"), _quantization); + node->set_property (X_("name"), _name); + node->set_property (X_("index"), _index); + + if (_region) { + node->set_property (X_("region"), _region->id()); + } + return *node; } @@ -322,6 +336,23 @@ AudioTrigger::~AudioTrigger () } } +XMLNode& +AudioTrigger::get_state (void) +{ + XMLNode& node (Trigger::get_state()); + + node.set_property (X_("start"), timepos_t (_start_offset)); + node.set_property (X_("length"), timepos_t (usable_length)); + + return node; +} + +int +AudioTrigger::set_state (const XMLNode&, int version) +{ + return 0; +} + void AudioTrigger::set_start (timepos_t const & s) { @@ -1161,7 +1192,23 @@ TriggerBox::set_next_trigger (size_t current) XMLNode& TriggerBox::get_state (void) { - return Processor::get_state (); + XMLNode& node (Processor::get_state ()); + + node.set_property (X_("data-type"), _data_type.to_string()); + + XMLNode* trigger_child (new XMLNode (X_("Triggers"))); + + { + Glib::Threads::RWLock::ReaderLock lm (trigger_lock); + for (Triggers::iterator t = all_triggers.begin(); t != all_triggers.end(); ++t) { + trigger_child->add_child_nocopy ((*t)->get_state()); + } + } + + + node.add_child_nocopy (*trigger_child); + + return node; } int