+ if (!_list) return;
+ alist()->set_automation_style (as);
+}
+
+void
+AutomationControl::start_touch(double when)
+{
+ if (!_list) {
+ return;
+ }
+
+ if (!touching()) {
+
+ 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());
+ }
+ }
+ set_touching (true);
+ }
+}
+
+void
+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 (string_compose (_("touch %1 automation"), name ()));
+ _session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
+ _session.commit_reversible_command ();
+ }
+ }