diff options
author | Len Ovens <len@ovenwerks.net> | 2018-02-27 20:55:30 -0800 |
---|---|---|
committer | Len Ovens <len@ovenwerks.net> | 2018-02-27 21:59:43 -0800 |
commit | edd21ac89e03c843b4fa3fecb97fa90470b5a779 (patch) | |
tree | a12d4adf93fdb843ce1671dda52d4800d4e8188e /libs/surfaces | |
parent | 6adeded4266aa76839c934af8c2c0166cb135336 (diff) |
OSC: add group sharing bit feedback
Diffstat (limited to 'libs/surfaces')
-rw-r--r-- | libs/surfaces/osc/osc.cc | 39 | ||||
-rw-r--r-- | libs/surfaces/osc/osc_select_observer.cc | 38 | ||||
-rw-r--r-- | libs/surfaces/osc/osc_select_observer.h | 4 |
3 files changed, 69 insertions, 12 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 7f8f2b36b9..1a9d737159 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -2593,15 +2593,34 @@ OSC::parse_sel_group (const char *path, const char* types, lo_arg **argv, int ar } else if (!strncmp (path, X_("/select/group/sharing"), 21)) { if (argc == 9) { - rg->set_gain ((bool) argv[0]->i); - rg->set_relative ((bool) argv[1]->i, this); - rg->set_mute ((bool) argv[2]->i); - rg->set_solo ((bool) argv[3]->i); - rg->set_recenable ((bool) argv[4]->i); - rg->set_select ((bool) argv[5]->i); - rg->set_route_active ((bool) argv[6]->i); - rg->set_color ((bool) argv[7]->i); - rg->set_monitoring ((bool) argv[8]->i); + if (rg->is_gain() != (bool) argv[0]->i) { + rg->set_gain ((bool) argv[0]->i); + } + if (rg->is_relative() != (bool) argv[1]->i) { + rg->set_relative ((bool) argv[1]->i, this); + } + if (rg->is_mute() != (bool) argv[2]->i) { + rg->set_mute ((bool) argv[2]->i); + } + if (rg->is_solo() != (bool) argv[3]->i) { + rg->set_solo ((bool) argv[3]->i); + } + if (rg->is_recenable() != (bool) argv[4]->i) { + rg->set_recenable ((bool) argv[4]->i); + } + if (rg->is_select() != (bool) argv[5]->i) { + rg->set_select ((bool) argv[5]->i); + } + if (rg->is_route_active() != (bool) argv[6]->i) { + rg->set_route_active ((bool) argv[6]->i); + } + if (rg->is_color() != (bool) argv[7]->i) { + rg->set_color ((bool) argv[7]->i); + } + if (rg->is_monitoring() != (bool) argv[8]->i) { + rg->set_monitoring ((bool) argv[8]->i); + } + ret = 0; } else { PBD::warning << "OSC: Sharing can only be set if all 9 parameters are sent." << endmsg; } @@ -4188,7 +4207,7 @@ OSC::_strip_select (boost::shared_ptr<Stripable> s, lo_address addr) if (so != 0) { so->refresh_strip (s, nsends, sur->gainmode, true); } else { - OSCSelectObserver* sel_fb = new OSCSelectObserver (*this, sur); + OSCSelectObserver* sel_fb = new OSCSelectObserver (*this, *session, sur); sur->sel_obs = sel_fb; } sur->sel_obs->set_expand (sur->expand_enable); diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc index 5b68f08241..e5995edf2f 100644 --- a/libs/surfaces/osc/osc_select_observer.cc +++ b/libs/surfaces/osc/osc_select_observer.cc @@ -32,6 +32,7 @@ #include "ardour/solo_safe_control.h" #include "ardour/route.h" #include "ardour/route_group.h" +#include "ardour/route_group_member.h" #include "ardour/send.h" #include "ardour/plugin.h" #include "ardour/plugin_insert.h" @@ -50,7 +51,7 @@ using namespace PBD; using namespace ARDOUR; using namespace ArdourSurface; -OSCSelectObserver::OSCSelectObserver (OSC& o, ArdourSurface::OSC::OSCSurface* su) +OSCSelectObserver::OSCSelectObserver (OSC& o, ARDOUR::Session& s, ArdourSurface::OSC::OSCSurface* su) : _osc (o) ,sur (su) ,nsends (0) @@ -60,6 +61,7 @@ OSCSelectObserver::OSCSelectObserver (OSC& o, ArdourSurface::OSC::OSCSurface* su ,eq_bands (0) ,_expand (2048) { + session = &s; addr = lo_address_new_from_url (sur->remote_url.c_str()); gainmode = sur->gainmode; feedback = sur->feedback; @@ -141,6 +143,9 @@ OSCSelectObserver::refresh_strip (boost::shared_ptr<ARDOUR::Stripable> new_strip rt->comment_changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::comment_changed, this), OSC::instance()); comment_changed (); + + session->RouteGroupPropertyChanged.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::group_sharing, this, _1), OSC::instance()); + group_sharing (rt->route_group ()); } _strip->presentation_info().PropertyChanged.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::pi_changed, this, _1), OSC::instance()); @@ -665,6 +670,34 @@ OSCSelectObserver::group_name () } void +OSCSelectObserver::group_sharing (RouteGroup *rgc) +{ + boost::shared_ptr<Route> rt = boost::dynamic_pointer_cast<Route> (_strip); + if (rt) { + RouteGroup *rg = rt->route_group(); + if (rg) { + if (rg != rgc) { + return; + } + lo_message reply = lo_message_new (); + lo_message_add_int32 (reply, rg->is_gain ()); + lo_message_add_int32 (reply, rg->is_relative ()); + lo_message_add_int32 (reply, rg->is_mute ()); + lo_message_add_int32 (reply, rg->is_solo ()); + lo_message_add_int32 (reply, rg->is_recenable ()); + lo_message_add_int32 (reply, rg->is_select ()); + lo_message_add_int32 (reply, rg->is_route_active ()); + lo_message_add_int32 (reply, rg->is_color ()); + lo_message_add_int32 (reply, rg->is_monitoring ()); + lo_send_message (addr, "/select/group/sharing", reply); + lo_message_free (reply); + } + } + + +} + +void OSCSelectObserver::comment_changed () { boost::shared_ptr<Route> rt = boost::dynamic_pointer_cast<Route> (_strip); @@ -676,6 +709,9 @@ OSCSelectObserver::comment_changed () void OSCSelectObserver::pi_changed (PBD::PropertyChange const& what_changed) { + if (!what_changed.contains (ARDOUR::Properties::hidden)) { + return; + } _osc.float_message (X_("/select/hide"), _strip->is_hidden (), addr); } diff --git a/libs/surfaces/osc/osc_select_observer.h b/libs/surfaces/osc/osc_select_observer.h index b12d707d83..0b9f697f2e 100644 --- a/libs/surfaces/osc/osc_select_observer.h +++ b/libs/surfaces/osc/osc_select_observer.h @@ -37,7 +37,7 @@ class OSCSelectObserver { public: - OSCSelectObserver (ArdourSurface::OSC& o, ArdourSurface::OSC::OSCSurface* sur); + OSCSelectObserver (ArdourSurface::OSC& o, ARDOUR::Session& s, ArdourSurface::OSC::OSCSurface* sur); ~OSCSelectObserver (); boost::shared_ptr<ARDOUR::Stripable> strip () const { return _strip; } @@ -94,9 +94,11 @@ class OSCSelectObserver int eq_bands; bool _tick_busy; uint32_t _expand; + ARDOUR::Session* session; void name_changed (const PBD::PropertyChange& what_changed); void group_name (); + void group_sharing (ARDOUR::RouteGroup *rg_c); void comment_changed (); void pi_changed (PBD::PropertyChange const&); void change_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable); |