diff options
-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 |