Tempo ramps - code layout, check_solved() is lock-style agnostic, remove uncalled...
[ardour.git] / gtk2_ardour / automation_time_axis.cc
index c9deae95dfa529485cf39b08e7e432600ca23884..ae0a691710a32138476356a59b80051724ddc5e3 100644 (file)
@@ -110,7 +110,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
        }
        tipname += nom;
        _name = tipname;
-       
+
        CANVAS_DEBUG_NAME (_canvas_display, string_compose ("main for auto %2/%1", _name, r->name()));
        CANVAS_DEBUG_NAME (selection_group, string_compose ("selections for auto %2/%1", _name, r->name()));
        CANVAS_DEBUG_NAME (_ghost_group, string_compose ("ghosts for auto %2/%1", _name, r->name()));
@@ -178,7 +178,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
        if (name_label.get_parent()) {
                name_label.get_parent()->remove (name_label);
        }
-       
+
        name_label.set_text (_name);
        name_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
        name_label.set_name (X_("TrackParameterName"));
@@ -618,7 +618,7 @@ AutomationTimeAxisView::add_automation_event (GdkEvent* event, framepos_t when,
        }
 
        boost::shared_ptr<AutomationList> list = _line->the_list ();
-       
+
        if (list->in_write_pass()) {
                /* do not allow the GUI to add automation events during an
                   automation write pass.
@@ -628,28 +628,31 @@ AutomationTimeAxisView::add_automation_event (GdkEvent* event, framepos_t when,
 
        double x = 0;
 
-       _canvas_display->canvas_to_item (x, y);
+       _line->grab_item().canvas_to_item (x, y);
 
        /* compute vertical fractional position */
 
-       y = 1.0 - (y / height);
+       y = 1.0 - (y / _line->height());
 
        /* map using line */
 
        _line->view_to_model_coord (x, y);
 
-
        _editor.snap_to_with_modifier (when, event);
 
-       _editor.begin_reversible_command (_("add automation event"));
        XMLNode& before = list->get_state();
+       std::list<Selectable*> results;
+       if (list->editor_add (when, y, with_guard_points)) {
+               XMLNode& after = list->get_state();
+               _editor.begin_reversible_command (_("add automation event"));
+               _session->add_command (new MementoCommand<ARDOUR::AutomationList> (*list.get (), &before, &after));
 
-       list->editor_add (when, y, with_guard_points);
+               _line->get_selectables (when, when, 0.0, 1.0, results);
+               _editor.get_selection ().set (results);
 
-       XMLNode& after = list->get_state();
-       _session->add_command (new MementoCommand<ARDOUR::AutomationList> (*list.get (), &before, &after));
-       _editor.commit_reversible_command ();
-       _session->set_dirty ();
+               _editor.commit_reversible_command ();
+               _session->set_dirty ();
+       }
 }
 
 bool
@@ -781,11 +784,11 @@ AutomationTimeAxisView::add_line (boost::shared_ptr<AutomationLine> line)
 {
        if (_control && line) {
                assert(line->the_list() == _control->list());
-               
+
                _control->alist()->automation_state_changed.connect (
                        _list_connections, invalidator (*this), boost::bind (&AutomationTimeAxisView::automation_state_changed, this), gui_context()
                        );
-               
+
                _control->alist()->InterpolationChanged.connect (
                        _list_connections, invalidator (*this), boost::bind (&AutomationTimeAxisView::interpolation_changed, this, _1), gui_context()
                        );
@@ -860,17 +863,17 @@ AutomationTimeAxisView::what_has_visible_automation (const boost::shared_ptr<Aut
        assert (automatable);
 
        Automatable::Controls& controls (automatable->controls());
-       
+
        for (Automatable::Controls::iterator i = controls.begin(); i != controls.end(); ++i) {
-               
+
                boost::shared_ptr<AutomationControl> ac = boost::dynamic_pointer_cast<AutomationControl> (i->second);
 
                if (ac && ac->alist()) {
-                       
+
                        const XMLNode* gui_node = ac->extra_xml ("GUI");
-                       
+
                        if (gui_node) {
-                               const XMLProperty* prop = gui_node->property ("shown");
+                               XMLProperty const * prop = gui_node->property ("shown");
                                if (prop) {
                                        if (string_is_affirmative (prop->value())) {
                                                visible.insert (i->first);
@@ -909,8 +912,8 @@ AutomationTimeAxisView::state_id() const
        if (_automatable != _route && _control) {
                return string_compose ("automation %1", _control->id().to_s());
        } else if (_parameter) {
-               return string_compose ("automation %1 %2/%3/%4", 
-                                      _route->id(), 
+               return string_compose ("automation %1 %2/%3/%4",
+                                      _route->id(),
                                       _parameter.type(),
                                       _parameter.id(),
                                       (int) _parameter.channel());