, _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");
boost::shared_ptr<VCA> vca (group_master.lock());
if (vca) {
- r->assign (vca, false);
+ r->assign (vca);
}
_session.set_dirty ();
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 ()
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);
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)) {
}
}
+ PBD::ID subgroup_id (0);
+ if (node.get_property ("subgroup-bus", subgroup_id)) {
+ boost::shared_ptr<Route> r = _session.route_by_id (subgroup_id);
+ if (r) {
+ _subgroup_bus = r;
+ }
+ }
+
if (_group_master_number.val() > 0) {
boost::shared_ptr<VCA> vca = _session.vca_manager().vca_by_number (_group_master_number.val());
if (vca) {
if (is_gain() == yn) {
return;
}
- if (has_control_master()) {
- return;
- }
_gain = yn;
_gain_group->set_active (yn);
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> bundle = subgroup_bus->input()->bundle ();
+ boost::shared_ptr<Bundle> bundle = _subgroup_bus->input()->bundle ();
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
(*i)->output()->disconnect (this);
void
RouteGroup::destroy_subgroup ()
{
- if (!subgroup_bus) {
+ if (!_subgroup_bus) {
return;
}
/* 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
}
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
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