Allow choice of direct or aux busses when subgrouping route groups. Fixes #3658.
authorCarl Hetherington <carl@carlh.net>
Tue, 4 Jan 2011 02:36:29 +0000 (02:36 +0000)
committerCarl Hetherington <carl@carlh.net>
Tue, 4 Jan 2011 02:36:29 +0000 (02:36 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8428 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/group_tabs.cc
gtk2_ardour/group_tabs.h
libs/ardour/ardour/route_group.h
libs/ardour/route_group.cc

index a1aedc6c5bfadf85cd8babf951678ca6076316b0..df0ad20373117159db5f54f5956335be8b728d4c 100644 (file)
@@ -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 {
index 22ebd808cc5b0d202f07c812963197cdb863aa72..da9523d50df90375db6498d08bbba6f52ac5fae5 100644 (file)
@@ -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 *);
index 7dbdc1d8823a1de69ddc6b1bc8c6a1a69f319e26..d5e4b274e117b60ba71cee879d9e9f79628d1d02 100644 (file)
@@ -135,7 +135,7 @@ class RouteGroup : public SessionObject
                changed();
        }
 
-       void make_subgroup ();
+       void make_subgroup (bool, Placement);
        void destroy_subgroup ();
 
        boost::shared_ptr<RouteList> route_list() { return routes; }
index 629216da39e5763b4fa2ed122c4fe1386169a16d..a9e942ef3abfcf2fbffc2833c88548be0deade5d 100644 (file)
@@ -387,7 +387,7 @@ RouteGroup::audio_track_group (set<boost::shared_ptr<AudioTrack> >& 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> 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> 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);
+               }
        }
 }