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<AutomationControl> pan_azimuth_control;
- boost::shared_ptr<AutomationControl> pan_elevation_control;
- boost::shared_ptr<AutomationControl> pan_width_control;
- boost::shared_ptr<AutomationControl> pan_frontback_control;
- boost::shared_ptr<AutomationControl> pan_lfe_control;
-
- boost::shared_ptr<Panner> panner() const { return _panner; }
- void set_panner(boost::shared_ptr<Panner>);
+ boost::shared_ptr<AutomationControl> pan_azimuth_control;
+ boost::shared_ptr<AutomationControl> pan_elevation_control;
+ boost::shared_ptr<AutomationControl> pan_width_control;
+ boost::shared_ptr<AutomationControl> pan_frontback_control;
+ boost::shared_ptr<AutomationControl> pan_lfe_control;
- Session& session() { return _session; }
+ boost::shared_ptr<Panner> panner() const { return _panner.lock(); }
+ void set_panner(boost::shared_ptr<Panner>);
+
+ Session& session() { return _session; }
void set_automation_state (AutoState);
AutoState automation_state() const { return _auto_state; }
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<AutomationControl>) const;
+ std::string value_as_string (boost::shared_ptr<AutomationControl>) 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<gint*>(&_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> _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> _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__ */