summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2015-08-19 14:53:35 -0500
committerBen Loftis <ben@harrisonconsoles.com>2015-08-19 14:53:35 -0500
commit84845833c1aea62bfad042580a5bbb3f18b9ad11 (patch)
tree95ab7e1a528b23df5cfd38f605e7ed8e1efbf838 /gtk2_ardour
parent11f51497f365ca55065834e86169ddd6605e4f9b (diff)
Add missing actions from MB2 for Mike:
Set-Loop-Start/End-From-Edit-Point Set-Punch-Start/End-From-Edit-Point
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.h5
-rw-r--r--gtk2_ardour/editor_actions.cc6
-rw-r--r--gtk2_ardour/editor_ops.cc122
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in8
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
@@ -6290,6 +6290,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 ()
{
framepos_t start, end;
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