allow region list selection of whole file regions to select every instance of a regio...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 4 Jan 2013 22:46:51 +0000 (22:46 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 4 Jan 2013 22:46:51 +0000 (22:46 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@13779 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/audio_clock.cc
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_regions.cc
gtk2_ardour/editor_selection.cc
libs/ardour/ardour/playlist.h
libs/ardour/ardour/region.h
libs/ardour/playlist.cc
libs/ardour/region.cc

index 6c854939390588da65d6eb4e1612d993510292b7..2eaa4be6090f9f67f714edbe99cf9bbac906e9d2 100644 (file)
@@ -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);
 }
index a74b4d4e2d2194da7ffb078eee00e87d2b1eabd9..acbb792db50aab15c9310c6d3bdd5898643df9ae 100644 (file)
@@ -4648,7 +4648,7 @@ Editor::get_regions_from_selection_and_entered ()
 }
 
 void
-Editor::get_regions_corresponding_to (boost::shared_ptr<Region> region, vector<RegionView*>& regions)
+Editor::get_regions_corresponding_to (boost::shared_ptr<Region> region, vector<RegionView*>& 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> region, vector<R
                        }
 
                        if ((pl = (tr->playlist())) != 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<boost::shared_ptr<Region> >::iterator ir = results.begin(); ir != results.end(); ++ir) {
index 17891c37653ecf0775eb9caa87b11b96e6adde8e..a55fef191335fdb8bc26431e70ce05f762291bb9 100644 (file)
@@ -435,7 +435,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void do_import (std::vector<std::string> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, framepos_t&);
        void do_embed (std::vector<std::string> paths, Editing::ImportDisposition, Editing::ImportMode mode,  framepos_t&);
 
-       void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions);
+        void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions, bool src_comparison);
 
        void center_screen (framepos_t);
 
index 8561fbbfb53f99e7274e90408441a889ff5e13f1..16c401b90e4fe57410385ca0936536bd49a4baf6 100644 (file)
@@ -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> 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<RegionView*> equivalents;
-               _editor->get_regions_corresponding_to (region, equivalents);
+               _editor->get_regions_corresponding_to (region, equivalents, false);
 
                for (vector<RegionView*>::iterator i = equivalents.begin(); i != equivalents.end(); ++i) {
                        if (new_text != (*i)->region()->name()) {
index 41652196f1943ea5c3b04c5d912dae906eaa74e0..1089381a151794779989d1b35977609ea599c623 100644 (file)
@@ -880,7 +880,7 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr<Region> regi
 {
        vector<RegionView*> 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;
index f3277c6b9cc2f38a7f7395b18191222de48b337e..754e48cc25d1fbf71a2956c9e1250295b62bd71b 100644 (file)
@@ -132,6 +132,7 @@ public:
        void remove_region_by_source (boost::shared_ptr<Source>);
        void get_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
        void get_region_list_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
+       void get_source_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
        void replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, framepos_t pos);
        void split_region (boost::shared_ptr<Region>, framepos_t position);
        void split (framepos_t at);
index 85cdce6e9248ee4e44999d184ba3a41f4e1cab36..bc8e7383f289a53659caf152771916c81634f359 100644 (file)
@@ -200,6 +200,7 @@ class Region
        bool overlap_equivalent (boost::shared_ptr<const Region>) const;
        bool region_list_equivalent (boost::shared_ptr<const Region>) const;
        bool source_equivalent (boost::shared_ptr<const Region>) const;
+       bool any_source_equivalent (boost::shared_ptr<const Region>) const;
        bool uses_source (boost::shared_ptr<const Source>) const;
 
        std::string source_string () const;
index 4e731ee06c641e5bd0b709783acf29f148c54973..c5d52f73450f29197c63556d03beea40537a11d1 100644 (file)
@@ -844,6 +844,17 @@ Playlist::flush_notifications (bool from_undo)
         }
  }
 
+ void
+ Playlist::get_source_equivalent_regions (boost::shared_ptr<Region> other, vector<boost::shared_ptr<Region> >& 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)
  {
index c74ce4e41998ec82797f64c6c0112e9a6ee5ce01..952e8b5c9cd8a3ecb1bbda4b062fa790da782035 100644 (file)
@@ -1407,6 +1407,25 @@ Region::source_equivalent (boost::shared_ptr<const Region> other) const
        return true;
 }
 
+bool
+Region::any_source_equivalent (boost::shared_ptr<const Region> 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
 {