summaryrefslogtreecommitdiff
path: root/libs/surfaces/osc
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2018-06-20 12:30:08 -0700
committerLen Ovens <len@ovenwerks.net>2018-06-20 12:39:34 -0700
commite34f00665857d0dff5fbfabc1894d9758753c0ee (patch)
treeff84757d3219710e837d76d1d6e772be2c78df35 /libs/surfaces/osc
parent57ce5737960af7bce78eab1a0c149453517ff2aa (diff)
OSC: Add /select/vca/toggle
Diffstat (limited to 'libs/surfaces/osc')
-rw-r--r--libs/surfaces/osc/osc.cc22
-rw-r--r--libs/surfaces/osc/osc_select_observer.cc7
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);