#include <algorithm>
#include "ardour/automation_list.h"
#include "ardour/event_type_map.h"
+#include "ardour/parameter_descriptor.h"
#include "evoral/Curve.hpp"
#include "pbd/stacktrace.h"
#include "pbd/enumwriter.h"
cerr << "\n";
}
#endif
-AutomationList::AutomationList (Evoral::Parameter id)
- : ControlList(id)
+AutomationList::AutomationList (const Evoral::Parameter& id, const Evoral::ParameterDescriptor& desc)
+ : ControlList(id, desc)
+{
+ _state = Off;
+ _style = Absolute;
+ g_atomic_int_set (&_touching, 0);
+
+ create_curve_if_necessary();
+
+ assert(_parameter.type() != NullAutomation);
+ AutomationListCreated(this);
+}
+
+AutomationList::AutomationList (const Evoral::Parameter& id)
+ : ControlList(id, ARDOUR::ParameterDescriptor(id))
{
_state = Off;
_style = Absolute;
* in or below the AutomationList node. It is used if @param id is non-null.
*/
AutomationList::AutomationList (const XMLNode& node, Evoral::Parameter id)
- : ControlList(id)
+ : ControlList(id, ARDOUR::ParameterDescriptor(id))
{
g_atomic_int_set (&_touching, 0);
_state = Off;
}
boost::shared_ptr<Evoral::ControlList>
-AutomationList::create(Evoral::Parameter id)
+AutomationList::create(const Evoral::Parameter& id,
+ const Evoral::ParameterDescriptor& desc)
{
- return boost::shared_ptr<Evoral::ControlList>(new AutomationList(id));
+ return boost::shared_ptr<Evoral::ControlList>(new AutomationList(id, desc));
}
void
{
switch (_parameter.type()) {
case GainAutomation:
+ case TrimAutomation:
case PanAzimuthAutomation:
case PanElevationAutomation:
case PanWidthAutomation:
}
}
-bool
-AutomationList::operator== (const AutomationList& other)
-{
- return _events == other._events;
-}
-
AutomationList&
AutomationList::operator= (const AutomationList& other)
{
if (this != &other) {
- _events.clear ();
-
- for (const_iterator i = other._events.begin(); i != other._events.end(); ++i) {
- _events.push_back (new Evoral::ControlEvent (**i));
- }
- _min_yval = other._min_yval;
- _max_yval = other._max_yval;
- _default_value = other._default_value;
+ ControlList::operator= (other);
+ _state = other._state;
+ _style = other._style;
+ _touching = other._touching;
mark_dirty ();
maybe_signal_changed ();
{
XMLNode* root = new XMLNode (X_("AutomationList"));
char buf[64];
- LocaleGuard lg (X_("POSIX"));
+ LocaleGuard lg (X_("C"));
root->add_property ("automation-id", EventTypeMap::instance().to_symbol(_parameter));
int
AutomationList::set_state (const XMLNode& node, int version)
{
- LocaleGuard lg (X_("POSIX"));
+ LocaleGuard lg (X_("C"));
XMLNodeList nlist = node.children();
XMLNode* nsos;
XMLNodeIterator niter;
}
if ((prop = node.property (X_("automation-id"))) != 0){
- _parameter = EventTypeMap::instance().new_parameter(prop->value());
+ _parameter = EventTypeMap::instance().from_symbol(prop->value());
} else {
warning << "Legacy session: automation list has no automation-id property." << endmsg;
}