MCP: probably fix crash on solo, another debug trace
[ardour.git] / libs / surfaces / osc / osc_controllable.h
index 48183138ec4e17deb8cf724c876a61650389bbe3..828c3769f570a23c4412f5d8e098d8bcfbff0fea 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 1998-2006 Paul Davis
+    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
 #define __osc_osccontrollable_h__
 
 #include <string>
-
+#include <boost/shared_ptr.hpp>
 #include <sigc++/sigc++.h>
 #include <lo/lo.h>
 
-#include <pbd/controllable.h>
-#include <pbd/stateful.h>
-#include <ardour/types.h>
+#include "pbd/controllable.h"
+#include "pbd/stateful.h"
+#include "ardour/types.h"
+
+namespace ARDOUR {
+       class Route;
+}
 
 class OSCControllable : public PBD::Stateful
 {
   public:
-       OSCControllable (lo_address addr, PBD::Controllable&);
+       OSCControllable (lo_address addr, const std::string& path, boost::shared_ptr<PBD::Controllable>);
        virtual ~OSCControllable ();
 
+       lo_address address() const { return addr; }
+
        XMLNode& get_state ();
-       int set_state (const XMLNode& node);
+       int set_state (const XMLNode& node, int version);
 
-  private:
-       PBD::Controllable& controllable;
+  protected:
+       boost::shared_ptr<PBD::Controllable> controllable;
+       PBD::ScopedConnection changed_connection;
        lo_address addr;
+       std::string path;
+
+       virtual void send_change_message ();
+};
+
+class OSCRouteControllable : public OSCControllable
+{
+
+  public:
+       OSCRouteControllable (lo_address addr, const std::string& path, 
+                             boost::shared_ptr<PBD::Controllable>, 
+                             boost::shared_ptr<ARDOUR::Route>);
+       ~OSCRouteControllable ();
+
+       boost::shared_ptr<ARDOUR::Route> route() const { return _route; }
+
+  private:
+       boost::shared_ptr<ARDOUR::Route> _route;
+
+       void send_change_message ();
 };
 
 #endif /* __osc_osccontrollable_h__ */