From 74c4e4a6d8126ae1342e99377a3e9123858685c5 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sat, 10 Mar 2018 13:58:31 -0800 Subject: [PATCH] OSC: group commands should feedback all off if no group --- libs/surfaces/osc/osc.cc | 110 ++++++++++++++++------- libs/surfaces/osc/osc_select_observer.cc | 6 ++ 2 files changed, 82 insertions(+), 34 deletions(-) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 6e38b88344..1d86bbcd32 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -2559,7 +2559,6 @@ OSC::parse_sel_group (const char *path, const char* types, lo_arg **argv, int ar RouteGroup *rg = rt->route_group(); if (!rg) { PBD::warning << "OSC: This strip is not part of a group." << endmsg; - return ret; } float value = 0; if (argc == 1) { @@ -2569,13 +2568,10 @@ OSC::parse_sel_group (const char *path, const char* types, lo_arg **argv, int ar value = (uint32_t) argv[0]->i; } } - if (!strncmp (path, X_("/select/group/enable"), 20)) { - if (argc == 1) { - rg->set_active (value, this); - ret = 0; + if (!strncmp (path, X_("/select/group/only"), 18)) { + if (!rg) { + return ret; } - } - else if (!strncmp (path, X_("/select/group/only"), 18)) { if ((argc == 1 && value) || !argc) { // fill sur->strips with routes from this group and hit bank1 sur->temp_strips.clear(); @@ -2593,58 +2589,104 @@ OSC::parse_sel_group (const char *path, const char* types, lo_arg **argv, int ar ret = 0; } } + else if (!strncmp (path, X_("/select/group/enable"), 20)) { + if (rg) { + if (argc == 1) { + rg->set_active (value, this); + ret = 0; + } + } else { + int_message (X_("/select/group/enable"), 0, get_address (msg)); + } + } else if (strcmp (path, X_("/select/group/gain")) == 0) { - if (argc == 1) { - rg->set_gain ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_gain ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/gain"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/relative")) == 0) { - if (argc == 1) { - rg->set_relative ((bool) value, this); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_relative ((bool) value, this); + ret = 0; + } + } else { + int_message (X_("/select/group/relative"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/mute")) == 0) { - if (argc == 1) { - rg->set_mute ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_mute ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/mute"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/solo")) == 0) { - if (argc == 1) { - rg->set_solo ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_solo ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/solo"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/recenable")) == 0) { - if (argc == 1) { - rg->set_recenable ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_recenable ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/recenable"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/select")) == 0) { - if (argc == 1) { - rg->set_select ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_select ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/select"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/active")) == 0) { - if (argc == 1) { - rg->set_route_active ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_route_active ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/active"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/color")) == 0) { - if (argc == 1) { - rg->set_color ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_color ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/color"), 0, get_address (msg)); } } else if (strcmp (path, X_("/select/group/monitoring")) == 0) { - if (argc == 1) { - rg->set_monitoring ((bool) value); - ret = 0; + if (rg) { + if (argc == 1) { + rg->set_monitoring ((bool) value); + ret = 0; + } + } else { + int_message (X_("/select/group/monitoring"), 0, get_address (msg)); } } } diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc index a5b43aeb2c..d04d8c5f85 100644 --- a/libs/surfaces/osc/osc_select_observer.cc +++ b/libs/surfaces/osc/osc_select_observer.cc @@ -313,6 +313,7 @@ OSCSelectObserver::clear_observer () _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); if (gainmode) { _osc.float_message (X_("/select/fader"), 0, addr); } else { @@ -736,6 +737,10 @@ OSCSelectObserver::group_sharing (RouteGroup *rgc) _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); @@ -746,6 +751,7 @@ OSCSelectObserver::group_sharing (RouteGroup *rgc) _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;