X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Fpannable.h;h=0d5200b685dcfaa5facfd67b77e51f15d376b30f;hb=5cf1f7f3b28abd36f9390014016def94f4e1468d;hp=e6ed2e41c16a20fe79a0ecb9ce25cd3ce126488e;hpb=c1c14e229e0a5c82e2f9edf7e425589fe156b12d;p=ardour.git diff --git a/libs/ardour/ardour/pannable.h b/libs/ardour/ardour/pannable.h index e6ed2e41c1..0d5200b685 100644 --- a/libs/ardour/ardour/pannable.h +++ b/libs/ardour/ardour/pannable.h @@ -24,6 +24,7 @@ #include +#include "pbd/stateful.h" #include "evoral/Parameter.hpp" #include "ardour/automatable.h" @@ -33,17 +34,24 @@ namespace ARDOUR { class Session; class AutomationControl; +class Panner; -struct Pannable : public Automatable, public SessionHandleRef { - Pannable (Session& s); +class Pannable : public PBD::Stateful, public Automatable, public SessionHandleRef +{ + public: + Pannable (Session& s); + ~Pannable (); - boost::shared_ptr pan_azimuth_control; - boost::shared_ptr pan_elevation_control; - boost::shared_ptr pan_width_control; - boost::shared_ptr pan_frontback_control; - boost::shared_ptr pan_lfe_control; + boost::shared_ptr pan_azimuth_control; + boost::shared_ptr pan_elevation_control; + boost::shared_ptr pan_width_control; + boost::shared_ptr pan_frontback_control; + boost::shared_ptr pan_lfe_control; - Session& session() { return _session; } + boost::shared_ptr panner() const { return _panner.lock(); } + void set_panner(boost::shared_ptr); + + Session& session() { return _session; } void set_automation_state (AutoState); AutoState automation_state() const { return _auto_state; } @@ -57,21 +65,37 @@ struct Pannable : public Automatable, public SessionHandleRef { return (_auto_state & Play) || ((_auto_state & Touch) && !touching()); } bool automation_write () const { - return ((_auto_state & Write) || ((_auto_state & Touch) && touching())); - } + return ((_auto_state & Write) || ((_auto_state & Touch) && touching())); + } + + std::string value_as_string (boost::shared_ptr) const; void start_touch (double when); void stop_touch (bool mark, double when); - bool touching() const { return g_atomic_int_get (&_touching); } + bool touching() const { return g_atomic_int_get (const_cast(&_touching)); } bool writing() const { return _auto_state == Write; } - bool touch_enabled() const { return _auto_state == Touch; } + bool touch_enabled() const { return _auto_state == Touch; } + + XMLNode& get_state (); + XMLNode& state (bool full_state); + int set_state (const XMLNode&, int version); + + bool has_state() const { return _has_state; } protected: - AutoState _auto_state; - AutoStyle _auto_style; - gint _touching; + boost::weak_ptr _panner; + AutoState _auto_state; + AutoStyle _auto_style; + gint _touching; + bool _has_state; + uint32_t _responding_to_control_auto_state_change; + + void control_auto_state_changed (AutoState); + + private: + void value_changed (); }; -} // namespace +} // namespace #endif /* __libardour_pannable_h__ */