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
This commit is contained in:
parent
1f6684237c
commit
72393f101b
@ -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);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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()) {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user