diff options
-rw-r--r-- | gtk2_ardour/ardour.bindings | 11 | ||||
-rw-r--r-- | gtk2_ardour/ardour.menus | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/editor_actions.cc | 18 | ||||
-rw-r--r-- | gtk2_ardour/editor_markers.cc | 54 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 63 | ||||
-rw-r--r-- | libs/soundtouch/SoundTouch.h | 2 |
8 files changed, 165 insertions, 7 deletions
diff --git a/gtk2_ardour/ardour.bindings b/gtk2_ardour/ardour.bindings index 5f2ed31aa5..a196c8392a 100644 --- a/gtk2_ardour/ardour.bindings +++ b/gtk2_ardour/ardour.bindings @@ -13,6 +13,7 @@ (gtk_accel_path "<Actions>/Editor/set-edit-cursor" "e") (gtk_accel_path "<Actions>/Editor/split-region" "s") (gtk_accel_path "<Actions>/Editor/set-region-sync-position" "v") +(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m") (gtk_accel_path "<Actions>/Editor/insert-region" "i") (gtk_accel_path "<Actions>/Editor/normalize-region" "n") (gtk_accel_path "<Actions>/Transport/loop" "l") @@ -45,12 +46,20 @@ (gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "minus") (gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "equal") +(gtk_accel_path "<Actions>/Editor/select-all" "<control>a") +(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<Control>e") +(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<shift><control>e") +(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<Control>p") +(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<shift><control>p") +(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<Control>d") +(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<Control>l") + (gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket") (gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket") (gtk_accel_path "<Actions>/Editor/align-regions-sync" "<meta>a") (gtk_accel_path "<Actions>/Editor/align-regions-end" "<meta><control>a") -(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<control>a") +(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<shift>a") (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "<control>b") (gtk_accel_path "<Actions>/Editor/audition-at-mouse" "period") diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus index f0a571dc20..aca4152f7a 100644 --- a/gtk2_ardour/ardour.menus +++ b/gtk2_ardour/ardour.menus @@ -67,6 +67,14 @@ <menuitem action='editor-cut'/> <menuitem action='editor-copy'/> <menuitem action='editor-paste'/> + <separator/> + <menuitem action='select-all'/> + <menuitem action='select-all-after-edit-cursor'/> + <menuitem action='select-all-before-edit-cursor'/> + <menuitem action='select-all-after-playhead'/> + <menuitem action='select-all-before-playhead'/> + <menuitem action='select-all-in-punch-range'/> + <menuitem action='select-all-in-loop-range'/> <separator/> <menuitem action='extend-range-to-start-of-region'/> <menuitem action='extend-range-to-end-of-region'/> diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 4e400601e8..37006b2f36 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1878,6 +1878,11 @@ Editor::add_dstream_context_items (Menu_Helpers::MenuList& edit_items) select_items.push_back (MenuElem (_("Select loop range"), mem_fun(*this, &Editor::set_selection_from_loop))); select_items.push_back (MenuElem (_("Select punch range"), mem_fun(*this, &Editor::set_selection_from_punch))); select_items.push_back (SeparatorElem()); + select_items.push_back (MenuElem (_("Select all after edit cursor"), bind (mem_fun(*this, &Editor::select_all_after_cursor), edit_cursor, true))); + select_items.push_back (MenuElem (_("Select all before edit cursor"), bind (mem_fun(*this, &Editor::select_all_after_cursor), edit_cursor, false))); + select_items.push_back (MenuElem (_("Select all after playhead"), bind (mem_fun(*this, &Editor::select_all_after_cursor), playhead_cursor, true))); + select_items.push_back (MenuElem (_("Select all before playhead"), bind (mem_fun(*this, &Editor::select_all_after_cursor), playhead_cursor, false))); + select_items.push_back (SeparatorElem()); edit_items.push_back (MenuElem (_("Select"), *select_menu)); @@ -1963,6 +1968,11 @@ Editor::add_bus_context_items (Menu_Helpers::MenuList& edit_items) select_items.push_back (MenuElem (_("Select loop range"), mem_fun(*this, &Editor::set_selection_from_loop))); select_items.push_back (MenuElem (_("Select punch range"), mem_fun(*this, &Editor::set_selection_from_punch))); select_items.push_back (SeparatorElem()); + select_items.push_back (MenuElem (_("Select all after edit cursor"), bind (mem_fun(*this, &Editor::select_all_after_cursor), edit_cursor, true))); + select_items.push_back (MenuElem (_("Select all before edit cursor"), bind (mem_fun(*this, &Editor::select_all_after_cursor), edit_cursor, false))); + select_items.push_back (MenuElem (_("Select all after playhead"), bind (mem_fun(*this, &Editor::select_all_after_cursor), playhead_cursor, true))); + select_items.push_back (MenuElem (_("Select all before playhead"), bind (mem_fun(*this, &Editor::select_all_after_cursor), playhead_cursor, false))); + select_items.push_back (SeparatorElem()); edit_items.push_back (MenuElem (_("Select"), *select_menu)); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index ec425ba9ca..ab89ab2a66 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -635,6 +635,7 @@ class Editor : public PublicEditor void cursor_to_region_point (Cursor*, ARDOUR::RegionPoint, int32_t dir); void cursor_to_selection_start (Cursor *); void cursor_to_selection_end (Cursor *); + void select_all_after_cursor (Cursor *, bool); ARDOUR::Region* find_next_region (jack_nframes_t, ARDOUR::RegionPoint, int32_t dir, TrackViewList&, TimeAxisView ** = 0); @@ -1002,7 +1003,8 @@ class Editor : public PublicEditor void cursor_align (bool playhead_to_edit); void remove_last_capture (); - + void select_all_from_loop(); + void select_all_from_punch(); void set_selection_from_range (ARDOUR::Location&); void set_selection_from_punch (); void set_selection_from_loop (); @@ -1248,6 +1250,7 @@ class Editor : public PublicEditor void marker_menu_rename (); void marker_menu_hide (); void marker_menu_loop_range (); + void marker_menu_select_all_from_range (); void marker_menu_play_from (); void marker_menu_set_playhead (); void marker_menu_set_from_playhead (); @@ -1261,6 +1264,7 @@ class Editor : public PublicEditor void tm_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); void transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); void new_transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); + void build_range_marker_menu (); void build_marker_menu (); void build_tm_marker_menu (); void build_transport_marker_menu (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 5385ae7b0f..5f92c62bd7 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -76,7 +76,23 @@ Editor::register_actions () act = ActionManager::register_action (editor_actions, "edit-cursor-to-range-end", _("edit cursor to range end"), bind (mem_fun(*this, &Editor::cursor_to_selection_end), edit_cursor)); ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "select-all", _("select all"), bind (mem_fun(*this, &Editor::select_all), false)); ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "select-all-after-edit-cursor", _("select all after edit cursor"), bind (mem_fun(*this, &Editor::select_all_after_cursor), edit_cursor, true)); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "select-all-before-edit-cursor", _("select all before edit cursor"), bind (mem_fun(*this, &Editor::select_all_after_cursor), edit_cursor, false)); + ActionManager::session_sensitive_actions.push_back (act); + + act = ActionManager::register_action (editor_actions, "select-all-after-playhead", _("select all after playhead"), bind (mem_fun(*this, &Editor::select_all_after_cursor), playhead_cursor, true)); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "select-all-before-playhead", _("select all before playhead"), bind (mem_fun(*this, &Editor::select_all_after_cursor), playhead_cursor, false)); + ActionManager::session_sensitive_actions.push_back (act); + + act = ActionManager::register_action (editor_actions, "select-all-in-punch-range", _("select all in punch range"), mem_fun(*this, &Editor::select_all_from_punch)); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "select-all-in-loop-range", _("select all in loop range"), mem_fun(*this, &Editor::select_all_from_loop)); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "jump-forward-to-mark", _("jump forward to mark"), mem_fun(*this, &Editor::jump_forward_to_mark)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "jump-backward-to-mark", _("jump backward to mark"), mem_fun(*this, &Editor::jump_backward_to_mark)); @@ -136,6 +152,7 @@ Editor::register_actions () ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "align-regions-end-relative", _("align regions end relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::End)); ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "align-regions-sync", _("align regions sync"), bind (mem_fun(*this, &Editor::align), ARDOUR::SyncPoint)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "align-regions-sync-relative", _("align regions sync relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::SyncPoint)); @@ -146,6 +163,7 @@ Editor::register_actions () act = ActionManager::register_action (editor_actions, "brush-at-mouse", _("brush at mouse"), mem_fun(*this, &Editor::kbd_brush)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "set-edit-cursor", _("set edit cursor"), mem_fun(*this, &Editor::kbd_set_edit_cursor)); + ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "mute-unmute-region", _("mute/unmute region"), mem_fun(*this, &Editor::kbd_mute_unmute_region)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "set-playhead", _("set playhead"), mem_fun(*this, &Editor::kbd_set_playhead_cursor)); diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 466aa09acd..568226fb60 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -386,10 +386,13 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item) } marker_menu_item = item; transport_marker_menu->popup (1, ev->time); - } - else { + } else { if (marker_menu == 0) { + if (loc->is_mark()) { build_marker_menu (); + } else { + build_range_marker_menu (); + } } // GTK2FIX use action group sensitivity @@ -453,6 +456,33 @@ Editor::build_marker_menu () items.push_back (MenuElem (_("Rename"), mem_fun(*this, &Editor::marker_menu_rename))); items.push_back (MenuElem (_("Hide"), mem_fun(*this, &Editor::marker_menu_hide))); items.push_back (MenuElem (_("Remove"), mem_fun(*this, &Editor::marker_menu_remove))); + +} + +void +Editor::build_range_marker_menu () +{ + using namespace Menu_Helpers; + + marker_menu = new Menu; + MenuList& items = marker_menu->items(); + marker_menu->set_name ("ArdourContextMenu"); + + items.push_back (MenuElem (_("Locate to"), mem_fun(*this, &Editor::marker_menu_set_playhead))); + items.push_back (MenuElem (_("Play from"), mem_fun(*this, &Editor::marker_menu_play_from))); + items.push_back (MenuElem (_("Loop range"), mem_fun(*this, &Editor::marker_menu_loop_range))); + items.push_back (MenuElem (_("Set from playhead"), mem_fun(*this, &Editor::marker_menu_set_from_playhead))); + items.push_back (MenuElem (_("Set from range"), mem_fun(*this, &Editor::marker_menu_set_from_selection))); + + items.push_back (SeparatorElem()); + + items.push_back (MenuElem (_("Rename"), mem_fun(*this, &Editor::marker_menu_rename))); + items.push_back (MenuElem (_("Hide"), mem_fun(*this, &Editor::marker_menu_hide))); + items.push_back (MenuElem (_("Remove"), mem_fun(*this, &Editor::marker_menu_remove))); + + items.push_back (SeparatorElem()); + items.push_back (MenuElem (_("Select all in Range"), mem_fun(*this, &Editor::marker_menu_select_all_from_range))); + } void @@ -498,6 +528,7 @@ Editor::build_transport_marker_menu () items.push_back (MenuElem (_("Set from range"), mem_fun(*this, &Editor::marker_menu_set_from_selection))); items.push_back (SeparatorElem()); items.push_back (MenuElem (_("Hide"), mem_fun(*this, &Editor::marker_menu_hide))); + } void @@ -519,6 +550,25 @@ Editor::marker_menu_hide () } void +Editor::marker_menu_select_all_from_range () +{ + Marker* marker; + + if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { + fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; + /*NOTREACHED*/ + } + Location* l; + bool is_start; + + if ((l = find_location_from_marker (marker, is_start)) != 0) { + + select_all_within (l->start(), l->end(), 0, DBL_MAX, false); + } + +} + +void Editor::marker_menu_play_from () { Marker* marker; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index e9439b60d6..640d8b09b8 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1306,11 +1306,48 @@ Editor::set_selection_from_loop() if ((location = session->locations()->auto_loop_location()) == 0) { return; } - set_selection_from_range (*location); } void +Editor::select_all_from_punch() +{ + Location* location; + list<Selectable *> touched; + if ((location = session->locations()->auto_punch_location()) == 0) { + return; + } + + for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { + if ((*iter)->hidden()) { + continue; + } + (*iter)->get_selectables (location->start(), location->end(), 0, DBL_MAX, touched); + } + selection->set (touched); + +} + +void +Editor::select_all_from_loop() +{ + Location* location; + list<Selectable *> touched; + + if ((location = session->locations()->auto_loop_location()) == 0) { + return; + } + for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { + if ((*iter)->hidden()) { + continue; + } + (*iter)->get_selectables (location->start(), location->end(), 0, DBL_MAX, touched); + } + selection->set (touched); + +} + +void Editor::set_selection_from_range (Location& range) { if (clicked_trackview == 0) { @@ -1323,6 +1360,29 @@ Editor::set_selection_from_range (Location& range) } void +Editor::select_all_after_cursor (Cursor *cursor, bool after) +{ + jack_nframes_t start; + jack_nframes_t end; + list<Selectable *> touched; + + if (after) { + start = cursor->current_frame ; + end = session->current_end_frame(); + } else { + start = 0; + end = cursor->current_frame ; + } + for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { + if ((*iter)->hidden()) { + continue; + } + (*iter)->get_selectables (start, end, 0, DBL_MAX, touched); + } + selection->set (touched); +} + +void Editor::amplitude_zoom_step (bool in) { gdouble zoom = 1.0; @@ -2654,7 +2714,6 @@ Editor::set_region_sync_from_edit_cursor () } Region& region (clicked_regionview->region); - begin_reversible_command (_("set sync from edit cursor")); session->add_undo (region.playlist()->get_memento()); region.set_sync_position (edit_cursor->current_frame); diff --git a/libs/soundtouch/SoundTouch.h b/libs/soundtouch/SoundTouch.h index 3fe2441792..e6d812e95d 100644 --- a/libs/soundtouch/SoundTouch.h +++ b/libs/soundtouch/SoundTouch.h @@ -159,7 +159,7 @@ public: static const char *getVersionString(); /// Get SoundTouch library version Id - static uint SoundTouch::getVersionId(); + static uint getVersionId(); /// Sets new rate control value. Normal rate = 1.0, smaller values /// represent slower rate, larger faster rates. |