}
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()));
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"));
}
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.
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
{
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()
);
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);
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());