From 302d88d60448753be8755192716e77cefdfb1187 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 5 Dec 2008 10:31:26 +0000 Subject: apply/merge/redo carl & colin's patches for making range markers from the region selection so that there are now 1 actions: 1 range for all selected regions, or 1 range per selected region; add these to the relevant menus git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4291 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour.menus.in | 5 ++++ gtk2_ardour/editor.cc | 7 ++++- gtk2_ardour/editor.h | 1 + gtk2_ardour/editor_actions.cc | 7 +++++ gtk2_ardour/editor_ops.cc | 60 ++++++++++++++++++++++++++++++++++++++----- 5 files changed, 72 insertions(+), 8 deletions(-) diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 542ba5d388..3f00dbcb2f 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -242,6 +242,11 @@ + + + + + diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index fb58fc4a39..eee60e033b 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1962,7 +1962,12 @@ Editor::add_region_context_items (AudioStreamView* sv, boost::shared_ptr /* range related stuff */ - items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_location_from_audio_region))); + items.push_back (MenuElem (_("Add Single Range"), mem_fun (*this, &Editor::add_location_from_audio_region))); + items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_locations_from_audio_region))); + if (selection->regions.size() < 2) { + items.back().set_sensitive (false); + } + items.push_back (MenuElem (_("Set Range Selection"), mem_fun (*this, &Editor::set_selection_from_audio_region))); items.push_back (SeparatorElem()); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index a7a275ff48..983f39d170 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1261,6 +1261,7 @@ class Editor : public PublicEditor void add_location_mark (nframes64_t where); void add_location_from_audio_region (); + void add_locations_from_audio_region (); void add_location_from_selection (); void set_loop_from_selection (bool play); void set_punch_from_selection (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 0312422e33..0776b91373 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -379,6 +379,7 @@ Editor::register_actions () ActionManager::region_selection_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true)); ActionManager::session_sensitive_actions.push_back (act); + ActionManager::region_selection_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region)); @@ -389,6 +390,12 @@ Editor::register_actions () act = ActionManager::register_action (editor_actions, "toggle-opaque-region", _("Toggle Opaque"), mem_fun(*this, &Editor::toggle_region_opaque)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::region_selection_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "add-range-marker-from-region", _("Add 1 Range Marker"), mem_fun(*this, &Editor::add_location_from_audio_region)); + ActionManager::session_sensitive_actions.push_back (act); + ActionManager::region_selection_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "add-range-markers-from-region", _("Add Range Marker(s)"), mem_fun(*this, &Editor::add_locations_from_audio_region)); + ActionManager::session_sensitive_actions.push_back (act); + ActionManager::region_selection_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 6b867500ae..bc934ead1d 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1991,7 +1991,7 @@ Editor::add_location_from_playhead_cursor () } void -Editor::add_location_from_audio_region () +Editor::add_locations_from_audio_region () { RegionSelection rs; @@ -2001,15 +2001,61 @@ Editor::add_location_from_audio_region () return; } - RegionView* rv = *(rs.begin()); - boost::shared_ptr region = rv->region(); + session->begin_reversible_command (rs.size () > 1 ? _("add markers") : _("add marker")); + XMLNode &before = session->locations()->get_state(); - Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker); + cerr << "Add locations\n"; + + for (RegionSelection::iterator i = rs.begin (); i != rs.end (); ++i) { + + boost::shared_ptr region = (*i)->region (); + + Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker); + + session->locations()->add (location, true); + } + + XMLNode &after = session->locations()->get_state(); + session->add_command (new MementoCommand(*(session->locations()), &before, &after)); + session->commit_reversible_command (); +} + +void +Editor::add_location_from_audio_region () +{ + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { + return; + } + session->begin_reversible_command (_("add marker")); - XMLNode &before = session->locations()->get_state(); + XMLNode &before = session->locations()->get_state(); + + string markername; + + if (rs.size() > 1) { // more than one region selected + session->locations()->next_available_name(markername, "regions"); + } else { + RegionView* rv = *(rs.begin()); + boost::shared_ptr region = rv->region(); + markername = region->name(); + } + + if (!choose_new_marker_name(markername)) { + return; + } + + cerr << "Add location\n"; + + // single range spanning all selected + Location *location = new Location (rs.start(), rs.end_frame(), markername, Location::IsRangeMarker); session->locations()->add (location, true); - XMLNode &after = session->locations()->get_state(); - session->add_command(new MementoCommand(*(session->locations()), &before, &after)); + + XMLNode &after = session->locations()->get_state(); + session->add_command (new MementoCommand(*(session->locations()), &before, &after)); session->commit_reversible_command (); } -- cgit v1.2.3