summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-10-21 22:31:30 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-10-21 22:31:35 -0400
commit8d3a8ca9136c3fb8a8bd24dd5d99c8e2e76699bd (patch)
tree86e9cb3829a6a49647c57ae6a9a2d0b15c665a38 /libs/ardour/ardour
parent6ca3a1593e1467e057637e5ba863ca613e576eb8 (diff)
Add AutomationControl::set_value_unchecked() and AutomationControl::writable() and use them.
Classes derived from AutomationControl now check ::writable() in their ::set_value() methods to ensure that they do not attempt to overwrite data sent to them while automation playback is underway.
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/amp.h1
-rw-r--r--libs/ardour/ardour/automation_control.h12
-rw-r--r--libs/ardour/ardour/midi_track.h2
-rw-r--r--libs/ardour/ardour/pan_controllable.h1
-rw-r--r--libs/ardour/ardour/plugin_insert.h2
-rw-r--r--libs/ardour/ardour/route.h2
-rw-r--r--libs/ardour/ardour/track.h1
7 files changed, 21 insertions, 0 deletions
diff --git a/libs/ardour/ardour/amp.h b/libs/ardour/ardour/amp.h
index 62f273e477..7cde853155 100644
--- a/libs/ardour/ardour/amp.h
+++ b/libs/ardour/ardour/amp.h
@@ -91,6 +91,7 @@ public:
}
void set_value (double val);
+ void set_value_unchecked (double);
double internal_to_interface (double) const;
double interface_to_internal (double) const;
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index c634e3474a..9190b71677 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -81,9 +81,21 @@ public:
void start_touch(double when);
void stop_touch(bool mark, double when);
+ /* inherited from PBD::Controllable.
+ * Derived classes MUST call ::writable() to verify
+ * that writing to the parameter is legal at that time.
+ */
void set_value (double);
double get_value () const;
+ /* automation related value setting */
+ virtual bool writable () const;
+ /* Call to ::set_value() with no test for writable() because
+ * this is only used by automation playback. We would like
+ * to make it pure virtual
+ */
+ virtual void set_value_unchecked (double val) {}
+
double lower() const { return _desc.lower; }
double upper() const { return _desc.upper; }
double normal() const { return _desc.normal; }
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index c48f384ce9..80bb743b10 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -90,6 +90,8 @@ public:
{}
void set_value (double val);
+ void set_value_unchecked (double);
+ bool writable() const { return true; }
MidiTrack* _route;
};
diff --git a/libs/ardour/ardour/pan_controllable.h b/libs/ardour/ardour/pan_controllable.h
index 63ee9d3b8c..ff00d8119f 100644
--- a/libs/ardour/ardour/pan_controllable.h
+++ b/libs/ardour/ardour/pan_controllable.h
@@ -48,6 +48,7 @@ public:
double lower () const;
void set_value (double);
+ void set_value_unchecked (double);
private:
Pannable* owner;
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index d4d9adb54d..a37c9cae68 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -95,6 +95,7 @@ class LIBARDOUR_API PluginInsert : public Processor
boost::shared_ptr<AutomationList> list=boost::shared_ptr<AutomationList>());
void set_value (double val);
+ void set_value_unchecked (double);
double get_value (void) const;
void catch_up_with_external_value (double val);
XMLNode& get_state();
@@ -113,6 +114,7 @@ class LIBARDOUR_API PluginInsert : public Processor
void set_value (const Variant& val);
void set_value (double val);
+ void set_value_unchecked (double);
double get_value (void) const;
XMLNode& get_state();
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 001accb2e3..da4f0f809e 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -389,6 +389,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
public:
SoloControllable (std::string name, boost::shared_ptr<Route>);
void set_value (double);
+ void set_value_unchecked (double);
double get_value () const;
private:
@@ -399,6 +400,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
public:
MuteControllable (std::string name, boost::shared_ptr<Route>);
void set_value (double);
+ void set_value_unchecked (double);
double get_value () const;
/* Pretend to change value, but do not affect actual route mute. */
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index 31ae261ea7..fa7b1f30bb 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -207,6 +207,7 @@ class LIBARDOUR_API Track : public Route, public PublicDiskstream
RecEnableControl (boost::shared_ptr<Track> t);
void set_value (double);
+ void set_value_unchecked (double);
double get_value (void) const;
boost::weak_ptr<Track> track;