From 0b21143234a9a0f6a0648b1fd32c039335216fc0 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Fri, 23 Jun 2017 17:07:11 -0700 Subject: OSC: Add master_send_enable for MB --- libs/surfaces/osc/osc.cc | 20 ++++++++++++++++++++ libs/surfaces/osc/osc.h | 2 ++ libs/surfaces/osc/osc_select_observer.cc | 5 +++++ 3 files changed, 27 insertions(+) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 4ec2f18d4b..7d44efda26 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -564,6 +564,7 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, "/select/send_gain", "if", sel_sendgain); REGISTER_CALLBACK (serv, "/select/send_fader", "if", sel_sendfader); REGISTER_CALLBACK (serv, "/select/send_enable", "if", sel_sendenable); + REGISTER_CALLBACK (serv, "/select/master_send_enable", "i", sel_master_send_enable); REGISTER_CALLBACK (serv, "/select/send_page", "f", sel_send_page); REGISTER_CALLBACK (serv, "/select/plug_page", "f", sel_plug_page); REGISTER_CALLBACK (serv, "/select/plugin", "f", sel_plugin); @@ -3709,6 +3710,25 @@ OSC::sel_sendenable (int id, float val, lo_message msg) return sel_send_fail ("send_enable", id, 0, get_address (msg)); } +int +OSC::sel_master_send_enable (int state, lo_message msg) +{ + OSCSurface *sur = get_surface(get_address (msg)); + boost::shared_ptr s; + if (sur->expand_enable) { + s = get_strip (sur->expand, get_address (msg)); + } else { + s = _select; + } + if (s) { + if (s->master_send_enable_controllable ()) { + s->master_send_enable_controllable()->set_value (state, PBD::Controllable::NoGroup); + return 0; + } + } + return cue_float_message ("/select/master_send_enable", 0, get_address(msg)); +} + int OSC::select_plugin_parameter (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg) { OSCSurface *sur = get_surface(get_address (msg)); diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index faa5f79c2e..805a3df663 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -422,6 +422,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK1_MSG(sel_recenable,i); PATH_CALLBACK1_MSG(sel_recsafe,i); PATH_CALLBACK1_MSG(sel_mute,i); + PATH_CALLBACK1_MSG(sel_master_send_enable,i); PATH_CALLBACK1_MSG(sel_solo,i); PATH_CALLBACK1_MSG(sel_solo_iso,i); PATH_CALLBACK1_MSG(sel_solo_safe,i); @@ -633,6 +634,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int sel_sendgain (int id, float dB, lo_message msg); int sel_sendfader (int id, float pos, lo_message msg); int sel_sendenable (int id, float pos, lo_message msg); + int sel_master_send_enable (int state, lo_message msg); int sel_expand (uint32_t state, lo_message msg); int sel_pan_elevation (float val, lo_message msg); int sel_pan_frontback (float val, lo_message msg); diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc index caec1ec071..52c0d47c0c 100644 --- a/libs/surfaces/osc/osc_select_observer.cc +++ b/libs/surfaces/osc/osc_select_observer.cc @@ -150,6 +150,11 @@ OSCSelectObserver::OSCSelectObserver (boost::shared_ptr s, lo_address // sends, plugins and eq // detecting processor changes is now in osc.cc + // but... MB master send enable is different + if (_strip->master_send_enable_controllable ()) { + _strip->master_send_enable_controllable ()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::enable_message, this, X_("/select/master_send_enable"), _strip->master_send_enable_controllable()), OSC::instance()); + enable_message ("/select/master_send_enable", _strip->master_send_enable_controllable()); + } // Compressor if (_strip->comp_enable_controllable ()) { -- cgit v1.2.3