X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Froute_group.cc;h=7b24a88114d5eca3b4941799f8aed41019e754f2;hb=79f01bc889d6c928345214eaba9016c6396bcfca;hp=9bbbd90776207044555f74c0e9924d2f705c321e;hpb=7ba9223f9f43e1624f6d9b86534519a5f30f976c;p=ardour.git diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index 9bbbd90776..7b24a88114 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -109,6 +109,8 @@ RouteGroup::RouteGroup (Session& s, const string &n) , _rec_enable_group (new ControlGroup (RecEnableAutomation)) , _gain_group (new GainControlGroup ()) , _monitoring_group (new ControlGroup (MonitoringAutomation)) + , _rgba (0) + , _used_to_share_gain (false) { _xml_node_name = X_("RouteGroup"); @@ -185,7 +187,7 @@ RouteGroup::add (boost::shared_ptr r) boost::shared_ptr vca (group_master.lock()); if (vca) { - r->assign (vca, false); + r->assign (vca); } _session.set_dirty (); @@ -234,6 +236,22 @@ RouteGroup::remove (boost::shared_ptr r) return -1; } +void +RouteGroup::set_rgba (uint32_t color) { + _rgba = color; + + PBD::PropertyChange change; + change.add (Properties::color); + PropertyChanged (change); + + if (!is_color ()) { + return; + } + + for (RouteList::const_iterator i = routes->begin(); i != routes->end(); ++i) { + (*i)->presentation_info().PropertyChanged (Properties::color); + } +} XMLNode& RouteGroup::get_state () @@ -241,6 +259,11 @@ RouteGroup::get_state () XMLNode *node = new XMLNode ("RouteGroup"); node->set_property ("id", id()); + node->set_property ("rgba", _rgba); + node->set_property ("used-to-share-gain", _used_to_share_gain); + if (_subgroup_bus) { + node->set_property ("subgroup-bus", _subgroup_bus->id ()); + } add_properties (*node); @@ -266,6 +289,8 @@ RouteGroup::set_state (const XMLNode& node, int version) set_id (node); set_values (node); + node.get_property ("rgba", _rgba); + node.get_property ("used-to-share-gain", _used_to_share_gain); std::string routes; if (node.get_property ("routes", routes)) { @@ -283,6 +308,14 @@ RouteGroup::set_state (const XMLNode& node, int version) } } + PBD::ID subgroup_id (0); + if (node.get_property ("subgroup-bus", subgroup_id)) { + boost::shared_ptr r = _session.route_by_id (subgroup_id); + if (r) { + _subgroup_bus = r; + } + } + if (_group_master_number.val() > 0) { boost::shared_ptr vca = _session.vca_manager().vca_by_number (_group_master_number.val()); if (vca) { @@ -331,9 +364,6 @@ RouteGroup::set_gain (bool yn) if (is_gain() == yn) { return; } - if (has_control_master()) { - return; - } _gain = yn; _gain_group->set_active (yn); @@ -530,16 +560,16 @@ RouteGroup::make_subgroup (bool aux, Placement placement) return; } - subgroup_bus = rl.front(); - subgroup_bus->set_name (_name); + _subgroup_bus = rl.front(); + _subgroup_bus->set_name (_name); if (aux) { - _session.add_internal_sends (subgroup_bus, placement, routes); + _session.add_internal_sends (_subgroup_bus, placement, routes); } else { - boost::shared_ptr bundle = subgroup_bus->input()->bundle (); + boost::shared_ptr bundle = _subgroup_bus->input()->bundle (); for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) { (*i)->output()->disconnect (this); @@ -551,7 +581,7 @@ RouteGroup::make_subgroup (bool aux, Placement placement) void RouteGroup::destroy_subgroup () { - if (!subgroup_bus) { + if (!_subgroup_bus) { return; } @@ -560,14 +590,14 @@ RouteGroup::destroy_subgroup () /* XXX find a new bundle to connect to */ } - _session.remove_route (subgroup_bus); - subgroup_bus.reset (); + _session.remove_route (_subgroup_bus); + _subgroup_bus.reset (); } bool RouteGroup::has_subgroup() const { - return subgroup_bus != 0; + return _subgroup_bus != 0; } bool @@ -626,22 +656,14 @@ RouteGroup::assign_master (boost::shared_ptr master) } for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) { - (*r)->assign (master, false); - } - - bool used_to_share_gain = false; - - if (is_gain()) { - used_to_share_gain = true; + (*r)->assign (master); } group_master = master; _group_master_number = master->number(); - _gain_group->set_active (false); - if (used_to_share_gain) { - send_change (PropertyChange (Properties::group_gain)); - } + _used_to_share_gain = is_gain (); + set_gain (false); } void @@ -664,17 +686,7 @@ RouteGroup::unassign_master (boost::shared_ptr master) group_master.reset (); _group_master_number = -1; - /* this is slightly tricky: is_gain() will return whether or not - the group is supposed to be sharing gain adjustment, and now that - we've reset _group_master_number to -1, it will reflect the user's - intentions correctly. Since there was a master before, and now there - is not, we are going to reactivate gain sharing ... and then tell - the world about it. - */ - if (is_gain()) { - _gain_group->set_active (true); - send_change (PropertyChange (Properties::group_gain)); - } + set_gain (_used_to_share_gain); } bool