summaryrefslogtreecommitdiff
path: root/libs/ardour/automatable.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-08-09 22:23:23 +0000
committerCarl Hetherington <carl@carlh.net>2010-08-09 22:23:23 +0000
commit78986385e17b82a6704c8792fb21a42cd86add9a (patch)
tree54bdca03098ff7e26b536b0640e3321b4b0a042e /libs/ardour/automatable.cc
parent7c5f1b7a26df60417590340d4cfe367ed00e180a (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.cc42
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 ();
}
-