diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 1c72f81ea4..e9ccea65c3 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -659,10 +659,37 @@ RouteUI::build_sends_menu () sends_menu->set_name ("ArdourContextMenu"); MenuList& items = sends_menu->items(); - items.push_back (MenuElem(_("Assign all tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PreFader))); - items.push_back (MenuElem(_("Assign all tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PostFader))); - items.push_back (MenuElem(_("Assign selected tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PreFader))); - items.push_back (MenuElem(_("Assign selected tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PostFader))); + items.push_back ( + MenuElem(_("Assign all tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PreFader, false)) + ); + + items.push_back ( + MenuElem(_("Assign all tracks and buses (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PreFader, true)) + ); + + items.push_back ( + MenuElem(_("Assign all tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PostFader, false)) + ); + + items.push_back ( + MenuElem(_("Assign all tracks and buses (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PostFader, true)) + ); + + items.push_back ( + MenuElem(_("Assign selected tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PreFader, false)) + ); + + items.push_back ( + MenuElem(_("Assign selected tracks and buses (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PreFader, true))); + + items.push_back ( + MenuElem(_("Assign selected tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PostFader, false)) + ); + + items.push_back ( + MenuElem(_("Assign selected tracks and buses (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PostFader, true)) + ); + items.push_back (MenuElem(_("Copy track/bus gains to sends"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_from_track))); items.push_back (MenuElem(_("Set sends gain to -inf"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_to_zero))); items.push_back (MenuElem(_("Set sends gain to 0dB"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_to_unity))); @@ -670,13 +697,13 @@ RouteUI::build_sends_menu () } void -RouteUI::create_sends (Placement p) +RouteUI::create_sends (Placement p, bool include_buses) { - _session->globally_add_internal_sends (_route, p); + _session->globally_add_internal_sends (_route, p, include_buses); } void -RouteUI::create_selected_sends (Placement p) +RouteUI::create_selected_sends (Placement p, bool include_buses) { boost::shared_ptr rlist (new RouteList); TrackSelection& selected_tracks (ARDOUR_UI::instance()->the_editor().get_selection().tracks); @@ -686,7 +713,7 @@ RouteUI::create_selected_sends (Placement p) RouteUI* rui; if ((rtv = dynamic_cast(*i)) != 0) { if ((rui = dynamic_cast(rtv)) != 0) { - if (boost::dynamic_pointer_cast(rui->route())) { + if (include_buses || boost::dynamic_pointer_cast(rui->route())) { rlist->push_back (rui->route()); } } diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index d2df30dad7..2d13e54110 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -131,8 +131,8 @@ class RouteUI : public virtual AxisView void set_sends_gain_from_track (); void set_sends_gain_to_zero (); void set_sends_gain_to_unity (); - void create_sends (ARDOUR::Placement); - void create_selected_sends (ARDOUR::Placement); + void create_sends (ARDOUR::Placement, bool); + void create_selected_sends (ARDOUR::Placement, bool); void solo_changed(bool, void*); void solo_changed_so_update_mute (); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 565681aa78..393c9d1356 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -602,7 +602,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi boost::shared_ptr monitor_out() const { return _monitor_out; } boost::shared_ptr master_out() const { return _master_out; } - void globally_add_internal_sends (boost::shared_ptr dest, Placement p); + void globally_add_internal_sends (boost::shared_ptr dest, Placement p, bool); 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); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 9212923f11..c22cfd261a 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -2090,16 +2090,15 @@ Session::globally_set_send_gains_from_track(boost::shared_ptr dest) } } +/** @param include_buses true to add sends to buses and tracks, false for just tracks */ void -Session::globally_add_internal_sends (boost::shared_ptr dest, Placement p) +Session::globally_add_internal_sends (boost::shared_ptr dest, Placement p, bool include_buses) { boost::shared_ptr r = routes.reader (); boost::shared_ptr t (new RouteList); - /* only send tracks */ - for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { - if (boost::dynamic_pointer_cast(*i)) { + if (include_buses || boost::dynamic_pointer_cast(*i)) { t->push_back (*i); } }