class AutomationControl;
class Panner;
-class Pannable : public PBD::Stateful, public Automatable, public SessionHandleRef
+class LIBARDOUR_API Pannable : public PBD::Stateful, public Automatable, public SessionHandleRef
{
public:
- Pannable (Session& s);
- ~Pannable ();
+ 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; }
PBD::Signal1<void, AutoState> automation_state_changed;
- void set_automation_style (AutoStyle m);
- AutoStyle automation_style() const { return _auto_style; }
- PBD::Signal0<void> automation_style_changed;
-
bool automation_playback() const {
- return (_auto_state & Play) || ((_auto_state & Touch) && !touching());
+ return (_auto_state & Play) || ((_auto_state & (Touch | Latch)) && !touching());
}
bool automation_write () const {
- return ((_auto_state & Write) || ((_auto_state & Touch) && touching()));
- }
+ return ((_auto_state & Write) || ((_auto_state & (Touch | Latch)) && touching()));
+ }
- std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
+ std::string value_as_string (boost::shared_ptr<const AutomationControl>) const;
void start_touch (double when);
- void stop_touch (bool mark, double when);
- bool touching() const { return g_atomic_int_get (&_touching); }
+ void stop_touch (double when);
+ 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 | Latch); }
- 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;
+ 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__ */