X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Fpannable.h;h=fd8ffe6c28b28e3a4f50b17e76dc030bea975ac5;hb=cd5847300396cb68c9ef393128c7cceb488483fd;hp=3dc4ccb8fd42dbfd6ebbf0bc5dad1ec693f0b9b5;hpb=d116af22db3c0e0cf6aeff6194a689d8bfad7c8c;p=ardour.git diff --git a/libs/ardour/ardour/pannable.h b/libs/ardour/ardour/pannable.h index 3dc4ccb8fd..fd8ffe6c28 100644 --- a/libs/ardour/ardour/pannable.h +++ b/libs/ardour/ardour/pannable.h @@ -36,19 +36,22 @@ class Session; class AutomationControl; class Panner; -struct Pannable : public PBD::Stateful, public Automatable, public SessionHandleRef { - Pannable (Session& s); +class LIBARDOUR_API 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 panner() const { return _panner; } - void set_panner(boost::shared_ptr); + 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; } @@ -62,34 +65,37 @@ struct Pannable : public PBD::Stateful, public Automatable, public SessionHandle 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; + 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); + XMLNode& get_state (); + XMLNode& state (bool full_state); + int set_state (const XMLNode&, int version); - bool has_state() const { return _has_state; } + bool has_state() const { return _has_state; } protected: - boost::shared_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); + 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__ */