diff options
author | Len Ovens <len@ovenwerks.net> | 2018-06-20 12:30:08 -0700 |
---|---|---|
committer | Len Ovens <len@ovenwerks.net> | 2018-06-20 12:39:34 -0700 |
commit | e34f00665857d0dff5fbfabc1894d9758753c0ee (patch) | |
tree | ff84757d3219710e837d76d1d6e772be2c78df35 /libs/surfaces/osc | |
parent | 57ce5737960af7bce78eab1a0c149453517ff2aa (diff) |
OSC: Add /select/vca/toggle
Diffstat (limited to 'libs/surfaces/osc')
-rw-r--r-- | libs/surfaces/osc/osc.cc | 22 | ||||
-rw-r--r-- | libs/surfaces/osc/osc_select_observer.cc | 7 |
2 files changed, 25 insertions, 4 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 8e7351e3f8..27a342dca3 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -2743,6 +2743,7 @@ OSC::parse_sel_vca (const char *path, const char* types, lo_arg **argv, int argc s = sur->select; int ret = 1; /* unhandled */ if (s) { + boost::shared_ptr<Slavable> slv = boost::dynamic_pointer_cast<Slavable> (s); string svalue = ""; uint32_t ivalue = 1024; if (strcmp (path, X_("/select/vca")) == 0) { @@ -2758,7 +2759,6 @@ OSC::parse_sel_vca (const char *path, const char* types, lo_arg **argv, int argc } boost::shared_ptr<VCA> vca = get_vca_by_name (svalue); if (vca) { - boost::shared_ptr<Slavable> slv = boost::dynamic_pointer_cast<Slavable> (s); if (ivalue) { slv->assign (vca); } else { @@ -2771,6 +2771,26 @@ OSC::parse_sel_vca (const char *path, const char* types, lo_arg **argv, int argc PBD::warning << "OSC: setting a vca needs both the vca name and it's state" << endmsg; } } + else if (!strncmp (path, X_("/select/vca/toggle"), 18)) { + if (argc == 1) { + if (types[0] == 's') { + svalue = &argv[0]->s; + string v_name = svalue.substr (0, svalue.rfind (" [")); + boost::shared_ptr<VCA> vca = get_vca_by_name (v_name); + if (s->slaved_to (vca)) { + slv->unassign (vca); + } else { + slv->assign (vca); + } + ret = 0; + } else { + PBD::warning << "OSC: toggling needs the vca name as a string" << endmsg; + } + } else { + PBD::warning << "OSC: toggling a vca needs the vca name" << endmsg; + } + + } else if (!strncmp (path, X_("/select/vca/only"), 16)) { if (argc == 1) { if (types[0] == 'f') { diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc index 4ab8e3c0af..62c11be30d 100644 --- a/libs/surfaces/osc/osc_select_observer.cc +++ b/libs/surfaces/osc/osc_select_observer.cc @@ -1100,12 +1100,13 @@ OSCSelectObserver::slaved_changed (boost::shared_ptr<VCA> vca, bool state) // we only want VCAs boost::shared_ptr<VCA> v = boost::dynamic_pointer_cast<VCA> (s); if (v) { - lo_message_add_string (reply, v->name().c_str()); + string name; if (_strip->slaved_to (v)) { - lo_message_add_int32 (reply, 1); + name = string_compose ("%1 [X]", v->name()); } else { - lo_message_add_int32 (reply, 0); + name = string_compose ("%1 [_]", v->name()); } + lo_message_add_string (reply, name.c_str()); } } lo_send_message (addr, X_("/select/vcas"), reply); |