From: Len Ovens Date: Mon, 16 Apr 2018 17:48:48 +0000 (-0700) Subject: OSC group sharing should be cleared for VCAs X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=5ce341c12730c68ea6fd3cb09a2afff80a4d5b6e;p=ardour.git OSC group sharing should be cleared for VCAs --- diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc index 824881ad4f..4ab8e3c0af 100644 --- a/libs/surfaces/osc/osc_select_observer.cc +++ b/libs/surfaces/osc/osc_select_observer.cc @@ -150,6 +150,8 @@ OSCSelectObserver::refresh_strip (boost::shared_ptr new_strip session->RouteGroupPropertyChanged.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::group_sharing, this, _1), OSC::instance()); group_sharing (rt->route_group ()); + } else { + group_sharing (0); } _strip->presentation_info().PropertyChanged.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::pi_changed, this, _1), OSC::instance()); @@ -696,64 +698,62 @@ void OSCSelectObserver::group_sharing (RouteGroup *rgc) { boost::shared_ptr rt = boost::dynamic_pointer_cast (_strip); + RouteGroup *rg; if (rt) { - RouteGroup *rg = rt->route_group(); - if (rg) { - if (rg != rgc) { - return; - } - if (rg->is_gain () != _group_sharing[0] || _group_sharing[15]) { - _group_sharing[0] = rg->is_gain (); - _osc.int_message (X_("/select/group/gain"), _group_sharing[0], addr); - } - if (rg->is_relative () != _group_sharing[1] || _group_sharing[15]) { - _group_sharing[1] = rg->is_relative (); - _osc.int_message (X_("/select/group/relative"), _group_sharing[1], addr); - } - if (rg->is_mute () != _group_sharing[2] || _group_sharing[15]) { - _group_sharing[2] = rg->is_mute (); - _osc.int_message (X_("/select/group/mute"), _group_sharing[2], addr); - } - if (rg->is_solo () != _group_sharing[3] || _group_sharing[15]) { - _group_sharing[3] = rg->is_solo (); - _osc.int_message (X_("/select/group/solo"), _group_sharing[3], addr); - } - if (rg->is_recenable () != _group_sharing[4] || _group_sharing[15]) { - _group_sharing[4] = rg->is_recenable (); - _osc.int_message (X_("/select/group/recenable"), _group_sharing[4], addr); - } - if (rg->is_select () != _group_sharing[5] || _group_sharing[15]) { - _group_sharing[5] = rg->is_select (); - _osc.int_message (X_("/select/group/select"), _group_sharing[5], addr); - } - if (rg->is_route_active () != _group_sharing[6] || _group_sharing[15]) { - _group_sharing[6] = rg->is_route_active (); - _osc.int_message (X_("/select/group/active"), _group_sharing[6], addr); - } - if (rg->is_color () != _group_sharing[7] || _group_sharing[15]) { - _group_sharing[7] = rg->is_color (); - _osc.int_message (X_("/select/group/color"), _group_sharing[7], addr); - } - if (rg->is_monitoring () != _group_sharing[8] || _group_sharing[15]) { - _group_sharing[8] = rg->is_monitoring (); - _osc.int_message (X_("/select/group/monitoring"), _group_sharing[8], addr); - } - if (rg->is_active () != _group_sharing[9] || _group_sharing[15]) { - _group_sharing[9] = rg->is_active (); - _osc.int_message (X_("/select/group/enable"), _group_sharing[9], addr); - } - } else { - _osc.int_message (X_("/select/group/gain"), 0, addr); - _osc.int_message (X_("/select/group/relative"), 0, addr); - _osc.int_message (X_("/select/group/mute"), 0, addr); - _osc.int_message (X_("/select/group/solo"), 0, addr); - _osc.int_message (X_("/select/group/recenable"), 0, addr); - _osc.int_message (X_("/select/group/select"), 0, addr); - _osc.int_message (X_("/select/group/active"), 0, addr); - _osc.int_message (X_("/select/group/color"), 0, addr); - _osc.int_message (X_("/select/group/monitoring"), 0, addr); - _osc.int_message (X_("/select/group/enable"), 0, addr); + rg = rt->route_group(); + } + if (rg && rt) { + if (rg->is_gain () != _group_sharing[0] || _group_sharing[15]) { + _group_sharing[0] = rg->is_gain (); + _osc.int_message (X_("/select/group/gain"), _group_sharing[0], addr); + } + if (rg->is_relative () != _group_sharing[1] || _group_sharing[15]) { + _group_sharing[1] = rg->is_relative (); + _osc.int_message (X_("/select/group/relative"), _group_sharing[1], addr); + } + if (rg->is_mute () != _group_sharing[2] || _group_sharing[15]) { + _group_sharing[2] = rg->is_mute (); + _osc.int_message (X_("/select/group/mute"), _group_sharing[2], addr); + } + if (rg->is_solo () != _group_sharing[3] || _group_sharing[15]) { + _group_sharing[3] = rg->is_solo (); + _osc.int_message (X_("/select/group/solo"), _group_sharing[3], addr); + } + if (rg->is_recenable () != _group_sharing[4] || _group_sharing[15]) { + _group_sharing[4] = rg->is_recenable (); + _osc.int_message (X_("/select/group/recenable"), _group_sharing[4], addr); } + if (rg->is_select () != _group_sharing[5] || _group_sharing[15]) { + _group_sharing[5] = rg->is_select (); + _osc.int_message (X_("/select/group/select"), _group_sharing[5], addr); + } + if (rg->is_route_active () != _group_sharing[6] || _group_sharing[15]) { + _group_sharing[6] = rg->is_route_active (); + _osc.int_message (X_("/select/group/active"), _group_sharing[6], addr); + } + if (rg->is_color () != _group_sharing[7] || _group_sharing[15]) { + _group_sharing[7] = rg->is_color (); + _osc.int_message (X_("/select/group/color"), _group_sharing[7], addr); + } + if (rg->is_monitoring () != _group_sharing[8] || _group_sharing[15]) { + _group_sharing[8] = rg->is_monitoring (); + _osc.int_message (X_("/select/group/monitoring"), _group_sharing[8], addr); + } + if (rg->is_active () != _group_sharing[9] || _group_sharing[15]) { + _group_sharing[9] = rg->is_active (); + _osc.int_message (X_("/select/group/enable"), _group_sharing[9], addr); + } + } else { + _osc.int_message (X_("/select/group/gain"), 0, addr); + _osc.int_message (X_("/select/group/relative"), 0, addr); + _osc.int_message (X_("/select/group/mute"), 0, addr); + _osc.int_message (X_("/select/group/solo"), 0, addr); + _osc.int_message (X_("/select/group/recenable"), 0, addr); + _osc.int_message (X_("/select/group/select"), 0, addr); + _osc.int_message (X_("/select/group/active"), 0, addr); + _osc.int_message (X_("/select/group/color"), 0, addr); + _osc.int_message (X_("/select/group/monitoring"), 0, addr); + _osc.int_message (X_("/select/group/enable"), 0, addr); } _group_sharing[15] = 0; }