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
{
public:
static PBD::Signal1<void,AutomationList*> AutomationListCreated;
+ void start_write_pass (double when);
+ void write_pass_finished (double when, double thinning_factor=0.0);
+
void start_touch (double when);
void stop_touch (bool mark, double when);
bool touching() const { return g_atomic_int_get (const_cast<gint*>(&_touching)); }
XMLNode& state (bool full);
XMLNode& serialize_events ();
+ Command* memento_command (XMLNode* before, XMLNode* after);
+
bool operator!= (const AutomationList &) const;
+ XMLNode* before () { XMLNode* rv = _before; _before = 0; return rv; }
+ void clear_history ();
private:
void create_curve_if_necessary ();
int deserialize_events (const XMLNode&);
gint _touching;
bool operator== (const AutomationList&) const { /* not called */ abort(); return false; }
+ XMLNode* _before; //used for undo of touch start/stop pairs.
+
};
} // namespace