From 0f1c7b1d71078a25c1df80e7c95d59229f613414 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Wed, 2 Jul 2014 16:56:30 -0500 Subject: start-range and finish-range should graphically show the range being created. also add bindings for comma and period in addition to existing bindings which require a numpad. the old ones are now alternates. all primary functionality should appear on the qwerrty, and the numpad should be considered an ergonomic redundant alternative if you have one --- gtk2_ardour/ardour.menus.in | 5 ++- gtk2_ardour/editor.cc | 3 -- gtk2_ardour/editor_actions.cc | 6 +++- gtk2_ardour/editor_keys.cc | 72 ++++++++++++++++++++++++++++++++++++- gtk2_ardour/editor_selection.cc | 14 ++------ gtk2_ardour/mnemonic-us.bindings.in | 8 ++--- 6 files changed, 87 insertions(+), 21 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 9d520b1df7..5ce4cf9736 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -13,6 +13,10 @@ + + + + #ifdef GTKOSX #endif @@ -191,7 +195,6 @@ - diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index f1c3c1e702..053e285091 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -4546,11 +4546,8 @@ Editor::get_regions_from_selection_and_edit_point () if (_edit_point == EditAtMouse && entered_regionview && !selection->regions.contains (entered_regionview)) { regions.add (entered_regionview); - } else { - regions = selection->regions; } - if (regions.empty() && _edit_point != EditAtMouse) { TrackViewList tracks = selection->tracks; diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index f49fd06906..4570736617 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -333,7 +333,11 @@ 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, "finish-add-range", _("Finish Add Range"), sigc::bind (sigc::mem_fun(*this, &Editor::keyboard_selection_finish), true)); + + 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)); + +// reg_sens (editor_actions, "finish-add-range", _("Finish Add Range"), sigc::bind (sigc::mem_fun(*this, &Editor::keyboard_selection_finish), true)); reg_sens ( editor_actions, diff --git a/gtk2_ardour/editor_keys.cc b/gtk2_ardour/editor_keys.cc index 93eba4b79f..2900e28c2a 100644 --- a/gtk2_ardour/editor_keys.cc +++ b/gtk2_ardour/editor_keys.cc @@ -37,7 +37,77 @@ using namespace ARDOUR; using namespace PBD; +using namespace Editing; +void +Editor::keyboard_selection_finish (bool add) +{ + if (_session) { + + framepos_t start = selection->time.start(); + framepos_t end; + + if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) { + end = _session->audible_frame(); + } else { + end = get_preferred_edit_position(); + } + + //snap the selection start/end + snap_to(start); + + //if no tracks are selected and we're working from the keyboard, enable all tracks (_something_ has to be selected for any range selection) + if ( (_edit_point == EditAtPlayhead) && selection->tracks.empty() ) + select_all_tracks(); + + selection->set (start, end); + + //if session is playing a range, cancel that +// if (_session->get_play_range()) +// _session->request_cancel_play_range(); + + } +} + +void +Editor::keyboard_selection_begin () +{ + if (_session) { + + framepos_t start; + framepos_t end = selection->time.end_frame(); //0 if no current selection + + 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; + } + + //if no tracks are selected and we're working from the keyboard, enable all tracks (_something_ has to be selected for any range selection) + if ( selection->tracks.empty() ) + select_all_tracks(); + + selection->set (start, end); + + //if session is playing a range, cancel that + if (_session->get_play_range()) + _session->request_transport_speed ( 1.0 ); + + //if join playhead, locate to the newly selected start +// if ( !_session->transport_rolling() && Config->get_join_play_range() ) +// _session->request_cancel_play_range(); + } +} + +/* void Editor::keyboard_selection_finish (bool add) { @@ -82,7 +152,7 @@ Editor::keyboard_selection_begin () } } -} +}*/ void Editor::keyboard_paste () diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 01d3d3e418..203df9f322 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -1378,17 +1378,7 @@ Editor::select_all (Selection::Operation op) { list touched; - TrackViewList ts; - - if (selection->tracks.empty()) { - if (entered_track) { - ts.push_back (entered_track); - } else { - ts = track_views; - } - } else { - ts = selection->tracks; - } + TrackViewList ts = track_views; if (_internal_editing) { @@ -1418,8 +1408,10 @@ Editor::select_all (Selection::Operation op) continue; } (*iter)->get_selectables (0, max_framepos, 0, DBL_MAX, touched); + selection->add (*iter); } + begin_reversible_command (_("select all")); switch (op) { case Selection::Add: diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in index 9b4479a4f7..8ab050e867 100644 --- a/gtk2_ardour/mnemonic-us.bindings.in +++ b/gtk2_ardour/mnemonic-us.bindings.in @@ -275,10 +275,10 @@ This mode provides many different operations on both regions and control points, @rop|Region/nudge-forward|KP_Add|nudge forward @-group|Editor/nudge-next-forward|<@PRIMARY@>KP_Add|some text -@-group|Editor/start-range|<@PRIMARY@>KP_Down|some text - -@-group|Editor/finish-range|<@PRIMARY@>KP_Up|some text -@-group|Editor/finish-add-range|<@TERTIARY@><@PRIMARY@>KP_Up|some text +@-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 @markers|Editor/add-location-from-playhead|KP_Enter|add mark at playhead @wvis|Transport/focus-on-clock|KP_Divide|focus on main clock -- cgit v1.2.3