X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fautomation_control.h;h=aeee9dab30cdcf9be4ef88bafdd843fdf873767a;hb=cf806123ca5faaef483f898daba3f7bd38ec62eb;hp=15bac5fef863c2d40f182389241af4b95c30674f;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h index 15bac5fef8..aeee9dab30 100644 --- a/libs/ardour/ardour/automation_control.h +++ b/libs/ardour/ardour/automation_control.h @@ -1,6 +1,6 @@ /* Copyright (C) 2007 Paul Davis - Author: Dave Robillard + Author: David Robillard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,8 +22,12 @@ #define __ardour_automation_control_h__ #include +#include + #include "pbd/controllable.h" #include "evoral/Control.hpp" + +#include "ardour/libardour_visibility.h" #include "ardour/automation_list.h" namespace ARDOUR { @@ -34,56 +38,67 @@ class Automatable; /** A PBD::Controllable with associated automation data (AutomationList) */ -class AutomationControl : public PBD::Controllable, public Evoral::Control +class LIBARDOUR_API AutomationControl : public PBD::Controllable, public Evoral::Control, public boost::enable_shared_from_this { public: AutomationControl(ARDOUR::Session&, - const Evoral::Parameter& parameter, - boost::shared_ptr l=boost::shared_ptr(), - const std::string& name=""); + const Evoral::Parameter& parameter, + boost::shared_ptr l=boost::shared_ptr(), + const std::string& name=""); + + ~AutomationControl (); boost::shared_ptr alist() const { return boost::dynamic_pointer_cast(_list); } - void set_list(boost::shared_ptr); + void set_list (boost::shared_ptr); inline bool automation_playback() const { - return ((ARDOUR::AutomationList*)_list.get())->automation_playback(); + return alist()->automation_playback(); } inline bool automation_write() const { - return ((ARDOUR::AutomationList*)_list.get())->automation_write(); + return alist()->automation_write(); } inline AutoState automation_state() const { - return ((ARDOUR::AutomationList*)_list.get())->automation_state(); + return alist()->automation_state(); } - inline void set_automation_state(AutoState as) { - return ((ARDOUR::AutomationList*)_list.get())->set_automation_state(as); + inline AutoStyle automation_style() const { + return alist()->automation_style(); } - inline void start_touch() { - set_touching (true); - return ((ARDOUR::AutomationList*)_list.get())->start_touch(); + void set_automation_state(AutoState as); + void set_automation_style(AutoStyle as); + void start_touch (double when); + void stop_touch (bool mark, double when); + + void set_value (double); + double get_value () const; + + virtual double internal_to_interface (double v) const { + return v; + } + + virtual double interface_to_internal (double v) const { + return v; } - inline void stop_touch() { - set_touching (false); - return ((ARDOUR::AutomationList*)_list.get())->stop_touch(); + virtual double internal_to_user (double v) const { + return v; } - /** Set the value and do the right thing based on automation state - * (e.g. record if necessary, etc.) - */ - void set_value(float val); + double lower() const { return parameter().min(); } + double upper() const { return parameter().max(); } + double normal() const { return parameter().normal(); } + bool toggled() const { return parameter().toggled(); } - /** Get the current effective value based on automation state. - */ - float get_value() const; + const ARDOUR::Session& session() const { return _session; } protected: + ARDOUR::Session& _session; };