summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/amp.cc6
-rw-r--r--libs/ardour/ardour/amp.h2
-rw-r--r--libs/ardour/ardour/automation_control.h8
-rw-r--r--libs/ardour/ardour/midi_track.h2
-rw-r--r--libs/ardour/ardour/monitor_processor.h2
-rw-r--r--libs/ardour/ardour/pan_controllable.h6
-rw-r--r--libs/ardour/ardour/plugin_insert.h5
-rw-r--r--libs/ardour/ardour/proxy_controllable.h6
-rw-r--r--libs/ardour/ardour/route.h59
-rw-r--r--libs/ardour/ardour/track.h2
-rw-r--r--libs/ardour/automation_control.cc4
-rw-r--r--libs/ardour/midi_track.cc6
-rw-r--r--libs/ardour/monitor_processor.cc2
-rw-r--r--libs/ardour/pan_controllable.cc6
-rw-r--r--libs/ardour/pannable.cc10
-rw-r--r--libs/ardour/plugin_insert.cc12
-rw-r--r--libs/ardour/route.cc129
-rw-r--r--libs/ardour/session.cc6
-rw-r--r--libs/ardour/track.cc2
19 files changed, 152 insertions, 123 deletions
diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc
index 955dd13ccc..924a77e666 100644
--- a/libs/ardour/amp.cc
+++ b/libs/ardour/amp.cc
@@ -368,7 +368,7 @@ Amp::inc_gain (gain_t factor, void *src)
void
Amp::set_gain (gain_t val, void *)
{
- _gain_control->set_value (val);
+ _gain_control->set_value (val, Controllable::NoGroup);
}
XMLNode&
@@ -396,7 +396,7 @@ Amp::set_state (const XMLNode& node, int version)
}
void
-Amp::GainControl::set_value (double val)
+Amp::GainControl::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */)
{
if (writable()) {
set_value_unchecked (val);
@@ -406,7 +406,7 @@ Amp::GainControl::set_value (double val)
void
Amp::GainControl::set_value_unchecked (double val)
{
- AutomationControl::set_value (std::max (std::min (val, (double)_desc.upper), (double)_desc.lower));
+ AutomationControl::set_value (std::max (std::min (val, (double)_desc.upper), (double)_desc.lower), Controllable::NoGroup);
_amp->session().set_dirty ();
}
diff --git a/libs/ardour/ardour/amp.h b/libs/ardour/ardour/amp.h
index e8445c4853..c92edcc5fc 100644
--- a/libs/ardour/ardour/amp.h
+++ b/libs/ardour/ardour/amp.h
@@ -92,7 +92,7 @@ public:
range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;
}
- void set_value (double val);
+ void set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
void set_value_unchecked (double);
double internal_to_interface (double) const;
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index b26d781e2f..0d065686e2 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -85,9 +85,12 @@ public:
* 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;
-
+ /* 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 value, PBD::Controllable::GroupControlDisposition group_override);
/* automation related value setting */
virtual bool writable () const;
/* Call to ::set_value() with no test for writable() because
@@ -110,7 +113,6 @@ public:
void commit_transaction (bool did_write);
protected:
-
ARDOUR::Session& _session;
const ParameterDescriptor _desc;
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index 80bb743b10..ba418082f8 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -89,7 +89,7 @@ public:
, _route (route)
{}
- void set_value (double val);
+ void set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
void set_value_unchecked (double);
bool writable() const { return true; }
diff --git a/libs/ardour/ardour/monitor_processor.h b/libs/ardour/ardour/monitor_processor.h
index c7d73dca00..ffee1fbbd2 100644
--- a/libs/ardour/ardour/monitor_processor.h
+++ b/libs/ardour/ardour/monitor_processor.h
@@ -54,7 +54,7 @@ public:
/* Controllable API */
- void set_value (double v) {
+ void set_value (double v, PBD::Controllable::GroupControlDisposition group_override) {
T newval = (T) v;
if (newval != _value) {
_value = std::max (_lower, std::min (_upper, newval));
diff --git a/libs/ardour/ardour/pan_controllable.h b/libs/ardour/ardour/pan_controllable.h
index ff00d8119f..77acbee04f 100644
--- a/libs/ardour/ardour/pan_controllable.h
+++ b/libs/ardour/ardour/pan_controllable.h
@@ -36,7 +36,7 @@ class Pannable;
class LIBARDOUR_API PanControllable : public AutomationControl
{
-public:
+ public:
PanControllable (Session& s, std::string name, Pannable* o, Evoral::Parameter param)
: AutomationControl (s,
param,
@@ -47,10 +47,10 @@ public:
{}
double lower () const;
- void set_value (double);
+ void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
void set_value_unchecked (double);
-private:
+ private:
Pannable* owner;
};
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index 0873825c02..6b434bef7f 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -95,7 +95,7 @@ class LIBARDOUR_API PluginInsert : public Processor
const ParameterDescriptor& desc,
boost::shared_ptr<AutomationList> list=boost::shared_ptr<AutomationList>());
- void set_value (double val);
+ void set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
void set_value_unchecked (double);
double get_value (void) const;
void catch_up_with_external_value (double val);
@@ -113,8 +113,7 @@ class LIBARDOUR_API PluginInsert : public Processor
const ParameterDescriptor& desc,
boost::shared_ptr<AutomationList> list=boost::shared_ptr<AutomationList>());
- void set_value (const Variant& val);
- void set_value (double val);
+ void set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
void set_value_unchecked (double);
double get_value (void) const;
XMLNode& get_state();
diff --git a/libs/ardour/ardour/proxy_controllable.h b/libs/ardour/ardour/proxy_controllable.h
index b2f230ec87..c60f5f1b74 100644
--- a/libs/ardour/ardour/proxy_controllable.h
+++ b/libs/ardour/ardour/proxy_controllable.h
@@ -31,7 +31,7 @@ namespace ARDOUR {
*/
class LIBARDOUR_API ProxyControllable : public PBD::Controllable {
-public:
+ public:
ProxyControllable (const std::string& name, PBD::Controllable::Flag flags,
boost::function1<bool,double> setter,
boost::function0<double> getter)
@@ -40,7 +40,7 @@ public:
, _getter (getter)
{}
- void set_value (double v) { if (_setter (v)) { Changed(); /* EMIT SIGNAL */ } }
+ void set_value (double v, PBD::Controllable::GroupControlDisposition /*group_override*/) { if (_setter (v)) { Changed(); /* EMIT SIGNAL */ } }
double get_value () const { return _getter (); }
double internal_to_user (double i) const { return accurate_coefficient_to_dB (i);}
@@ -51,7 +51,7 @@ public:
return std::string(theBuf);
}
-private:
+ private:
boost::function1<bool,double> _setter;
boost::function0<double> _getter;
};
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 0ef063b29c..2086f32119 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -383,23 +383,44 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
/* Controls (not all directly owned by the Route */
+ class RouteAutomationControl : public AutomationControl {
+ public:
+ RouteAutomationControl (const std::string& name,
+ AutomationType atype,
+ boost::shared_ptr<AutomationList> alist,
+ boost::shared_ptr<Route> route);
+
+ void set_value (double val, PBD::Controllable::GroupControlDisposition group_override) {
+ boost::shared_ptr<Route> r = _route.lock();
+ if (r) {
+ r->set_control (*this, val, group_override);
+ }
+ }
+
+ protected:
+ friend class Route;
+
+ void route_set_value (double val) {
+ AutomationControl::set_value (val, Controllable::NoGroup);
+ }
+
+ boost::weak_ptr<Route> _route;
+ };
+
boost::shared_ptr<AutomationControl> get_control (const Evoral::Parameter& param);
- class SoloControllable : public AutomationControl {
+ class SoloControllable : public RouteAutomationControl {
public:
SoloControllable (std::string name, boost::shared_ptr<Route>);
- void set_value (double);
+ void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
void set_value_unchecked (double);
double get_value () const;
-
- private:
- boost::weak_ptr<Route> _route;
};
- struct MuteControllable : public AutomationControl {
+ struct MuteControllable : public RouteAutomationControl {
public:
MuteControllable (std::string name, boost::shared_ptr<Route>);
- void set_value (double);
+ void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
void set_value_unchecked (double);
double get_value () const;
@@ -410,27 +431,18 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
boost::weak_ptr<Route> _route;
};
- class LIBARDOUR_API PhaseControllable : public AutomationControl {
+ class LIBARDOUR_API PhaseControllable : public RouteAutomationControl {
public:
PhaseControllable (std::string name, boost::shared_ptr<Route>);
- void set_value (double);
+ void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
void set_channel (uint32_t);
double get_value () const;
uint32_t channel() const;
-
private:
- boost::weak_ptr<Route> _route;
uint32_t _current_phase;
};
- class LIBARDOUR_API GroupGainControllable : public AutomationControl {
- public:
- GroupGainControllable (std::string name, boost::shared_ptr<Route>);
- void set_value (double);
- double get_value () const;
- private:
- boost::weak_ptr<Route> _route;
- };
+ void set_control (RouteAutomationControl&, double val, PBD::Controllable::GroupControlDisposition group_override);
boost::shared_ptr<SoloControllable> solo_control() const {
return _solo_control;
@@ -448,10 +460,6 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
return _phase_control;
}
- boost::shared_ptr<GroupGainControllable> group_gain_control() const {
- return _group_gain_control;
- }
-
/* Route doesn't own these items, but sub-objects that it does own have them
and to make UI code a bit simpler, we provide direct access to them
here.
@@ -544,7 +552,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
bool has_external_redirects() const;
/* can only be executed by a route for which is_monitor() is true
- (i.e. the monitor out)
+ (i.e. the monitor out)
*/
void monitor_run (framepos_t start_frame, framepos_t end_frame,
pframes_t nframes, int declick);
@@ -635,7 +643,6 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
boost::shared_ptr<MuteControllable> _mute_control;
boost::shared_ptr<MuteMaster> _mute_master;
boost::shared_ptr<PhaseControllable> _phase_control;
- boost::shared_ptr<GroupGainControllable> _group_gain_control;
virtual void act_on_mute () {}
@@ -679,7 +686,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
int set_state_2X (const XMLNode&, int);
void set_processor_state_2X (XMLNodeList const &, int);
- uint32_t _order_key;
+ uint32_t _order_key;
bool _has_order_key;
uint32_t _remote_control_id;
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index fa7b1f30bb..5bf887f517 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -206,7 +206,7 @@ class LIBARDOUR_API Track : public Route, public PublicDiskstream
struct RecEnableControl : public AutomationControl {
RecEnableControl (boost::shared_ptr<Track> t);
- void set_value (double);
+ void set_value (double, PBD::Controllable::GroupControlDisposition);
void set_value_unchecked (double);
double get_value (void) const;
diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc
index 1f507b7015..583f38807d 100644
--- a/libs/ardour/automation_control.cc
+++ b/libs/ardour/automation_control.cc
@@ -72,7 +72,7 @@ AutomationControl::get_value() const
* @param value `user' value
*/
void
-AutomationControl::set_value (double value)
+AutomationControl::set_value (double value, PBD::Controllable::GroupControlDisposition /* group_override */)
{
bool to_list = _list && ((AutomationList*)_list.get())->automation_write();
@@ -135,7 +135,7 @@ AutomationControl::start_touch(double when)
if (alist()->automation_state() == Touch) {
/* subtle. aligns the user value with the playback */
- set_value (get_value ());
+ set_value (get_value (), Controllable::NoGroup);
alist()->start_touch (when);
if (!_desc.toggled) {
AutomationWatch::instance().add_automation_watch (shared_from_this());
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 03ba42b6af..69d10c44e0 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -543,7 +543,7 @@ MidiTrack::non_realtime_locate (framepos_t pos)
(rcontrol = region->control(tcontrol->parameter()))) {
const Evoral::Beats pos_beats = bfc.from(pos - origin);
if (rcontrol->list()->size() > 0) {
- tcontrol->set_value(rcontrol->list()->eval(pos_beats.to_double()));
+ tcontrol->set_value(rcontrol->list()->eval(pos_beats.to_double()), Controllable::NoGroup);
}
}
}
@@ -725,7 +725,7 @@ MidiTrack::set_parameter_automation_state (Evoral::Parameter param, AutoState st
}
void
-MidiTrack::MidiControl::set_value(double val)
+MidiTrack::MidiControl::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */)
{
if (writable()) {
set_value_unchecked (val);
@@ -790,7 +790,7 @@ MidiTrack::MidiControl::set_value_unchecked(double val)
_route->write_immediate_event(size, ev);
}
- AutomationControl::set_value(val);
+ AutomationControl::set_value(val, Controllable::NoGroup);
}
void
diff --git a/libs/ardour/monitor_processor.cc b/libs/ardour/monitor_processor.cc
index 92beed547c..4264ee7793 100644
--- a/libs/ardour/monitor_processor.cc
+++ b/libs/ardour/monitor_processor.cc
@@ -37,7 +37,7 @@ using namespace std;
/* specialize for bool because of set_value() semantics */
namespace ARDOUR {
- template<> void MPControl<bool>::set_value (double v) {
+ template<> void MPControl<bool>::set_value (double v, PBD::Controllable::GroupControlDisposition /*group_override*/) {
bool newval = fabs (v) >= 0.5;
if (newval != _value) {
_value = newval;
diff --git a/libs/ardour/pan_controllable.cc b/libs/ardour/pan_controllable.cc
index 71c8a9f62f..faf04cc8d7 100644
--- a/libs/ardour/pan_controllable.cc
+++ b/libs/ardour/pan_controllable.cc
@@ -35,7 +35,7 @@ PanControllable::lower () const
}
void
-PanControllable::set_value (double v)
+PanControllable::set_value (double v, PBD::Controllable::GroupControlDisposition /* group_override */)
{
if (writable()) {
set_value_unchecked (v);
@@ -49,7 +49,7 @@ PanControllable::set_value_unchecked (double v)
if (!p) {
/* no panner: just do it */
- AutomationControl::set_value (v);
+ AutomationControl::set_value (v, Controllable::NoGroup);
return;
}
@@ -70,7 +70,7 @@ PanControllable::set_value_unchecked (double v)
}
if (can_set) {
- AutomationControl::set_value (v);
+ AutomationControl::set_value (v, Controllable::NoGroup);
}
}
diff --git a/libs/ardour/pannable.cc b/libs/ardour/pannable.cc
index 247397d415..f589024435 100644
--- a/libs/ardour/pannable.cc
+++ b/libs/ardour/pannable.cc
@@ -242,27 +242,27 @@ Pannable::set_state (const XMLNode& root, int version)
if ((*niter)->name() == X_("azimuth")) {
prop = (*niter)->property (X_("value"));
if (prop) {
- pan_azimuth_control->set_value (atof (prop->value()));
+ pan_azimuth_control->set_value (atof (prop->value()), Controllable::NoGroup);
}
} else if ((*niter)->name() == X_("width")) {
prop = (*niter)->property (X_("value"));
if (prop) {
- pan_width_control->set_value (atof (prop->value()));
+ pan_width_control->set_value (atof (prop->value()), Controllable::NoGroup);
}
} else if ((*niter)->name() == X_("elevation")) {
prop = (*niter)->property (X_("value"));
if (prop) {
- pan_elevation_control->set_value (atof (prop->value()));
+ pan_elevation_control->set_value (atof (prop->value()), Controllable::NoGroup);
}
} else if ((*niter)->name() == X_("frontback")) {
prop = (*niter)->property (X_("value"));
if (prop) {
- pan_frontback_control->set_value (atof (prop->value()));
+ pan_frontback_control->set_value (atof (prop->value()), Controllable::NoGroup);
}
} else if ((*niter)->name() == X_("lfe")) {
prop = (*niter)->property (X_("value"));
if (prop) {
- pan_lfe_control->set_value (atof (prop->value()));
+ pan_lfe_control->set_value (atof (prop->value()), Controllable::NoGroup);
}
}
}
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 827e6d19f4..77a223880e 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -660,7 +660,7 @@ PluginInsert::reset_parameters_to_default ()
continue;
}
- ac->set_value (dflt);
+ ac->set_value (dflt, Controllable::NoGroup);
}
return all;
}
@@ -1337,7 +1337,7 @@ PluginInsert::PluginControl::PluginControl (PluginInsert* p,
/** @param val `user' value */
void
-PluginInsert::PluginControl::set_value (double user_val)
+PluginInsert::PluginControl::set_value (double user_val, PBD::Controllable::GroupControlDisposition /* group_override */)
{
if (writable()) {
set_value_unchecked (user_val);
@@ -1358,13 +1358,13 @@ PluginInsert::PluginControl::set_value_unchecked (double user_val)
iasp->set_parameter (_list->parameter().id(), user_val);
}
- AutomationControl::set_value (user_val);
+ AutomationControl::set_value (user_val, Controllable::NoGroup);
}
void
PluginInsert::PluginControl::catch_up_with_external_value (double user_val)
{
- AutomationControl::set_value (user_val);
+ AutomationControl::set_value (user_val, Controllable::NoGroup);
}
XMLNode&
@@ -1410,7 +1410,7 @@ PluginInsert::PluginPropertyControl::PluginPropertyControl (PluginInsert*
}
void
-PluginInsert::PluginPropertyControl::set_value (double user_val)
+PluginInsert::PluginPropertyControl::set_value (double user_val, PBD::Controllable::GroupControlDisposition /* group_override*/)
{
if (writable()) {
set_value_unchecked (user_val);
@@ -1434,7 +1434,7 @@ PluginInsert::PluginPropertyControl::set_value_unchecked (double user_val)
}
_value = value;
- AutomationControl::set_value(user_val);
+ AutomationControl::set_value (user_val, Controllable::NoGroup);
}
XMLNode&
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index fef1ea14a3..5abe96b263 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -178,11 +178,6 @@ Route::init ()
_amp->set_display_name ("Monitor");
}
- // amp should exist before amp controls
- _group_gain_control.reset (new GroupGainControllable (X_("groupgain"), shared_from_this ()));
- _group_gain_control->set_flags (Controllable::Flag (_group_gain_control->flags() | Controllable::GainLike));
- add_control (_group_gain_control);
-
/* and input trim */
_trim.reset (new Amp (_session, "trim"));
_trim->set_display_to_user (false);
@@ -2804,7 +2799,7 @@ Route::set_state_2X (const XMLNode& node, int version)
gain_t val;
if (sscanf (prop->value().c_str(), "%f", &val) == 1) {
- _amp->gain_control()->set_value (val);
+ _amp->gain_control()->set_value (val, Controllable::NoGroup);
}
}
@@ -3885,20 +3880,84 @@ Route::set_latency_compensation (framecnt_t longest_session_latency)
}
}
-Route::SoloControllable::SoloControllable (std::string name, boost::shared_ptr<Route> r)
- : AutomationControl (r->session(),
- Evoral::Parameter (SoloAutomation),
- ParameterDescriptor(Evoral::Parameter (SoloAutomation)),
- boost::shared_ptr<AutomationList>(), name)
+void
+Route::set_control (RouteAutomationControl& control, double val, PBD::Controllable::GroupControlDisposition /*group_override*/)
+{
+ boost::shared_ptr<RouteList> rl;
+
+ switch (control.parameter().type()) {
+ case GainAutomation:
+ /* route must mediate group control */
+ set_gain (val, this); /* any "src" argument will do other than our route group */
+ return;
+ break;
+
+ case RecEnableAutomation:
+ /* session must mediate group control */
+ rl.reset (new RouteList);
+ rl->push_back (shared_from_this());
+ _session.set_record_enabled (rl, val >= 0.5 ? true : false);
+ return;
+ break;
+
+ case SoloAutomation:
+ /* session must mediate group control */
+ rl.reset (new RouteList);
+ rl->push_back (shared_from_this());
+ if (Config->get_solo_control_is_listen_control()) {
+ _session.set_listen (rl, val >= 0.5 ? true : false);
+ } else {
+ _session.set_solo (rl, val >= 0.5 ? true : false);
+ }
+
+ return;
+ break;
+
+ case MuteAutomation:
+ /* session must mediate group control */
+ rl.reset (new RouteList);
+ rl->push_back (shared_from_this());
+ _session.set_mute (rl, !muted());
+ return;
+ break;
+
+ case PanAzimuthAutomation:
+ case PanElevationAutomation:
+ case PanWidthAutomation:
+ case PanFrontBackAutomation:
+ case PanLFEAutomation:
+ break;
+
+ default:
+ /* Not a route automation control */
+ return;
+ }
+
+ control.route_set_value (val);
+}
+
+
+Route::RouteAutomationControl::RouteAutomationControl (const std::string& name,
+ AutomationType atype,
+ boost::shared_ptr<AutomationList> alist,
+ boost::shared_ptr<Route> r)
+ : AutomationControl (r->session(), Evoral::Parameter (atype),
+ ParameterDescriptor (Evoral::Parameter (atype)),
+ alist, name)
, _route (r)
{
+}
+
+Route::SoloControllable::SoloControllable (std::string name, boost::shared_ptr<Route> r)
+ : RouteAutomationControl (name, SoloAutomation, boost::shared_ptr<AutomationList>(), r)
+{
boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(SoloAutomation)));
gl->set_interpolation(Evoral::ControlList::Discrete);
set_list (gl);
}
void
-Route::SoloControllable::set_value (double val)
+Route::SoloControllable::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */)
{
if (writable()) {
set_value_unchecked (val);
@@ -3942,11 +4001,7 @@ Route::SoloControllable::get_value () const
}
Route::MuteControllable::MuteControllable (std::string name, boost::shared_ptr<Route> r)
- : AutomationControl (r->session(),
- Evoral::Parameter (MuteAutomation),
- ParameterDescriptor (Evoral::Parameter (MuteAutomation)),
- boost::shared_ptr<AutomationList>(),
- name)
+ : RouteAutomationControl (name, MuteAutomation, boost::shared_ptr<AutomationList>(), r)
, _route (r)
{
boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(MuteAutomation)));
@@ -3979,7 +4034,7 @@ Route::MuteControllable::set_superficial_value(bool muted)
}
void
-Route::MuteControllable::set_value (double val)
+Route::MuteControllable::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */)
{
if (writable()) {
set_value_unchecked (val);
@@ -4022,42 +4077,8 @@ Route::MuteControllable::get_value () const
return (r && r->muted()) ? GAIN_COEFF_UNITY : GAIN_COEFF_ZERO;
}
-Route::GroupGainControllable::GroupGainControllable (std::string name, boost::shared_ptr<Route> r)
- : AutomationControl (r->session(),
- Evoral::Parameter (GainAutomation),
- ParameterDescriptor (Evoral::Parameter (GainAutomation)),
- boost::shared_ptr<AutomationList>(),
- name)
- , _route (r)
-{
- boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(GainAutomation)));
- gl->set_interpolation(Evoral::ControlList::Discrete);
- set_list (gl);
-}
-
-void
-Route::GroupGainControllable::set_value (double val)
-{
- boost::shared_ptr<Route> r = _route.lock ();
- // I am not sure why I need the * .5 to make this work
- float normalized_position = r->gain_control()->interface_to_internal (val * 0.5);
- r->set_gain ((gain_t)normalized_position, this);
-}
-
-double
-Route::GroupGainControllable::get_value () const
-{
- boost::shared_ptr<Route> r = _route.lock ();
- return 2.0 * r->gain_control()->internal_to_interface (r->gain_control()->get_value ());
-}
-
Route::PhaseControllable::PhaseControllable (std::string name, boost::shared_ptr<Route> r)
- : AutomationControl (r->session(),
- Evoral::Parameter (PhaseAutomation),
- ParameterDescriptor (Evoral::Parameter (PhaseAutomation)),
- boost::shared_ptr<AutomationList>(),
- name)
- , _route (r)
+ : RouteAutomationControl (name, PhaseAutomation, boost::shared_ptr<AutomationList>(), r)
{
boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(PhaseAutomation)));
gl->set_interpolation(Evoral::ControlList::Discrete);
@@ -4065,7 +4086,7 @@ Route::PhaseControllable::PhaseControllable (std::string name, boost::shared_ptr
}
void
-Route::PhaseControllable::set_value (double v)
+Route::PhaseControllable::set_value (double v, PBD::Controllable::GroupControlDisposition /* group_override */)
{
boost::shared_ptr<Route> r = _route.lock ();
if (r->phase_invert().size()) {
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 1c7410002d..2e93d5d167 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -3335,7 +3335,7 @@ Session::globally_set_send_gains_to_zero (boost::shared_ptr<Route> dest)
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
if ((s = (*i)->internal_send_for (dest)) != 0) {
- s->amp()->gain_control()->set_value (GAIN_COEFF_ZERO);
+ s->amp()->gain_control()->set_value (GAIN_COEFF_ZERO, Controllable::NoGroup);
}
}
}
@@ -3348,7 +3348,7 @@ Session::globally_set_send_gains_to_unity (boost::shared_ptr<Route> dest)
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
if ((s = (*i)->internal_send_for (dest)) != 0) {
- s->amp()->gain_control()->set_value (GAIN_COEFF_UNITY);
+ s->amp()->gain_control()->set_value (GAIN_COEFF_UNITY, Controllable::NoGroup);
}
}
}
@@ -3361,7 +3361,7 @@ Session::globally_set_send_gains_from_track(boost::shared_ptr<Route> dest)
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
if ((s = (*i)->internal_send_for (dest)) != 0) {
- s->amp()->gain_control()->set_value ((*i)->gain_control()->get_value());
+ s->amp()->gain_control()->set_value ((*i)->gain_control()->get_value(), Controllable::NoGroup);
}
}
}
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index c4c82808bd..21256b09ce 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -190,7 +190,7 @@ Track::RecEnableControl::RecEnableControl (boost::shared_ptr<Track> t)
}
void
-Track::RecEnableControl::set_value (double val)
+Track::RecEnableControl::set_value (double val, Controllable::GroupControlDisposition /* group_override */)
{
if (writable()) {
set_value_unchecked (val);