diff options
author | Carl Hetherington <carl@carlh.net> | 2010-08-09 22:23:23 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-08-09 22:23:23 +0000 |
commit | 78986385e17b82a6704c8792fb21a42cd86add9a (patch) | |
tree | 54bdca03098ff7e26b536b0640e3321b4b0a042e /libs/ardour/automatable.cc | |
parent | 7c5f1b7a26df60417590340d4cfe367ed00e180a (diff) |
Fix save/load of MIDI automation state. Fixes #3354.
git-svn-id: svn://localhost/ardour2/branches/3.0@7578 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/automatable.cc')
-rw-r--r-- | libs/ardour/automatable.cc | 42 |
1 files changed, 14 insertions, 28 deletions
diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index c71fabda37..d6379eb38e 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -147,19 +147,17 @@ Automatable::add_control(boost::shared_ptr<Evoral::Control> ac) { Evoral::Parameter param = ac->parameter(); - ControlSet::add_control(ac); - _can_automate_list.insert(param); - auto_state_changed(param); // sync everything up - - /* connect to automation_state_changed so that we can emit a signal when one of our controls' - automation state changes - */ - boost::shared_ptr<AutomationControl> c = boost::dynamic_pointer_cast<AutomationControl> (ac); - if (c) { - c->alist()->automation_state_changed.connect_same_thread ( - _control_connections, boost::bind (&Automatable::automation_state_changed, this, c->parameter()) - ); - } + boost::shared_ptr<AutomationList> al = boost::dynamic_pointer_cast<AutomationList> (ac->list ()); + assert (al); + + al->automation_state_changed.connect_same_thread ( + _list_connections, boost::bind (&Automatable::automation_list_automation_state_changed, this, ac->parameter(), _1) + ); + + ControlSet::add_control (ac); + _can_automate_list.insert (param); + + automation_list_automation_state_changed (param, al->automation_state ()); // sync everything up } void @@ -315,21 +313,16 @@ Automatable::set_parameter_automation_state (Evoral::Parameter param, AutoState } AutoState -Automatable::get_parameter_automation_state (Evoral::Parameter param, bool lock) +Automatable::get_parameter_automation_state (Evoral::Parameter param) { AutoState result = Off; - if (lock) - control_lock().lock(); - boost::shared_ptr<Evoral::Control> c = control(param); boost::shared_ptr<AutomationList> l = boost::dynamic_pointer_cast<AutomationList>(c->list()); - if (c) + if (c) { result = l->automation_state(); - - if (lock) - control_lock().unlock(); + } return result; } @@ -480,15 +473,8 @@ Automatable::automation_control (const Evoral::Parameter& id) const } void -Automatable::automation_state_changed (Evoral::Parameter const & p) -{ - AutomationStateChanged (p); /* EMIT SIGNAL */ -} - -void Automatable::clear_controls () { _control_connections.drop_connections (); ControlSet::clear_controls (); } - |