diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 755d0344cd..98c9251b9d 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1102,7 +1102,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void fork_region (); void do_insert_time (); - void insert_time (nframes64_t, nframes64_t, Editing::InsertTimeOption, bool, bool, bool); + void insert_time (nframes64_t, nframes64_t, Editing::InsertTimeOption, bool, bool, bool, bool, bool); void tab_to_transient (bool forward); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 258a249a16..eed740c652 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -6500,12 +6500,21 @@ Editor::do_insert_time () InsertTimeOption opt = d.intersected_region_action (); - insert_time (get_preferred_edit_position(), d.distance(), opt, d.move_glued(), d.move_markers(), d.move_tempos()); + insert_time ( + get_preferred_edit_position(), + d.distance(), + opt, + d.move_glued(), + d.move_markers(), + d.move_glued_markers(), + d.move_locked_markers(), + d.move_tempos() + ); } void Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt, - bool ignore_music_glue, bool markers_too, bool tempo_too) + bool ignore_music_glue, bool markers_too, bool glued_markers_too, bool locked_markers_too, bool tempo_too) { bool commit = false; @@ -6560,12 +6569,25 @@ Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt, Locations::LocationList::const_iterator tmp; - if ((*i)->start() >= pos) { - (*i)->set_start ((*i)->start() + frames); - if (!(*i)->is_mark()) { - (*i)->set_end ((*i)->end() + frames); + bool const was_locked = (*i)->locked (); + if (locked_markers_too) { + (*i)->unlock (); + } + + if ((*i)->position_lock_style() == AudioTime || glued_markers_too) { + + if ((*i)->start() >= pos) { + (*i)->set_start ((*i)->start() + frames); + if (!(*i)->is_mark()) { + (*i)->set_end ((*i)->end() + frames); + } + moved = true; } - moved = true; + + } + + if (was_locked) { + (*i)->lock (); } } diff --git a/gtk2_ardour/insert_time_dialog.cc b/gtk2_ardour/insert_time_dialog.cc index 1d62c36994..0acae37385 100644 --- a/gtk2_ardour/insert_time_dialog.cc +++ b/gtk2_ardour/insert_time_dialog.cc @@ -65,12 +65,19 @@ InsertTimeDialog::InsertTimeDialog (PublicEditor& e) get_vbox()->pack_start (_move_glued); _move_markers.set_label (_("Move markers")); get_vbox()->pack_start (_move_markers); + _move_markers.signal_toggled().connect (sigc::mem_fun (*this, &InsertTimeDialog::move_markers_toggled)); + _move_glued_markers.set_label (_("Move glued markers")); + get_vbox()->pack_start (_move_glued_markers); + _move_locked_markers.set_label (_("Move locked markers")); + get_vbox()->pack_start (_move_locked_markers); _move_tempos.set_label (_("Move tempo and meter changes")); get_vbox()->pack_start (_move_tempos); add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); add_button (_("Insert time"), Gtk::RESPONSE_OK); show_all (); + + move_markers_toggled (); } InsertTimeOption @@ -112,8 +119,27 @@ InsertTimeDialog::move_markers () const return _move_markers.get_active (); } +bool +InsertTimeDialog::move_glued_markers () const +{ + return _move_glued_markers.get_active (); +} + +bool +InsertTimeDialog::move_locked_markers () const +{ + return _move_locked_markers.get_active (); +} + nframes64_t InsertTimeDialog::distance () const { return _clock.current_duration (_editor.get_preferred_edit_position ()); } + +void +InsertTimeDialog::move_markers_toggled () +{ + _move_glued_markers.set_sensitive (_move_markers.get_active ()); + _move_locked_markers.set_sensitive (_move_markers.get_active ()); +} diff --git a/gtk2_ardour/insert_time_dialog.h b/gtk2_ardour/insert_time_dialog.h index f6231bc05c..450a8e9872 100644 --- a/gtk2_ardour/insert_time_dialog.h +++ b/gtk2_ardour/insert_time_dialog.h @@ -30,14 +30,20 @@ public: Editing::InsertTimeOption intersected_region_action (); bool move_glued () const; bool move_markers () const; + bool move_glued_markers () const; + bool move_locked_markers () const; bool move_tempos () const; nframes64_t distance () const; private: + void move_markers_toggled (); + PublicEditor& _editor; Gtk::ComboBoxText _intersected_combo; Gtk::CheckButton _move_glued; Gtk::CheckButton _move_markers; + Gtk::CheckButton _move_glued_markers; + Gtk::CheckButton _move_locked_markers; Gtk::CheckButton _move_tempos; AudioClock _clock; };