OSC: added solo isolate and solo safe/lock.
This commit is contained in:
@@ -47,6 +47,8 @@
|
||||
#include "ardour/presentation_info.h"
|
||||
#include "ardour/send.h"
|
||||
#include "ardour/phase_control.h"
|
||||
#include "ardour/solo_isolate_control.h"
|
||||
#include "ardour/solo_safe_control.h"
|
||||
|
||||
#include "osc_select_observer.h"
|
||||
#include "osc.h"
|
||||
@@ -519,6 +521,8 @@ OSC::register_callbacks()
|
||||
REGISTER_CALLBACK (serv, "/select/record_safe", "i", sel_recsafe);
|
||||
REGISTER_CALLBACK (serv, "/select/mute", "i", sel_mute);
|
||||
REGISTER_CALLBACK (serv, "/select/solo", "i", sel_solo);
|
||||
REGISTER_CALLBACK (serv, "/select/solo_iso", "i", sel_solo_iso);
|
||||
REGISTER_CALLBACK (serv, "/select/solo_safe", "i", sel_solo_safe);
|
||||
REGISTER_CALLBACK (serv, "/select/monitor_input", "i", sel_monitor_input);
|
||||
REGISTER_CALLBACK (serv, "/select/monitor_disk", "i", sel_monitor_disk);
|
||||
REGISTER_CALLBACK (serv, "/select/polarity", "i", sel_phase);
|
||||
@@ -533,6 +537,8 @@ OSC::register_callbacks()
|
||||
/* These commands require the route index in addition to the arg; TouchOSC (et al) can't use these */
|
||||
REGISTER_CALLBACK (serv, "/strip/mute", "ii", route_mute);
|
||||
REGISTER_CALLBACK (serv, "/strip/solo", "ii", route_solo);
|
||||
REGISTER_CALLBACK (serv, "/strip/solo_iso", "ii", route_solo_iso);
|
||||
REGISTER_CALLBACK (serv, "/strip/solo_safe", "ii", route_solo_safe);
|
||||
REGISTER_CALLBACK (serv, "/strip/recenable", "ii", route_recenable);
|
||||
REGISTER_CALLBACK (serv, "/strip/record_safe", "ii", route_recsafe);
|
||||
REGISTER_CALLBACK (serv, "/strip/monitor_input", "ii", route_monitor_input);
|
||||
@@ -1574,6 +1580,42 @@ OSC::route_solo (int ssid, int yn, lo_message msg)
|
||||
return route_send_fail ("solo", ssid, 0, lo_message_get_source (msg));
|
||||
}
|
||||
|
||||
int
|
||||
OSC::route_solo_iso (int ssid, int yn, lo_message msg)
|
||||
{
|
||||
if (!session) return -1;
|
||||
int rid = get_rid (ssid, lo_message_get_source (msg));
|
||||
|
||||
boost::shared_ptr<Stripable> s = session->get_remote_nth_stripable (rid, PresentationInfo::Route);
|
||||
|
||||
if (s) {
|
||||
if (s->solo_isolate_control()) {
|
||||
s->solo_isolate_control()->set_value (yn ? 1.0 : 0.0, PBD::Controllable::NoGroup);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return route_send_fail ("solo_iso", ssid, 0, lo_message_get_source (msg));
|
||||
}
|
||||
|
||||
int
|
||||
OSC::route_solo_safe (int ssid, int yn, lo_message msg)
|
||||
{
|
||||
if (!session) return -1;
|
||||
int rid = get_rid (ssid, lo_message_get_source (msg));
|
||||
|
||||
boost::shared_ptr<Stripable> s = session->get_remote_nth_stripable (rid, PresentationInfo::Route);
|
||||
|
||||
if (s) {
|
||||
if (s->solo_safe_control()) {
|
||||
s->solo_safe_control()->set_value (yn ? 1.0 : 0.0, PBD::Controllable::NoGroup);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return route_send_fail ("solo_safe", ssid, 0, lo_message_get_source (msg));
|
||||
}
|
||||
|
||||
int
|
||||
OSC::sel_solo (uint32_t yn, lo_message msg)
|
||||
{
|
||||
@@ -1585,6 +1627,28 @@ OSC::sel_solo (uint32_t yn, lo_message msg)
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
OSC::sel_solo_iso (uint32_t yn, lo_message msg)
|
||||
{
|
||||
OSCSurface *sur = get_surface(lo_message_get_source (msg));
|
||||
if (sur->surface_sel) {
|
||||
return route_solo_iso(sur->surface_sel, yn, msg);
|
||||
} else {
|
||||
return route_send_fail ("solo_iso", 0, 0, lo_message_get_source (msg));
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
OSC::sel_solo_safe (uint32_t yn, lo_message msg)
|
||||
{
|
||||
OSCSurface *sur = get_surface(lo_message_get_source (msg));
|
||||
if (sur->surface_sel) {
|
||||
return route_solo_safe(sur->surface_sel, yn, msg);
|
||||
} else {
|
||||
return route_send_fail ("solo_safe", 0, 0, lo_message_get_source (msg));
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
OSC::sel_recenable (uint32_t yn, lo_message msg)
|
||||
{
|
||||
|
||||
@@ -333,6 +333,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
PATH_CALLBACK1_MSG(sel_recsafe,i);
|
||||
PATH_CALLBACK1_MSG(sel_mute,i);
|
||||
PATH_CALLBACK1_MSG(sel_solo,i);
|
||||
PATH_CALLBACK1_MSG(sel_solo_iso,i);
|
||||
PATH_CALLBACK1_MSG(sel_solo_safe,i);
|
||||
PATH_CALLBACK1_MSG(sel_monitor_input,i);
|
||||
PATH_CALLBACK1_MSG(sel_monitor_disk,i);
|
||||
PATH_CALLBACK1_MSG(sel_phase,i);
|
||||
@@ -398,6 +400,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
PATH_CALLBACK2(loop_location,i,i);
|
||||
PATH_CALLBACK2_MSG(route_mute,i,i);
|
||||
PATH_CALLBACK2_MSG(route_solo,i,i);
|
||||
PATH_CALLBACK2_MSG(route_solo_iso,i,i);
|
||||
PATH_CALLBACK2_MSG(route_solo_safe,i,i);
|
||||
PATH_CALLBACK2_MSG(route_recenable,i,i);
|
||||
PATH_CALLBACK2_MSG(route_recsafe,i,i);
|
||||
PATH_CALLBACK2_MSG(route_monitor_input,i,i);
|
||||
@@ -419,6 +423,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
|
||||
int route_mute (int rid, int yn, lo_message msg);
|
||||
int route_solo (int rid, int yn, lo_message msg);
|
||||
int route_solo_iso (int rid, int yn, lo_message msg);
|
||||
int route_solo_safe (int rid, int yn, lo_message msg);
|
||||
int route_recenable (int rid, int yn, lo_message msg);
|
||||
int route_recsafe (int ssid, int yn, lo_message msg);
|
||||
int route_monitor_input (int rid, int yn, lo_message msg);
|
||||
@@ -461,6 +467,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
int sel_recsafe (uint32_t state, lo_message msg);
|
||||
int sel_mute (uint32_t state, lo_message msg);
|
||||
int sel_solo (uint32_t state, lo_message msg);
|
||||
int sel_solo_iso (uint32_t state, lo_message msg);
|
||||
int sel_solo_safe (uint32_t state, lo_message msg);
|
||||
int sel_monitor_input (uint32_t state, lo_message msg);
|
||||
int sel_monitor_disk (uint32_t state, lo_message msg);
|
||||
int sel_phase (uint32_t state, lo_message msg);
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#include "ardour/dB.h"
|
||||
#include "ardour/meter.h"
|
||||
#include "ardour/phase_control.h"
|
||||
#include "ardour/solo_isolate_control.h"
|
||||
#include "ardour/solo_safe_control.h"
|
||||
|
||||
#include "osc.h"
|
||||
#include "osc_select_observer.h"
|
||||
@@ -55,6 +57,12 @@ OSCSelectObserver::OSCSelectObserver (boost::shared_ptr<Stripable> s, lo_address
|
||||
_strip->solo_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo"), _strip->solo_control()), OSC::instance());
|
||||
change_message ("/select/solo", _strip->solo_control());
|
||||
|
||||
_strip->solo_isolate_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo_iso"), _strip->solo_isolate_control()), OSC::instance());
|
||||
change_message ("/select/solo_iso", _strip->solo_isolate_control());
|
||||
|
||||
_strip->solo_safe_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo_safe"), _strip->solo_safe_control()), OSC::instance());
|
||||
change_message ("/select/solo_safe", _strip->solo_safe_control());
|
||||
|
||||
boost::shared_ptr<Track> track = boost::dynamic_pointer_cast<Track> (_strip);
|
||||
if (track) {
|
||||
track->monitoring_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::monitor_status, this, track->monitoring_control()), OSC::instance());
|
||||
|
||||
Reference in New Issue
Block a user