diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc index a1aedc6c5b..df0ad20373 100644 --- a/gtk2_ardour/group_tabs.cc +++ b/gtk2_ardour/group_tabs.cc @@ -308,7 +308,9 @@ GroupTabs::get_menu (RouteGroup* g) if (g) { items.push_back (MenuElem (_("Edit..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::edit_group), g))); - items.push_back (MenuElem (_("Subgroup"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g))); + items.push_back (MenuElem (_("Subgroup using Direct Bus"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, false, PreFader))); + items.push_back (MenuElem (_("Subgroup using Aux Bus (pre-fader)"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, true, PreFader))); + items.push_back (MenuElem (_("Subgroup using Aux Bus (post-fader)"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, true, PostFader))); items.push_back (MenuElem (_("Collect"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::collect), g))); items.push_back (MenuElem (_("Remove"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::remove_group), g))); } @@ -424,9 +426,9 @@ GroupTabs::edit_group (RouteGroup* g) } void -GroupTabs::subgroup (RouteGroup* g) +GroupTabs::subgroup (RouteGroup* g, bool aux, Placement placement) { - g->make_subgroup (); + g->make_subgroup (aux, placement); } struct CollectSorter { diff --git a/gtk2_ardour/group_tabs.h b/gtk2_ardour/group_tabs.h index 22ebd808cc..da9523d50d 100644 --- a/gtk2_ardour/group_tabs.h +++ b/gtk2_ardour/group_tabs.h @@ -93,7 +93,7 @@ private: void collect (ARDOUR::RouteGroup *); void set_activation (ARDOUR::RouteGroup *, bool); void edit_group (ARDOUR::RouteGroup *); - void subgroup (ARDOUR::RouteGroup *); + void subgroup (ARDOUR::RouteGroup *, bool, ARDOUR::Placement); void activate_all (); void disable_all (); void remove_group (ARDOUR::RouteGroup *); diff --git a/libs/ardour/ardour/route_group.h b/libs/ardour/ardour/route_group.h index 7dbdc1d882..d5e4b274e1 100644 --- a/libs/ardour/ardour/route_group.h +++ b/libs/ardour/ardour/route_group.h @@ -135,7 +135,7 @@ class RouteGroup : public SessionObject changed(); } - void make_subgroup (); + void make_subgroup (bool, Placement); void destroy_subgroup (); boost::shared_ptr route_list() { return routes; } diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index 629216da39..a9e942ef3a 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -387,7 +387,7 @@ RouteGroup::audio_track_group (set >& ats) } void -RouteGroup::make_subgroup () +RouteGroup::make_subgroup (bool aux, Placement placement) { RouteList rl; uint32_t nin = 0; @@ -407,7 +407,7 @@ RouteGroup::make_subgroup () try { /* use master bus etc. to determine default nouts */ - rl = _session.new_audio_route (false, nin, 2, 0, 1); + rl = _session.new_audio_route (aux, nin, 2, 0, 1); } catch (...) { return; } @@ -415,11 +415,18 @@ RouteGroup::make_subgroup () subgroup_bus = rl.front(); subgroup_bus->set_name (_name); - boost::shared_ptr bundle = subgroup_bus->input()->bundle (); + if (aux) { - for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) { - (*i)->output()->disconnect (this); - (*i)->output()->connect_ports_to_bundle (bundle, this); + _session.add_internal_sends (subgroup_bus, placement, routes); + + } else { + + boost::shared_ptr bundle = subgroup_bus->input()->bundle (); + + for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) { + (*i)->output()->disconnect (this); + (*i)->output()->connect_ports_to_bundle (bundle, this); + } } }