OSC: Add master_send_enable for MB
[ardour.git] / libs / surfaces / osc / osc_controllable.h
index 48183138ec4e17deb8cf724c876a61650389bbe3..accec0451509a2988461bed5f7f31bba5015ed14 100644 (file)
@@ -1,6 +1,6 @@
 /*
-    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
     the Free Software Foundation; either version 2 of the License, or
 #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__ */