From 84845833c1aea62bfad042580a5bbb3f18b9ad11 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Wed, 19 Aug 2015 14:53:35 -0500 Subject: [PATCH] Add missing actions from MB2 for Mike: Set-Loop-Start/End-From-Edit-Point Set-Punch-Start/End-From-Edit-Point --- gtk2_ardour/editor.h | 5 ++ gtk2_ardour/editor_actions.cc | 6 ++ gtk2_ardour/editor_ops.cc | 122 ++++++++++++++++++++++++++++ gtk2_ardour/mnemonic-us.bindings.in | 8 +- 4 files changed, 139 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index c137bd736a..3f10d05797 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1480,6 +1480,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD int scrub_reverse_distance; void scrub (framepos_t, double); + void set_punch_start_from_edit_point (); + void set_punch_end_from_edit_point (); + void set_loop_start_from_edit_point (); + void set_loop_end_from_edit_point (); + void keyboard_selection_begin (); void keyboard_selection_finish (bool add); bool have_pending_keyboard_selection; diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 6b64471892..1a40ba99b7 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -365,6 +365,12 @@ Editor::register_actions () reg_sens (editor_actions, "start-range", _("Start Range"), sigc::mem_fun(*this, &Editor::keyboard_selection_begin)); reg_sens (editor_actions, "finish-range", _("Finish Range"), sigc::bind (sigc::mem_fun(*this, &Editor::keyboard_selection_finish), false)); + reg_sens (editor_actions, "start-punch-range", _("Start Punch Range"), sigc::mem_fun(*this, &Editor::set_punch_start_from_edit_point)); + reg_sens (editor_actions, "finish-punch-range", _("Finish Punch Range"), sigc::mem_fun(*this, &Editor::set_punch_end_from_edit_point)); + + reg_sens (editor_actions, "start-loop-range", _("Start Loop Range"), sigc::mem_fun(*this, &Editor::set_loop_start_from_edit_point)); + reg_sens (editor_actions, "finish-loop-range", _("Finish Loop Range"), sigc::mem_fun(*this, &Editor::set_loop_end_from_edit_point)); + reg_sens (editor_actions, "alt-start-range", _("Start Range"), sigc::mem_fun(*this, &Editor::keyboard_selection_begin)); reg_sens (editor_actions, "alt-finish-range", _("Finish Range"), sigc::bind (sigc::mem_fun(*this, &Editor::keyboard_selection_finish), false)); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 6b1960e30a..52ef86771a 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -6289,6 +6289,128 @@ Editor::set_session_extents_from_selection () } } +void +Editor::set_punch_start_from_edit_point () +{ + if (_session) { + + framepos_t start; + framepos_t end; + + //use the existing loop end, if any + Location* tpl = transport_punch_location(); + if (tpl) + end = tpl->end(); + + if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) { + start = _session->audible_frame(); + } else { + start = get_preferred_edit_position(); + } + + //snap the selection start/end + snap_to(start); + + //if there's not already a sensible selection endpoint, go "forever" + if ( start > end ) { + end = max_framepos; + } + + set_punch_range (start, end, _("set punch start from EP")); + } + +} + +void +Editor::set_punch_end_from_edit_point () +{ +printf("set punch end\n"); + if (_session) { + + framepos_t start; + framepos_t end; + + //use the existing loop end, if any + Location* tpl = transport_punch_location(); + if (tpl) + start = tpl->start(); + + if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) { + end = _session->audible_frame(); + } else { + end = get_preferred_edit_position(); + } + + //snap the selection start/end + snap_to(end); + +printf("set punch %d, %d\n", start, end); + set_punch_range (start, end, _("set punch end from EP")); + + } +} + +void +Editor::set_loop_start_from_edit_point () +{ +printf("set loop start\n"); + if (_session) { + + framepos_t start; + framepos_t end; + + //use the existing loop end, if any + Location* tpl = transport_loop_location(); + if (tpl) + end = tpl->end(); + + if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) { + start = _session->audible_frame(); + } else { + start = get_preferred_edit_position(); + } + + //snap the selection start/end + snap_to(start); + + //if there's not already a sensible selection endpoint, go "forever" + if ( start > end ) { + end = max_framepos; + } + +printf("set loop %d, %d\n", start, end); + set_loop_range (start, end, _("set loop start from EP")); + } + +} + +void +Editor::set_loop_end_from_edit_point () +{ + if (_session) { + + framepos_t start; + framepos_t end; + + //use the existing loop end, if any + Location* tpl = transport_loop_location(); + if (tpl) + start = tpl->start(); + + if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) { + end = _session->audible_frame(); + } else { + end = get_preferred_edit_position(); + } + + //snap the selection start/end + snap_to(end); + + set_loop_range (start, end, _("set loop end from EP")); + + } +} + void Editor::set_punch_from_region () { diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in index 6819ef92f8..df7dd6fe0d 100644 --- a/gtk2_ardour/mnemonic-us.bindings.in +++ b/gtk2_ardour/mnemonic-us.bindings.in @@ -282,8 +282,12 @@ This mode provides many different operations on both regions and control points, @-group|Editor/start-range|comma|some text @-group|Editor/finish-range|period|some text -@-group|Editor/alt-start-range|<@PRIMARY@>KP_Down|some text -@-group|Editor/alt-finish-range|<@PRIMARY@>KP_Up|some text +@-group|Editor/alt-start-range|<@PRIMARY@>KP_Down|set the start of the range selection +@-group|Editor/alt-finish-range|<@PRIMARY@>KP_Up|set the end of the range selection +@-group|Editor/start-punch-range|<@PRIMARY@>comma|set the start of the Punch range +@-group|Editor/finish-punch-range|<@PRIMARY@>period|set the end of the Punch range +@-group|Editor/start-loop-range|<@SECONDARY@>comma|set the start of the Loop range +@-group|Editor/finish-loop-range|<@SECONDARY@>period|set the end of the Loop range @markers|Editor/alternate-add-location-from-playhead|KP_Enter|add mark at playhead @markers|Editor/alternate-remove-location-from-playhead|<@PRIMARY@>KP_Enter|add mark at playhead -- 2.30.2