From: Paul Davis Date: Fri, 4 Jan 2013 22:46:51 +0000 (+0000) Subject: allow region list selection of whole file regions to select every instance of a regio... X-Git-Tag: 3.0~338 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=72393f101ba2cae980838dd0d857719719ecc3d7;p=ardour.git allow region list selection of whole file regions to select every instance of a region that has any source relationship with that whole file region (from a logic feature that came up while writing the manual) git-svn-id: svn://localhost/ardour2/branches/3.0@13779 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 6c85493939..2eaa4be609 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -890,7 +890,7 @@ AudioClock::end_edit_relative (bool add) } void -AudioClock::session_property_changed (const PropertyChange& p) +AudioClock::session_property_changed (const PropertyChange&) { set (last_when, true); } diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index a74b4d4e2d..acbb792db5 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -4648,7 +4648,7 @@ Editor::get_regions_from_selection_and_entered () } void -Editor::get_regions_corresponding_to (boost::shared_ptr region, vector& regions) +Editor::get_regions_corresponding_to (boost::shared_ptr region, vector& regions, bool src_comparison) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { @@ -4667,7 +4667,11 @@ Editor::get_regions_corresponding_to (boost::shared_ptr region, vectorplaylist())) != 0) { - pl->get_region_list_equivalent_regions (region, results); + if (src_comparison) { + pl->get_source_equivalent_regions (region, results); + } else { + pl->get_region_list_equivalent_regions (region, results); + } } for (vector >::iterator ir = results.begin(); ir != results.end(); ++ir) { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 17891c3765..a55fef1913 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -435,7 +435,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void do_import (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, framepos_t&); void do_embed (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, framepos_t&); - void get_regions_corresponding_to (boost::shared_ptr region, std::vector& regions); + void get_regions_corresponding_to (boost::shared_ptr region, std::vector& regions, bool src_comparison); void center_screen (framepos_t); diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc index 8561fbbfb5..16c401b90e 100644 --- a/gtk2_ardour/editor_regions.cc +++ b/gtk2_ardour/editor_regions.cc @@ -551,6 +551,7 @@ EditorRegions::selection_changed () for (TreeView::Selection::ListHandle_Path::iterator i = rows.begin(); i != rows.end(); ++i) { if ((iter = _model->get_iter (*i))) { + boost::shared_ptr region = (*iter)[_columns.region]; // they could have clicked on a row that is just a placeholder, like "Hidden" @@ -559,18 +560,12 @@ EditorRegions::selection_changed () if (region) { - if (region->automatic()) { - - _display.get_selection()->unselect(*i); - - } else { - _change_connection.block (true); - _editor->set_selected_regionview_from_region_list (region, Selection::Add); - - _change_connection.block (false); - } + _change_connection.block (true); + _editor->set_selected_regionview_from_region_list (region, Selection::Add); + _change_connection.block (false); } } + } } else { _editor->get_selection().clear_regions (); @@ -1300,7 +1295,7 @@ EditorRegions::name_edit (const std::string& path, const std::string& new_text) if (region) { vector equivalents; - _editor->get_regions_corresponding_to (region, equivalents); + _editor->get_regions_corresponding_to (region, equivalents, false); for (vector::iterator i = equivalents.begin(); i != equivalents.end(); ++i) { if (new_text != (*i)->region()->name()) { diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 41652196f1..1089381a15 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -880,7 +880,7 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr regi { vector all_equivalent_regions; - get_regions_corresponding_to (region, all_equivalent_regions); + get_regions_corresponding_to (region, all_equivalent_regions, region->whole_file()); if (all_equivalent_regions.empty()) { return; diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index f3277c6b9c..754e48cc25 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -132,6 +132,7 @@ public: void remove_region_by_source (boost::shared_ptr); void get_equivalent_regions (boost::shared_ptr, std::vector >&); void get_region_list_equivalent_regions (boost::shared_ptr, std::vector >&); + void get_source_equivalent_regions (boost::shared_ptr, std::vector >&); void replace_region (boost::shared_ptr old, boost::shared_ptr newr, framepos_t pos); void split_region (boost::shared_ptr, framepos_t position); void split (framepos_t at); diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 85cdce6e92..bc8e7383f2 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -200,6 +200,7 @@ class Region bool overlap_equivalent (boost::shared_ptr) const; bool region_list_equivalent (boost::shared_ptr) const; bool source_equivalent (boost::shared_ptr) const; + bool any_source_equivalent (boost::shared_ptr) const; bool uses_source (boost::shared_ptr) const; std::string source_string () const; diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 4e731ee06c..c5d52f7345 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -844,6 +844,17 @@ Playlist::flush_notifications (bool from_undo) } } + void + Playlist::get_source_equivalent_regions (boost::shared_ptr other, vector >& results) + { + for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) { + + if ((*i) && (*i)->any_source_equivalent (other)) { + results.push_back (*i); + } + } + } + void Playlist::partition (framepos_t start, framepos_t end, bool cut) { diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index c74ce4e419..952e8b5c9c 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -1407,6 +1407,25 @@ Region::source_equivalent (boost::shared_ptr other) const return true; } +bool +Region::any_source_equivalent (boost::shared_ptr other) const +{ + if (!other) { + return false; + } + + SourceList::const_iterator i; + SourceList::const_iterator io; + + for (i = _sources.begin(), io = other->_sources.begin(); i != _sources.end() && io != other->_sources.end(); ++i, ++io) { + if ((*i)->id() == (*io)->id()) { + return true; + } + } + + return false; +} + std::string Region::source_string () const {