periodic_connection = periodic_timeout->connect (sigc::mem_fun (*this, &OSC::periodic));
periodic_timeout->attach (main_loop()->get_context());
- //StripableSelectionChanged.connect (gui_connections, MISSING_INVALIDATOR, boost::bind (&OSC::gui_selection_changed, this, _1), this);
+ StripableSelectionChanged.connect (session_connections, MISSING_INVALIDATOR, boost::bind (&OSC::gui_selection_changed, this, _1), this);
return 0;
}
}
periodic_connection.disconnect ();
+ session_connections.drop_connections ();
// Delete any active route observers
for (RouteObservers::iterator x = route_observers.begin(); x != route_observers.end();) {
}
}
// hmm, not set for whatever reason tell surface
- return route_send_fail ("recenable", ssid, 0, msg);
+ return route_send_fail ("recenable", ssid, 0, lo_message_get_source (msg));
}
int
}
}
// hmm, not set for whatever reason tell surface
- return route_send_fail ("record_safe", ssid, 0, msg);
+ return route_send_fail ("record_safe", ssid, 0,lo_message_get_source (msg));
}
int
if (track) {
track->monitoring_control()->set_value (yn ? 1.0 : 0.0, PBD::Controllable::NoGroup);
} else {
- route_send_fail ("monitor_input", ssid, 0, msg);
+ route_send_fail ("monitor_input", ssid, 0, lo_message_get_source (msg));
}
}
if (track) {
track->monitoring_control()->set_value (yn ? 2.0 : 0.0, PBD::Controllable::NoGroup);
} else {
- route_send_fail ("monitor_disk", ssid, 0, msg);
+ route_send_fail ("monitor_disk", ssid, 0, lo_message_get_source (msg));
}
}
//ignore button release
if (!yn) return 0;
+ return _strip_select ( ssid, lo_message_get_source (msg));
+}
+
+int
+OSC::_strip_select (int ssid, lo_address addr)
+{
if (!session) {
- route_send_fail ("select", ssid, 0, msg);
+ route_send_fail ("select", ssid, 0, addr);
return -1;
}
- int rid = get_rid (ssid, lo_message_get_source (msg));
+ int rid = get_rid (ssid, addr);
boost::shared_ptr<Stripable> s = session->get_remote_nth_stripable (rid, PresentationInfo::Route);
- OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ OSCSurface *sur = get_surface(addr);
delete sur->sel_obs;
if (s) {
sur->surface_sel = ssid;
- OSCSelectObserver* sel_fb = new OSCSelectObserver (s, lo_message_get_source (msg), ssid, sur->gainmode, sur->feedback);
+ OSCSelectObserver* sel_fb = new OSCSelectObserver (s, addr, ssid, sur->gainmode, sur->feedback);
sur->sel_obs = sel_fb;
} else {
- route_send_fail ("select", ssid, 0 , msg);
+ route_send_fail ("select", ssid, 0 , addr);
}
int b_s = sur->bank_size;
if (!b_s) { // bank size 0 means we need to know how many strips there are.
}
lo_message_add_float (reply, (float) 1);
- lo_send_message (lo_message_get_source (msg), path.c_str(), reply);
+ lo_send_message (addr, path.c_str(), reply);
lo_message_free (reply);
} else {
- route_send_fail ("select", i, 0, msg);
+ route_send_fail ("select", i, 0, addr);
}
}
if (!yn) return 0;
if (!session) {
- route_send_fail ("gui_select", ssid, 0, msg);
+ route_send_fail ("gui_select", ssid, 0, lo_message_get_source (msg));
return -1;
}
int ret = strip_select (ssid, yn, msg);
//s->set_select();
//sur->surface_sel = ssid;
} else {
- route_send_fail ("gui_select", ssid, 0, msg);
+ route_send_fail ("gui_select", ssid, 0, lo_message_get_source (msg));
}
return 0;
OSC::route_set_gain_dB (int ssid, float dB, lo_message msg)
{
if (!session) {
- route_send_fail ("gain", ssid, -193, msg);
+ route_send_fail ("gain", ssid, -193, lo_message_get_source (msg));
return -1;
}
int ret;
ret = route_set_gain_abs (rid, dB_to_coefficient (dB), msg);
}
if (ret != 0) {
- route_send_fail ("gain", ssid, 0, msg);
+ route_send_fail ("gain", ssid, 0, lo_message_get_source (msg));
}
return ret;
}
OSC::route_set_gain_fader (int ssid, float pos, lo_message msg)
{
if (!session) {
- route_send_fail ("fader", ssid, 0, msg);
+ route_send_fail ("fader", ssid, 0, lo_message_get_source (msg));
return -1;
}
int ret;
ret = route_set_gain_abs (rid, slider_position_to_gain_with_max ((pos/1023), 2.0), msg);
}
if (ret != 0) {
- route_send_fail ("fader", ssid, 0, msg);
+ route_send_fail ("fader", ssid, 0, lo_message_get_source (msg));
}
return ret;
}
return 0;
}
+void
+OSC::gui_selection_changed (StripableNotificationListPtr stripables)
+{
+ boost::shared_ptr<Stripable> strip;
+
+ if (!stripables->empty()) {
+ strip = stripables->front().lock();
+ }
+ if (strip) {
+ for (uint32_t it = 0; it < _surface.size(); ++it) {
+ OSCSurface* sur = &_surface[it];
+ if(!sur->feedback[10]) {
+ uint32_t sel_strip = strip->presentation_info().order() + 1;
+ if (!(sel_strip < sur->bank) && !(sel_strip >= (sur->bank + sur->bank_size))) {
+ lo_address addr = lo_address_new_from_url (sur->remote_url.c_str());
+ _strip_select ((sel_strip - sur->bank + 1), addr);
+ }
+ }
+ }
+ }
+
+}
+
// timer callbacks
bool
OSC::periodic (void)
}
int
-OSC::route_send_fail (string path, uint32_t ssid, float val, lo_message msg)
+OSC::route_send_fail (string path, uint32_t ssid, float val, lo_address addr)
{
- OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ OSCSurface *sur = get_surface(addr);
ostringstream os;
lo_message reply = lo_message_new ();
string str_pth = os.str();
lo_message_add_float (reply, (float) val);
- lo_send_message (lo_message_get_source (msg), str_pth.c_str(), reply);
+ lo_send_message (addr, str_pth.c_str(), reply);
lo_message_free (reply);
if (sur->surface_sel == ssid) {
os.str("");
string sel_pth = os.str();
reply = lo_message_new ();
lo_message_add_float (reply, (float) val);
- lo_send_message (lo_message_get_source (msg), sel_pth.c_str(), reply);
+ lo_send_message (addr, sel_pth.c_str(), reply);
lo_message_free (reply);
}