OSC: group commands should feedback all off if no group
authorLen Ovens <len@ovenwerks.net>
Sat, 10 Mar 2018 21:58:31 +0000 (13:58 -0800)
committerLen Ovens <len@ovenwerks.net>
Mon, 12 Mar 2018 23:03:53 +0000 (16:03 -0700)
libs/surfaces/osc/osc.cc
libs/surfaces/osc/osc_select_observer.cc

index 6e38b88344867e917253aa908ab8d582039761a9..1d86bbcd3275c1b47283c38b6e551cfe3d32adc3 100644 (file)
@@ -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));
                        }
                }
        }
index a5b43aeb2c42862b3eb692bfc7dbcc52092bccf9..d04d8c5f8519d98b688b23e819af54b6cc0021ad 100644 (file)
@@ -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;