X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fosc%2Fosc_controllable.cc;h=23bc4a79fbe5bbd8147ef180c8af79b4e8ddfea1;hb=50e362ffd38b3b9c34fb0823b09dd9c050c92b8c;hp=66e70c7e7a5576c41d2414c8162880f34ef6b0e4;hpb=70b939da4f9d4097160e32f2373a7a5ff8f4957f;p=ardour.git diff --git a/libs/surfaces/osc/osc_controllable.cc b/libs/surfaces/osc/osc_controllable.cc index 66e70c7e7a..23bc4a79fb 100644 --- a/libs/surfaces/osc/osc_controllable.cc +++ b/libs/surfaces/osc/osc_controllable.cc @@ -1,6 +1,6 @@ /* Copyright (C) 2009 Paul Davis - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -19,27 +19,29 @@ #include /* for sprintf, sigh */ #include -#include -#include +#include "pbd/error.h" +#include "pbd/xml++.h" -#include +#include "ardour/route.h" +#include "osc.h" #include "osc_controllable.h" -using namespace sigc; using namespace PBD; using namespace ARDOUR; +using namespace ArdourSurface; -OSCControllable::OSCControllable (lo_address a, const string& p, boost::shared_ptr c) +OSCControllable::OSCControllable (lo_address a, const std::string& p, boost::shared_ptr c) : controllable (c) - , addr (a) , path (p) { - c->Changed.connect (mem_fun (*this, &OSCControllable::send_change)); + addr = lo_address_new (lo_address_get_hostname(a) , lo_address_get_port(a)); + c->Changed.connect (changed_connection, MISSING_INVALIDATOR, boost::bind (&OSCControllable::send_change_message, this), OSC::instance()); } OSCControllable::~OSCControllable () { + changed_connection.disconnect(); lo_address_free (addr); } @@ -51,16 +53,16 @@ OSCControllable::get_state () } int -OSCControllable::set_state (const XMLNode& node) +OSCControllable::set_state (const XMLNode& /*node*/, int /*version*/) { return 0; } void -OSCControllable::send_change () +OSCControllable::send_change_message () { lo_message msg = lo_message_new (); - + lo_message_add_float (msg, (float) controllable->get_value()); /* XXX thread issues */ @@ -69,9 +71,9 @@ OSCControllable::send_change () lo_message_free (msg); } -/*------------------------------------------------------------*/ +/*------------------------------------------------------------*/ -OSCRouteControllable::OSCRouteControllable (lo_address a, const string& p, +OSCRouteControllable::OSCRouteControllable (lo_address a, const std::string& p, boost::shared_ptr c, boost::shared_ptr r) : OSCControllable (a, p, c) , _route (r) @@ -83,16 +85,19 @@ OSCRouteControllable::~OSCRouteControllable () } void -OSCRouteControllable::send_change () +OSCRouteControllable::send_change_message () { lo_message msg = lo_message_new (); - lo_message_add_int32 (msg, _route->remote_control_id()); + /* Can only send ID part of RID at present */ + + lo_message_add_int32 (msg, _route->presentation_info().order()); lo_message_add_float (msg, (float) controllable->get_value()); /* XXX thread issues */ - cerr << "ORC: send " << path << " = " << controllable->get_value() << endl; + //std::cerr << "ORC: send " << path << " = " << controllable->get_value() << std::endl; + lo_send_message (addr, path.c_str(), msg); lo_message_free (msg); }