summaryrefslogtreecommitdiff
path: root/libs/ardour/automation_control.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2015-06-17 00:39:20 +1000
committernick_m <mainsbridge@gmail.com>2015-06-17 09:54:22 +1000
commit15336d06e41fed130f1a0db9eee07b74546c7d92 (patch)
tree4ca2090c629b1e80c7d392603a83e7f603e50a8b /libs/ardour/automation_control.cc
parent15819f0896795b269811805546ea7621cb9ca213 (diff)
Add undo for automation write.
Diffstat (limited to 'libs/ardour/automation_control.cc')
-rw-r--r--libs/ardour/automation_control.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc
index 4ece790248..f2361c2b30 100644
--- a/libs/ardour/automation_control.cc
+++ b/libs/ardour/automation_control.cc
@@ -116,8 +116,16 @@ AutomationControl::set_automation_style (AutoStyle as)
void
AutomationControl::start_touch(double when)
{
- if (!_list) return;
+ if (!_list) {
+ return;
+ }
+
if (!touching()) {
+
+ if (alist()->automation_state() == Write) {
+ _before = &alist ()->get_state ();
+ }
+
if (alist()->automation_state() == Touch) {
/* subtle. aligns the user value with the playback */
set_value (get_value ());
@@ -137,13 +145,20 @@ AutomationControl::stop_touch(bool mark, double when)
if (!_list) return;
if (touching()) {
set_touching (false);
+
+ if (alist()->automation_state() == Write) {
+ _session.begin_reversible_command (string_compose (_("write %1 automation"), name ()));
+ _session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
+ _session.commit_reversible_command ();
+ }
+
if (alist()->automation_state() == Touch) {
alist()->stop_touch (mark, when);
if (!_desc.toggled) {
AutomationWatch::instance().remove_automation_watch (shared_from_this());
}
- _session.begin_reversible_command (_("record automation controller"));
+ _session.begin_reversible_command (string_compose (_("touch %1 automation"), name ()));
_session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
_session.commit_reversible_command ();
}