Add option to insert time to move glued / locked markers. Fixes #3393.
authorCarl Hetherington <carl@carlh.net>
Wed, 11 Aug 2010 23:41:26 +0000 (23:41 +0000)
committerCarl Hetherington <carl@carlh.net>
Wed, 11 Aug 2010 23:41:26 +0000 (23:41 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7604 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.h
gtk2_ardour/editor_ops.cc
gtk2_ardour/insert_time_dialog.cc
gtk2_ardour/insert_time_dialog.h

index 755d0344cd767a26d89f50f9610e95f5ebeb1390..98c9251b9d2e642b3283876190a0e2cf9517af8a 100644 (file)
@@ -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);
 
index 258a249a16d600a6aae79e415e4760765535d408..eed740c6528456150b5349b14f9f81442e7d8248 100644 (file)
@@ -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 ();
                        }
                }
 
index 1d62c369941a3afd705d514f27e3e0fe9acea18d..0acae37385df6793d2558c8f31a5ced56bc28c3a 100644 (file)
@@ -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 ());
+}
index f6231bc05cc96b13d7fb1b421abcb5bc505ca7ee..450a8e9872e858016f9cc16833d78de01b927d35 100644 (file)
@@ -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;
 };