13
0

OSC: issue 7116 fix send enable not working

This commit is contained in:
Len Ovens 2016-11-18 07:53:40 -08:00
parent d624bac38e
commit 1015e19ad3
3 changed files with 50 additions and 3 deletions

View File

@ -2597,6 +2597,18 @@ OSC::route_set_send_enable (int ssid, int sid, float val, lo_message msg)
}
if (s->send_level_controllable (sid)) {
boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (s);
if (!r) {
return 0;
}
boost::shared_ptr<Send> snd = boost::dynamic_pointer_cast<Send> (r->nth_send(sid));
if (snd) {
if (val) {
snd->activate();
} else {
snd->deactivate();
}
}
return 0;
}
@ -2624,7 +2636,20 @@ OSC::sel_sendenable (int id, float val, lo_message msg)
return 0;
}
if (s->send_level_controllable (id)) {
return sel_send_fail ("send_enable", id + 1, 1, get_address (msg));
boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (s);
if (!r) {
// should never get here
return sel_send_fail ("send_enable", id + 1, 0, get_address (msg));
}
boost::shared_ptr<Send> snd = boost::dynamic_pointer_cast<Send> (r->nth_send(id));
if (snd) {
if (val) {
snd->activate();
} else {
snd->deactivate();
}
}
return 0;
}
}
return sel_send_fail ("send_enable", id + 1, 0, get_address (msg));

View File

@ -29,6 +29,8 @@
#include "ardour/solo_isolate_control.h"
#include "ardour/solo_safe_control.h"
#include "ardour/route.h"
#include "ardour/send.h"
#include "ardour/processor.h"
#include "osc.h"
#include "osc_select_observer.h"
@ -251,8 +253,17 @@ OSCSelectObserver::send_init()
enable_message_with_id ("/select/send_enable", nsends + 1, _strip->send_enable_controllable(nsends));
sends = true;
} else if (sends) {
// not used by Ardour, just mixbus so in Ardour always true
clear_strip_with_id ("/select/send_enable", nsends + 1, 1);
boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (_strip);
if (!r) {
// should never get here
clear_strip_with_id ("/select/send_enable", nsends + 1, 0);
}
boost::shared_ptr<Send> snd = boost::dynamic_pointer_cast<Send> (r->nth_send(nsends));
if (snd) {
boost::shared_ptr<Processor> proc = boost::dynamic_pointer_cast<Processor> (snd);
proc->ActiveChanged.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::send_enable, this, X_("/select/send_enable"), nsends + 1, proc), OSC::instance());
clear_strip_with_id ("/select/send_enable", nsends + 1, proc->enabled());
}
}
// this should get signalled by the route the send goes to, (TODO)
if (!gainmode && sends) { // if the gain control is there, this is too
@ -542,6 +553,15 @@ OSCSelectObserver::send_gain (uint32_t id, boost::shared_ptr<PBD::Controllable>
lo_message_free (msg);
}
void
OSCSelectObserver::send_enable (string path, uint32_t id, boost::shared_ptr<Processor> proc)
{
// with no delay value is wrong
usleep(10);
clear_strip_with_id ("/select/send_enable", id, proc->enabled());
}
void
OSCSelectObserver::text_with_id (string path, uint32_t id, string name)
{

View File

@ -29,6 +29,7 @@
#include "pbd/controllable.h"
#include "pbd/stateful.h"
#include "ardour/types.h"
#include "ardour/processor.h"
class OSCSelectObserver
{
@ -75,6 +76,7 @@ class OSCSelectObserver
void send_end (void);
void send_restart (int);
void send_gain (uint32_t id, boost::shared_ptr<PBD::Controllable> controllable);
void send_enable (std::string path, uint32_t id, boost::shared_ptr<ARDOUR::Processor> proc);
void eq_init (void);
void eq_end (void);
void eq_restart (int);