summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-04-19 13:01:57 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:41 -0400
commit01aefd236a7c87fa1798334b579be28eaa832afd (patch)
tree3c5143f3cc3df0d7e12cbb70fb9c4dc87f759921 /libs
parent6de4953be8dc5cd413b405d4801f086567923965 (diff)
move SlavableAutomationControl into its own header
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/automation_control.h58
-rw-r--r--libs/ardour/ardour/gain_control.h2
-rw-r--r--libs/ardour/ardour/monitor_control.h2
-rw-r--r--libs/ardour/ardour/mute_control.h2
-rw-r--r--libs/ardour/ardour/phase_control.h2
-rw-r--r--libs/ardour/ardour/record_enable_control.h2
-rw-r--r--libs/ardour/ardour/slavable_automation_control.h112
-rw-r--r--libs/ardour/ardour/solo_control.h2
-rw-r--r--libs/ardour/ardour/solo_isolate_control.h3
-rw-r--r--libs/ardour/ardour/solo_safe_control.h2
-rw-r--r--libs/ardour/slavable_automation_control.cc2
11 files changed, 124 insertions, 65 deletions
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index 6195f90a68..ecc16cb134 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -143,64 +143,6 @@ class LIBARDOUR_API AutomationControl
void set_group (boost::shared_ptr<ControlGroup>);
};
-class SlavableAutomationControl : public AutomationControl
-{
- public:
- SlavableAutomationControl(ARDOUR::Session&,
- const Evoral::Parameter& parameter,
- const ParameterDescriptor& desc,
- boost::shared_ptr<ARDOUR::AutomationList> l=boost::shared_ptr<ARDOUR::AutomationList>(),
- const std::string& name="");
-
- double get_value () const;
-
- 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;
- double get_masters_value () const {
- Glib::Threads::RWLock::ReaderLock lm (master_lock);
- return get_masters_value_locked ();
- }
-
- std::vector<PBD::ID> masters () const;
-
- PBD::Signal0<void> MasterStatusChange;
-
- protected:
-
- 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;
- virtual void master_changed (bool from_self, GroupControlDisposition gcd);
- void master_going_away (boost::weak_ptr<AutomationControl>);
- virtual void recompute_masters_ratios (double val) { /* do nothing by default */}
- virtual double get_masters_value_locked () const;
- double get_value_locked() const;
- void actually_set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
-};
-
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/gain_control.h b/libs/ardour/ardour/gain_control.h
index 32d1ad1229..f7041fff78 100644
--- a/libs/ardour/ardour/gain_control.h
+++ b/libs/ardour/ardour/gain_control.h
@@ -27,7 +27,7 @@
#include "evoral/Parameter.hpp"
-#include "ardour/automation_control.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/libardour_visibility.h"
namespace ARDOUR {
diff --git a/libs/ardour/ardour/monitor_control.h b/libs/ardour/ardour/monitor_control.h
index 871263a0c6..587d8ca58c 100644
--- a/libs/ardour/ardour/monitor_control.h
+++ b/libs/ardour/ardour/monitor_control.h
@@ -24,7 +24,7 @@
#include <boost/shared_ptr.hpp>
#include <boost/dynamic_bitset.hpp>
-#include "ardour/automation_control.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/monitorable.h"
#include "ardour/libardour_visibility.h"
diff --git a/libs/ardour/ardour/mute_control.h b/libs/ardour/ardour/mute_control.h
index f7a7814f00..a9169d65bd 100644
--- a/libs/ardour/ardour/mute_control.h
+++ b/libs/ardour/ardour/mute_control.h
@@ -23,6 +23,8 @@
#include <boost/shared_ptr.hpp>
+#include "ardour/slavable_automation_control.h"
+
#include "ardour/libardour_visibility.h"
namespace ARDOUR {
diff --git a/libs/ardour/ardour/phase_control.h b/libs/ardour/ardour/phase_control.h
index 054ad4a5a4..0693c8ee50 100644
--- a/libs/ardour/ardour/phase_control.h
+++ b/libs/ardour/ardour/phase_control.h
@@ -24,7 +24,7 @@
#include <boost/shared_ptr.hpp>
#include <boost/dynamic_bitset.hpp>
-#include "ardour/automation_control.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/libardour_visibility.h"
namespace ARDOUR {
diff --git a/libs/ardour/ardour/record_enable_control.h b/libs/ardour/ardour/record_enable_control.h
index 0bb5edac8d..d631c500a3 100644
--- a/libs/ardour/ardour/record_enable_control.h
+++ b/libs/ardour/ardour/record_enable_control.h
@@ -24,7 +24,7 @@
#include <boost/shared_ptr.hpp>
#include <boost/dynamic_bitset.hpp>
-#include "ardour/automation_control.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/recordable.h"
#include "ardour/libardour_visibility.h"
diff --git a/libs/ardour/ardour/slavable_automation_control.h b/libs/ardour/ardour/slavable_automation_control.h
new file mode 100644
index 0000000000..1f1847fb03
--- /dev/null
+++ b/libs/ardour/ardour/slavable_automation_control.h
@@ -0,0 +1,112 @@
+/*
+ Copyright (C) 2016 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __ardour_slavable_automation_control_h__
+#define __ardour_slavable_automation_control_h__
+
+#include "ardour/automation_control.h"
+
+namespace ARDOUR {
+
+class SlavableAutomationControl : public AutomationControl
+{
+ public:
+ SlavableAutomationControl(ARDOUR::Session&,
+ const Evoral::Parameter& parameter,
+ const ParameterDescriptor& desc,
+ boost::shared_ptr<ARDOUR::AutomationList> l=boost::shared_ptr<ARDOUR::AutomationList>(),
+ const std::string& name="");
+
+ double get_value () const;
+
+ 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;
+ double get_masters_value () const {
+ Glib::Threads::RWLock::ReaderLock lm (master_lock);
+ return get_masters_value_locked ();
+ }
+
+ std::vector<PBD::ID> masters () const;
+
+ PBD::Signal0<void> MasterStatusChange;
+
+ protected:
+
+ class MasterRecord {
+ public:
+ MasterRecord (boost::shared_ptr<AutomationControl> gc, double r)
+ : _master (gc)
+ , _ratio (r)
+ {}
+
+ boost::shared_ptr<AutomationControl> master() const { return _master; }
+
+ /* for boolean/toggled controls, we store a boolean value to
+ * indicate if this master returned true/false (1.0/0.0) from
+ * ::get_value() after its most recent change.
+ */
+
+ bool yn() const { return _yn; }
+ void set_yn (bool yn) { _yn = yn; }
+
+ /* for non-boolean/non-toggled controls, we store a ratio that
+ * connects the value of the master with the value of this
+ * slave. See comments in the source for more details on how
+ * this is computed and used.
+ */
+
+ double ratio () const { return _ratio; }
+ void reset_ratio (double r) { _ratio = r; }
+
+ PBD::ScopedConnection connection;
+
+ private:
+ boost::shared_ptr<AutomationControl> _master;
+ union {
+ double _ratio;
+ bool _yn;
+ };
+ };
+
+ 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>);
+ double get_value_locked() const;
+ void actually_set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
+ void update_boolean_masters_records (boost::shared_ptr<AutomationControl>);
+ bool get_boolean_masters () const;
+
+ virtual void master_changed (bool from_self, GroupControlDisposition gcd, boost::shared_ptr<AutomationControl>);
+ virtual void recompute_masters_ratios (double val) { /* do nothing by default */}
+ virtual double get_masters_value_locked () const;
+ virtual void pre_remove_master (boost::shared_ptr<AutomationControl>) {}
+ virtual void post_add_master (boost::shared_ptr<AutomationControl>) {}
+
+
+};
+
+} // namespace ARDOUR
+
+#endif /* __ardour_slavable_automation_control_h__ */
diff --git a/libs/ardour/ardour/solo_control.h b/libs/ardour/ardour/solo_control.h
index d034456a3b..aefd6abb79 100644
--- a/libs/ardour/ardour/solo_control.h
+++ b/libs/ardour/ardour/solo_control.h
@@ -23,7 +23,7 @@
#include <boost/shared_ptr.hpp>
-#include "ardour/automation_control.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/libardour_visibility.h"
namespace ARDOUR {
diff --git a/libs/ardour/ardour/solo_isolate_control.h b/libs/ardour/ardour/solo_isolate_control.h
index cb8ea8b507..1e49469067 100644
--- a/libs/ardour/ardour/solo_isolate_control.h
+++ b/libs/ardour/ardour/solo_isolate_control.h
@@ -23,6 +23,7 @@
#include <boost/shared_ptr.hpp>
+#include "ardour/slavable_automation_control.h"
#include "ardour/libardour_visibility.h"
class XMLNode;
@@ -72,7 +73,7 @@ class LIBARDOUR_API SoloIsolateControl : public SlavableAutomationControl
XMLNode& get_state ();
protected:
- void master_changed (bool from_self, PBD::Controllable::GroupControlDisposition gcd);
+ void master_changed (bool from_self, PBD::Controllable::GroupControlDisposition gcd, boost::shared_ptr<AutomationControl>);
void actually_set_value (double, PBD::Controllable::GroupControlDisposition group_override);
private:
diff --git a/libs/ardour/ardour/solo_safe_control.h b/libs/ardour/ardour/solo_safe_control.h
index d230a9c2d9..e969959e94 100644
--- a/libs/ardour/ardour/solo_safe_control.h
+++ b/libs/ardour/ardour/solo_safe_control.h
@@ -21,6 +21,8 @@
#include <string>
+#include "ardour/slavable_automation_control.h"
+
#include "ardour/libardour_visibility.h"
class XMLNode;
diff --git a/libs/ardour/slavable_automation_control.cc b/libs/ardour/slavable_automation_control.cc
index 624fa484ca..72ddae7929 100644
--- a/libs/ardour/slavable_automation_control.cc
+++ b/libs/ardour/slavable_automation_control.cc
@@ -21,7 +21,7 @@
#include "pbd/enumwriter.h"
-#include "ardour/automation_control.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/session.h"
using namespace std;