diff --git a/gtk2_ardour/cue_editor.cc b/gtk2_ardour/cue_editor.cc index a815160493..240f7790a2 100644 --- a/gtk2_ardour/cue_editor.cc +++ b/gtk2_ardour/cue_editor.cc @@ -35,6 +35,7 @@ #include "cue_editor.h" #include "editor_drag.h" #include "gui_thread.h" +#include "public_editor.h" #include "timers.h" #include "ui_config.h" @@ -562,7 +563,7 @@ CueEditor::loop_button_press (GdkEventButton* ev) if (_session->get_play_loop()) { _session->request_play_loop (false); } else { - set_loop_range (_region->position(), _region->end(), _("loop region")); + PublicEditor::instance().set_loop_range (_region->position(), _region->end(), _("loop region")); _session->request_play_loop (true); } diff --git a/gtk2_ardour/editing_context.cc b/gtk2_ardour/editing_context.cc index 31ee03c6e9..c700595871 100644 --- a/gtk2_ardour/editing_context.cc +++ b/gtk2_ardour/editing_context.cc @@ -3475,40 +3475,6 @@ EditingContext::transport_loop_location() } } -void -EditingContext::set_loop_range (timepos_t const & start, timepos_t const & end, string cmd) -{ - EC_LOCAL_TEMPO_SCOPE; - - if (!_session) { - return; - } - if (_session->get_play_loop () && _session->actively_recording ()) { - return; - } - - begin_reversible_command (cmd); - - Location* tll; - - if ((tll = transport_loop_location()) == 0) { - Location* loc = new Location (*_session, start, end, _("Loop"), Location::IsAutoLoop); - XMLNode &before = _session->locations()->get_state(); - _session->locations()->add (loc, true); - _session->set_auto_loop_location (loc); - XMLNode &after = _session->locations()->get_state(); - add_command (new MementoCommand(*(_session->locations()), &before, &after)); - } else { - XMLNode &before = tll->get_state(); - tll->set_hidden (false, this); - tll->set (start, end); - XMLNode &after = tll->get_state(); - add_command (new MementoCommand(*tll, &before, &after)); - } - - commit_reversible_command (); -} - bool EditingContext::allow_trim_cursors () const { diff --git a/gtk2_ardour/editing_context.h b/gtk2_ardour/editing_context.h index e9bace65fa..54b87cfb40 100644 --- a/gtk2_ardour/editing_context.h +++ b/gtk2_ardour/editing_context.h @@ -481,8 +481,6 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider, virtual void update_grid (); - void set_loop_range (Temporal::timepos_t const & start, Temporal::timepos_t const & end, std::string cmd); - virtual bool allow_trim_cursors () const; virtual void make_a_region() {} diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 1f38dd21e5..d212ea3d2c 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -4072,6 +4072,41 @@ Editor::_get_preferred_edit_position (EditIgnoreOption ignore, bool from_context return where; } +void +Editor::set_loop_range (timepos_t const & start, timepos_t const & end, string cmd) +{ + if (!_session) { + return; + } + if (_session->get_play_loop () && _session->actively_recording ()) { + return; + } + + begin_reversible_command (cmd); + + Location* tll; + + if ((tll = transport_loop_location()) == 0) { + Location* loc = new Location (*_session, start, end, _("Loop"), Location::IsAutoLoop); + XMLNode &before = _session->locations()->get_state(); + _session->locations()->add (loc, true); + _session->set_auto_loop_location (loc); + XMLNode &after = _session->locations()->get_state(); + add_command (new MementoCommand(*(_session->locations()), &before, &after)); + } else if (tll->start() != start || tll->end () != end){ + XMLNode &before = tll->get_state(); + tll->set_hidden (false, this); + tll->set (start, end); + XMLNode &after = tll->get_state(); + add_command (new MementoCommand(*tll, &before, &after)); + } else { + abort_reversible_command (); + return; + } + + commit_reversible_command (); +} + void Editor::set_punch_range (timepos_t const & start, timepos_t const & end, string cmd) { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index baa1767fff..eeb891d6d5 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1413,6 +1413,7 @@ private: void set_loop_from_region (bool play); + void set_loop_range (Temporal::timepos_t const & start, Temporal::timepos_t const & end, std::string cmd); void set_punch_range (Temporal::timepos_t const & start, Temporal::timepos_t const & end, std::string cmd); void add_tempo_from_playhead_cursor (); diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index eb0e46b9bf..c603dd9ca0 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -192,6 +192,7 @@ public: } virtual void add_location_mark_with_flag (Temporal::timepos_t const & where, ARDOUR::Location::Flags, int32_t cue_id) = 0; virtual void remove_tracks () = 0; + virtual void set_loop_range (Temporal::timepos_t const & start, Temporal::timepos_t const & end, std::string cmd) = 0; virtual void set_punch_range (Temporal::timepos_t const & start, Temporal::timepos_t const & end, std::string cmd) = 0; void jump_forward_to_mark () {