+class AutomationList;
+
+/** A SharedStatefulProperty for AutomationLists */
+class LIBARDOUR_API AutomationListProperty : public PBD::SharedStatefulProperty<AutomationList>
+{
+public:
+ AutomationListProperty (PBD::PropertyDescriptor<boost::shared_ptr<AutomationList> > d, Ptr p)
+ : PBD::SharedStatefulProperty<AutomationList> (d.property_id, p)
+ {}
+
+ AutomationListProperty (PBD::PropertyDescriptor<boost::shared_ptr<AutomationList> > d, Ptr o, Ptr c)
+ : PBD::SharedStatefulProperty<AutomationList> (d.property_id, o, c)
+ {}
+
+ PBD::PropertyBase* clone () const;
+
+private:
+ /* No copy-construction nor assignment */
+ AutomationListProperty (AutomationListProperty const &);
+ AutomationListProperty& operator= (AutomationListProperty const &);
+};
+
+/** AutomationList is a stateful wrapper around Evoral::ControlList.
+ * It includes session-specifics (such as automation state), control logic (e.g. touch, signals)
+ * and acts as proxy to the underlying ControlList which holds the actual data.
+ */
+class LIBARDOUR_API AutomationList : public PBD::StatefulDestructible, public Evoral::ControlList