diff options
author | Ben Loftis <ben@harrisonconsoles.com> | 2014-07-02 16:56:30 -0500 |
---|---|---|
committer | Ben Loftis <ben@harrisonconsoles.com> | 2014-07-02 17:35:37 -0500 |
commit | 0f1c7b1d71078a25c1df80e7c95d59229f613414 (patch) | |
tree | 45c55231f6bc28e0da22b14290475fbe596d1cb1 /gtk2_ardour | |
parent | 007664c3dbd62f81cc32b10f54240df5182ad103 (diff) |
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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 5 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/editor_actions.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/editor_keys.cc | 72 | ||||
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 14 | ||||
-rw-r--r-- | gtk2_ardour/mnemonic-us.bindings.in | 8 |
6 files changed, 87 insertions, 21 deletions
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 @@ <accelerator action='toggle-edit-mode'/> <accelerator action='toggle-midi-input-active'/> <accelerator action='escape'/> + + <accelerator action='alt-start-range'/> + <accelerator action='alt-finish-range'/> + #ifdef GTKOSX <accelerator action='Quit'/> #endif @@ -191,7 +195,6 @@ <menuitem action='move-range-end-to-next-region-boundary'/> <menuitem action='start-range'/> <menuitem action='finish-range'/> - <menuitem action='finish-add-range'/> <separator/> <menuitem action='select-next-route'/> <menuitem action='select-prev-route'/> 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,10 +37,80 @@ 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) +{ if (_session && have_pending_keyboard_selection) { framepos_t end; @@ -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<Selectable *> 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 |