X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fautomation_list.h;h=a57460c31bb5cde87831e34c2cff0c467617ed36;hb=9eaced4c9d2db5e080e5fa5228616917ccac211c;hp=6e7b0007cd6fe78de4033e76c73a201c2b8fe75b;hpb=e7c47747286c16aa575456b07120e1e8e8271bd5;p=ardour.git diff --git a/libs/ardour/ardour/automation_list.h b/libs/ardour/ardour/automation_list.h index 6e7b0007cd..a57460c31b 100644 --- a/libs/ardour/ardour/automation_list.h +++ b/libs/ardour/ardour/automation_list.h @@ -21,11 +21,15 @@ #define __ardour_automation_event_h__ #include +#include #include #include #include +#include "evoral/ControlList.hpp" +#include "evoral/Parameter.hpp" + #include "pbd/undo.h" #include "pbd/xml++.h" #include "pbd/statefuldestructible.h" @@ -33,8 +37,6 @@ #include "ardour/ardour.h" -#include "evoral/ControlList.hpp" - namespace ARDOUR { class AutomationList; @@ -50,28 +52,33 @@ public: AutomationListProperty (PBD::PropertyDescriptor > d, Ptr o, Ptr c) : PBD::SharedStatefulProperty (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: - AutomationList (Evoral::Parameter id); + AutomationList (const Evoral::Parameter& id, const Evoral::ParameterDescriptor& desc); + AutomationList (const Evoral::Parameter& id); AutomationList (const XMLNode&, Evoral::Parameter id); AutomationList (const AutomationList&); AutomationList (const AutomationList&, double start, double end); ~AutomationList(); - virtual boost::shared_ptr create(Evoral::Parameter id); + virtual boost::shared_ptr create(const Evoral::Parameter& id, + const Evoral::ParameterDescriptor& desc); AutomationList& operator= (const AutomationList&); - bool operator== (const AutomationList&); void thaw (); @@ -94,6 +101,9 @@ class LIBARDOUR_API AutomationList : public PBD::StatefulDestructible, public Ev static PBD::Signal1 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(&_touching)); } @@ -105,8 +115,12 @@ class LIBARDOUR_API AutomationList : public PBD::StatefulDestructible, public Ev 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&); @@ -116,6 +130,10 @@ class LIBARDOUR_API AutomationList : public PBD::StatefulDestructible, public Ev AutoState _state; AutoStyle _style; gint _touching; + + bool operator== (const AutomationList&) const { /* not called */ abort(); return false; } + XMLNode* _before; //used for undo of touch start/stop pairs. + }; } // namespace