diff options
Diffstat (limited to 'libs/surfaces/osc/osc.cc')
-rw-r--r-- | libs/surfaces/osc/osc.cc | 117 |
1 files changed, 99 insertions, 18 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 4818f9340c..72d8010c3f 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -565,6 +565,11 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, "/select/send_gain", "if", sel_sendgain); REGISTER_CALLBACK (serv, "/select/send_fader", "if", sel_sendfader); REGISTER_CALLBACK (serv, "/select/send_enable", "if", sel_sendenable); + REGISTER_CALLBACK (serv, "/select/send_page", "f", sel_send_page); + REGISTER_CALLBACK (serv, "/select/send_page_size", "f", sel_send_pagesize); + REGISTER_CALLBACK (serv, "/select/plug_page", "f", sel_plug_page); + REGISTER_CALLBACK (serv, "/select/plug_page_size", "f", sel_plug_pagesize); + REGISTER_CALLBACK (serv, "/select/plugin", "f", sel_plugin); REGISTER_CALLBACK (serv, "/select/expand", "i", sel_expand); REGISTER_CALLBACK (serv, "/select/pan_elevation_position", "f", sel_pan_elevation); REGISTER_CALLBACK (serv, "/select/pan_frontback_position", "f", sel_pan_frontback); @@ -1394,7 +1399,6 @@ OSC::set_surface_feedback (uint32_t fb, lo_message msg) return 0; } - int OSC::set_surface_gainmode (uint32_t gm, lo_message msg) { @@ -1461,6 +1465,11 @@ OSC::get_surface (lo_address addr) s.cue = false; s.aux = 0; s.strips = get_sorted_stripables(s.strip_types, s.cue); + s.send_page = 1; + s.send_page_size = 0; + s.plug_page = 1; + s.plug_page_size = 0; + s.plugin = 1; s.nstrips = s.strips.size(); _surface.push_back (s); @@ -1727,6 +1736,57 @@ OSC::get_strip (uint32_t ssid, lo_address addr) return boost::shared_ptr<ARDOUR::Stripable>(); } +// send and plugin paging commands +int +OSC::sel_send_pagesize (uint32_t size, lo_message msg) +{ + OSCSurface *s = get_surface(get_address (msg)); + if (size != s->send_page_size) { + s->send_page_size = size; + s->sel_obs->renew_sends(); + } + return 0; +} + +int +OSC::sel_send_page (int page, lo_message msg) +{ + OSCSurface *s = get_surface(get_address (msg)); + s->send_page = s->send_page + page; + s->sel_obs->renew_sends(); + return 0; +} + +int +OSC::sel_plug_pagesize (uint32_t size, lo_message msg) +{ + OSCSurface *s = get_surface(get_address (msg)); + if (size != s->plug_page_size) { + s->plug_page_size = size; + s->sel_obs->renew_plugin(); + } + return 0; +} + +int +OSC::sel_plug_page (int page, lo_message msg) +{ + OSCSurface *s = get_surface(get_address (msg)); + s->plug_page = s->plug_page + page; + s->sel_obs->renew_plugin(); + return 0; +} + +int +OSC::sel_plugin (uint32_t id, lo_message msg) +{ + OSCSurface *s = get_surface(get_address (msg)); + s->plugin = id; + s->plug_page = 1; + s->sel_obs->renew_plugin(); + return 0; +} + void OSC::transport_frame (lo_message msg) { @@ -2762,14 +2822,14 @@ OSC::_strip_select (boost::shared_ptr<Stripable> s, lo_address addr) } bool feedback_on = sur->feedback.to_ulong(); if (s && feedback_on) { - OSCSelectObserver* sel_fb = new OSCSelectObserver (s, addr, sur->gainmode, sur->feedback); + OSCSelectObserver* sel_fb = new OSCSelectObserver (s, addr, sur); s->DropReferences.connect (*this, MISSING_INVALIDATOR, boost::bind (&OSC::recalcbanks, this), this); sur->sel_obs = sel_fb; } else if (sur->expand_enable) { sur->expand = 0; sur->expand_enable = false; if (_select && feedback_on) { - OSCSelectObserver* sel_fb = new OSCSelectObserver (_select, addr, sur->gainmode, sur->feedback); + OSCSelectObserver* sel_fb = new OSCSelectObserver (_select, addr, sur); _select->DropReferences.connect (*this, MISSING_INVALIDATOR, boost::bind (&OSC::recalcbanks, this), this); sur->sel_obs = sel_fb; } @@ -3144,6 +3204,9 @@ int OSC::sel_sendgain (int id, float val, lo_message msg) { OSCSurface *sur = get_surface(get_address (msg)); + if (sur->send_page_size && (id > (int)sur->send_page_size)) { + return sel_send_fail ("send_gain", id, -193, get_address (msg)); + } boost::shared_ptr<Stripable> s; if (sur->expand_enable) { s = get_strip (sur->expand, get_address (msg)); @@ -3151,9 +3214,10 @@ OSC::sel_sendgain (int id, float val, lo_message msg) s = _select; } float abs; + int send_id; if (s) { if (id > 0) { - --id; + send_id = id - 1; } #ifdef MIXBUS abs = val; @@ -3164,18 +3228,24 @@ OSC::sel_sendgain (int id, float val, lo_message msg) abs = dB_to_coefficient (val); } #endif - if (s->send_level_controllable (id)) { - s->send_level_controllable (id)->set_value (abs, PBD::Controllable::NoGroup); + if (sur->send_page_size) { + send_id = send_id + ((sur->send_page - 1) * sur->send_page_size); + } + if (s->send_level_controllable (send_id)) { + s->send_level_controllable (send_id)->set_value (abs, PBD::Controllable::NoGroup); return 0; } } - return sel_send_fail ("send_gain", id + 1, -193, get_address (msg)); + return sel_send_fail ("send_gain", id, -193, get_address (msg)); } int OSC::sel_sendfader (int id, float val, lo_message msg) { OSCSurface *sur = get_surface(get_address (msg)); + if (sur->send_page_size && (id > (int)sur->send_page_size)) { + return sel_send_fail ("send_fader", id, 0, get_address (msg)); + } boost::shared_ptr<Stripable> s; if (sur->expand_enable) { s = get_strip (sur->expand, get_address (msg)); @@ -3183,19 +3253,23 @@ OSC::sel_sendfader (int id, float val, lo_message msg) s = _select; } float abs; + int send_id; if (s) { if (id > 0) { - --id; + send_id = id - 1; + } + if (sur->send_page_size) { + send_id = send_id + ((sur->send_page - 1) * sur->send_page_size); } - if (s->send_level_controllable (id)) { + if (s->send_level_controllable (send_id)) { #ifdef MIXBUS - abs = s->send_level_controllable(id)->interface_to_internal (val); + abs = s->send_level_controllable(send_id)->interface_to_internal (val); #else abs = slider_position_to_gain_with_max (val, 2.0); #endif - s->send_level_controllable (id)->set_value (abs, PBD::Controllable::NoGroup); + s->send_level_controllable (send_id)->set_value (abs, PBD::Controllable::NoGroup); return 0; } } @@ -3248,27 +3322,34 @@ int OSC::sel_sendenable (int id, float val, lo_message msg) { OSCSurface *sur = get_surface(get_address (msg)); + if (sur->send_page_size && (id > (int)sur->send_page_size)) { + return sel_send_fail ("send_enable", id, 0, get_address (msg)); + } boost::shared_ptr<Stripable> s; if (sur->expand_enable) { s = get_strip (sur->expand, get_address (msg)); } else { s = _select; } + int send_id; if (s) { if (id > 0) { - --id; + send_id = id - 1; + } + if (sur->send_page_size) { + send_id = send_id + ((sur->send_page - 1) * sur->send_page_size); } - if (s->send_enable_controllable (id)) { - s->send_enable_controllable (id)->set_value (val, PBD::Controllable::NoGroup); + if (s->send_enable_controllable (send_id)) { + s->send_enable_controllable (send_id)->set_value (val, PBD::Controllable::NoGroup); return 0; } - if (s->send_level_controllable (id)) { + if (s->send_level_controllable (send_id)) { 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)); + return sel_send_fail ("send_enable", id, 0, get_address (msg)); } - boost::shared_ptr<Send> snd = boost::dynamic_pointer_cast<Send> (r->nth_send(id)); + boost::shared_ptr<Send> snd = boost::dynamic_pointer_cast<Send> (r->nth_send(send_id)); if (snd) { if (val) { snd->activate(); @@ -3279,7 +3360,7 @@ OSC::sel_sendenable (int id, float val, lo_message msg) return 0; } } - return sel_send_fail ("send_enable", id + 1, 0, get_address (msg)); + return sel_send_fail ("send_enable", id, 0, get_address (msg)); } int |