summaryrefslogtreecommitdiff
path: root/libs/ardour/automation_control.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2015-09-27 00:57:52 +1000
committernick_m <mainsbridge@gmail.com>2015-10-20 00:53:28 +1100
commit9c102fa8d20b932f9a9879298764c0351a0e5acc (patch)
treeed9bbf05a2b6771d1dbe9e86b5e586f24c2debc1 /libs/ardour/automation_control.cc
parent877b258c74aa6e2fa737ca9112900dca8bce6628 (diff)
Make automation record undo per pass rather than per touch.
Diffstat (limited to 'libs/ardour/automation_control.cc')
-rw-r--r--libs/ardour/automation_control.cc23
1 files changed, 10 insertions, 13 deletions
diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc
index 26ea53cbd2..0e2355e708 100644
--- a/libs/ardour/automation_control.cc
+++ b/libs/ardour/automation_control.cc
@@ -88,8 +88,6 @@ AutomationControl::set_automation_state (AutoState as)
}
if (as == Write) {
- /* get state for undo */
- _before = &alist ()->get_state ();
AutomationWatch::instance().add_automation_watch (shared_from_this());
} else if (as == Touch) {
if (!touching()) {
@@ -127,7 +125,6 @@ AutomationControl::start_touch(double when)
if (alist()->automation_state() == Touch) {
/* subtle. aligns the user value with the playback */
set_value (get_value ());
- _before = &alist ()->get_state ();
alist()->start_touch (when);
if (!_desc.toggled) {
AutomationWatch::instance().add_automation_watch (shared_from_this());
@@ -144,25 +141,25 @@ AutomationControl::stop_touch(bool mark, double when)
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 (string_compose (_("touch %1 automation"), name ()));
- _session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
- _session.commit_reversible_command ();
+ }
}
}
}
+void
+AutomationControl::commit_transaction ()
+{
+ if (alist ()->before ()) {
+ _session.begin_reversible_command (string_compose (_("record %1 automation"), name ()));
+ _session.commit_reversible_command (new MementoCommand<AutomationList> (*alist ().get (), alist ()->before (), &alist ()->get_state ()));
+ }
+}
+
double
AutomationControl::internal_to_interface (double val) const
{