diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 577dc1ea31..1ac651308a 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -543,16 +543,19 @@ RouteUI::create_sends (Placement p) void RouteUI::set_sends_gain_from_track () { + _session.globally_set_send_gains_from_track (_route); } void RouteUI::set_sends_gain_to_zero () { + _session.globally_set_send_gains_to_zero (_route); } void RouteUI::set_sends_gain_to_unity () { + _session.globally_set_send_gains_to_unity (_route); } bool diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 03112fb022..8f70b4723e 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -741,6 +741,9 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable boost::shared_ptr master_out() const { return _master_out; } void globally_add_internal_sends (boost::shared_ptr dest, Placement p); + void globally_set_send_gains_from_track (boost::shared_ptr dest); + void globally_set_send_gains_to_zero (boost::shared_ptr dest); + void globally_set_send_gains_to_unity (boost::shared_ptr dest); void add_internal_sends (boost::shared_ptr dest, Placement p, boost::shared_ptr senders); static void set_disable_all_loaded_plugins (bool yn) { diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 4ed908dc7d..9eb090f02a 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -43,6 +43,7 @@ #include "pbd/stacktrace.h" #include "pbd/file_utils.h" +#include "ardour/amp.h" #include "ardour/analyser.h" #include "ardour/audio_buffer.h" #include "ardour/audio_diskstream.h" @@ -2166,6 +2167,57 @@ Session::add_routes (RouteList& new_routes, bool save) RouteAdded (new_routes); /* EMIT SIGNAL */ } +void +Session::globally_set_send_gains_to_zero (boost::shared_ptr dest) +{ + boost::shared_ptr r = routes.reader (); + boost::shared_ptr s; + + /* only tracks */ + + for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { + if (boost::dynamic_pointer_cast(*i)) { + if ((s = (*i)->internal_send_for (dest)) != 0) { + s->amp()->gain_control()->set_value (0.0); + } + } + } +} + +void +Session::globally_set_send_gains_to_unity (boost::shared_ptr dest) +{ + boost::shared_ptr r = routes.reader (); + boost::shared_ptr s; + + /* only tracks */ + + for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { + if (boost::dynamic_pointer_cast(*i)) { + if ((s = (*i)->internal_send_for (dest)) != 0) { + s->amp()->gain_control()->set_value (1.0); + } + } + } +} + +void +Session::globally_set_send_gains_from_track(boost::shared_ptr dest) +{ + boost::shared_ptr r = routes.reader (); + boost::shared_ptr s; + + /* only tracks */ + + for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { + if (boost::dynamic_pointer_cast(*i)) { + if ((s = (*i)->internal_send_for (dest)) != 0) { + s->amp()->gain_control()->set_value ((*i)->gain_control()->get_value()); + } + } + } +} + void Session::globally_add_internal_sends (boost::shared_ptr dest, Placement p) { @@ -2183,6 +2235,7 @@ Session::globally_add_internal_sends (boost::shared_ptr dest, Placement p add_internal_sends (dest, p, t); } + void Session::add_internal_sends (boost::shared_ptr dest, Placement p, boost::shared_ptr senders) {