refine self-automating plugin interface
[ardour.git] / libs / ardour / ardour / speaker.h
index 8e9e9116aeff57a01b099f6957665bda02bec413..c643eb5d02db0594e5bf7e3046473baed09605b4 100644 (file)
 #define __libardour_speaker_h__
 
 #include "pbd/cartesian.h"
+#include "pbd/signals.h"
 
-namespace ARDOUR { 
+#include "ardour/libardour_visibility.h"
 
-class Speaker {
-  public:
-        Speaker (int, const PBD::AngularVector& position);
-        
-        void move (const PBD::AngularVector& new_position);
+namespace ARDOUR {
 
-        const PBD::CartesianVector& coords() const { return _coords; }
-        const PBD::AngularVector&   angles() const { return _angles; }
+class LIBARDOUR_API Speaker {
+public:
+       Speaker (int, const PBD::AngularVector& position);
+       Speaker (const Speaker &);
+       Speaker& operator= (const Speaker &);
 
-        int id;
+       void move (const PBD::AngularVector& new_position);
 
-  private:
-        PBD::CartesianVector _coords;
-        PBD::AngularVector   _angles;
+       const PBD::CartesianVector& coords() const { return _coords; }
+       const PBD::AngularVector&   angles() const { return _angles; }
+
+       int id;
+
+       /** emitted when this speaker's position has changed */
+       PBD::Signal0<void> PositionChanged;
+
+private:
+       PBD::CartesianVector _coords;
+       PBD::AngularVector   _angles;
 };
 
 } /* namespace */