summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/automation_control.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-03-08 23:29:17 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:40 -0400
commitc660703f95a269a7f312e84564345f8961cb7e75 (patch)
treef09c8dc32e0afc1ed0fc2715d82697f2a82c06c4 /libs/ardour/ardour/automation_control.h
parent74f8a812765ba197173489407e4d30b0b4f94d66 (diff)
redesign control slave/master system, move code from GainControl to AutomationControl
Diffstat (limited to 'libs/ardour/ardour/automation_control.h')
-rw-r--r--libs/ardour/ardour/automation_control.h46
1 files changed, 45 insertions, 1 deletions
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index 39fdb11397..de476288f0 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -21,10 +21,16 @@
#ifndef __ardour_automation_control_h__
#define __ardour_automation_control_h__
+#include <map>
+
+#include <glibmm/threads.h>
+
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include "pbd/controllable.h"
+
+#include "evoral/types.hpp"
#include "evoral/Control.hpp"
#include "ardour/libardour_visibility.h"
@@ -111,10 +117,48 @@ public:
const ARDOUR::Session& session() const { return _session; }
void commit_transaction (bool did_write);
-protected:
+ void add_master (boost::shared_ptr<AutomationControl>);
+ void remove_master (boost::shared_ptr<AutomationControl>);
+ void clear_masters ();
+ bool slaved_to (boost::shared_ptr<AutomationControl>) const;
+ bool slaved () const;
+ std::vector<PBD::ID> masters () const;
+
+ PBD::Signal0<void> MasterStatusChange;
+
+ protected:
ARDOUR::Session& _session;
const ParameterDescriptor _desc;
+
+
+ class MasterRecord {
+ public:
+ MasterRecord (boost::shared_ptr<AutomationControl> gc, double r)
+ : _master (gc)
+ , _ratio (r)
+ {}
+
+ boost::shared_ptr<AutomationControl> master() const { return _master; }
+ double ratio () const { return _ratio; }
+ void reset_ratio (double r) { _ratio = r; }
+
+ PBD::ScopedConnection connection;
+
+ private:
+ boost::shared_ptr<AutomationControl> _master;
+ double _ratio;
+
+ };
+
+ mutable Glib::Threads::RWLock master_lock;
+ typedef std::map<PBD::ID,MasterRecord> Masters;
+ Masters _masters;
+ PBD::ScopedConnectionList masters_connections;
+
+ void master_going_away (boost::weak_ptr<AutomationControl>);
+ virtual void recompute_masters_ratios (double val) { /* do nothing by default */}
+ double get_value_locked() const;
};