summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_ops.cc36
-rw-r--r--gtk2_ardour/insert_time_dialog.cc26
-rw-r--r--gtk2_ardour/insert_time_dialog.h6
4 files changed, 62 insertions, 8 deletions
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;
};