#include "ardour/configuration.h"
#include "ardour/session.h"
+#include "i18n.h"
+
using namespace ARDOUR;
using namespace sigc;
using namespace std;
-RouteGroup::RouteGroup (Session& s, const string &n, Flag f)
- : _session (s), _name (n), _flags (f)
+RouteGroup::RouteGroup (Session& s, const string &n, Flag f, Property p)
+ : _session (s), _name (n), _flags (f), _properties (Property (p))
{
}
XMLNode *node = new XMLNode ("RouteGroup");
node->add_property ("name", _name);
node->add_property ("flags", enum_2_string (_flags));
+ node->add_property ("properties", enum_2_string (_properties));
return *node;
}
_flags = Flag (string_2_enum (prop->value(), _flags));
}
+ if ((prop = node.property ("properties")) != 0) {
+ _properties = Property (string_2_enum (prop->value(), _properties));
+ }
+
return 0;
}
}
}
+void
+RouteGroup::make_subgroup ()
+{
+ RouteList rl;
+ uint32_t nin = 0;
+
+ /* since we don't do MIDI Busses yet, check quickly ... */
+
+ for (list<Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
+ if ((*i)->output()->n_ports().n_midi() != 0) {
+ PBD::info << _("You cannot subgroup MIDI tracks at this time") << endmsg;
+ return;
+ }
+ }
+
+ for (list<Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
+ nin = max (nin, (*i)->output()->n_ports().n_audio());
+ }
+
+ try {
+ /* use master bus etc. to determine default nouts */
+ rl = _session.new_audio_route (nin, 2, 0, 1);
+ } catch (...) {
+ return;
+ }
+
+ subgroup_bus = rl.front();
+ subgroup_bus->set_name (_name);
+
+ boost::shared_ptr<Bundle> bundle = subgroup_bus->input()->bundle ();
+
+ for (list<Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
+ (*i)->output()->disconnect (this);
+ (*i)->output()->connect_ports_to_bundle (bundle, this);
+ }
+}
+
+void
+RouteGroup::destroy_subgroup ()
+{
+ if (!subgroup_bus) {
+ return;
+ }
+
+ for (list<Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
+ (*i)->output()->disconnect (this);
+ /* XXX find a new bundle to connect to */
+ }
+
+ _session.remove_route (subgroup_bus);
+ subgroup_bus.reset ();
+}