summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_selection.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-02-01 01:07:52 +0000
committerCarl Hetherington <carl@carlh.net>2012-02-01 01:07:52 +0000
commit452672f78f5f0f9195bfd48398e29b18a8fb1df7 (patch)
tree1ad8b90f95b1911487fdc7928fd10604ad071e92 /gtk2_ardour/editor_selection.cc
parent6b65e684eb1dbbde519e0987b52e065150225aa5 (diff)
Make crossfade convert-to-full and activate/deactivate work across edit groups (#4658).
git-svn-id: svn://localhost/ardour2/branches/3.0@11413 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_selection.cc')
-rw-r--r--gtk2_ardour/editor_selection.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index 010984c26e..b99aa67ea5 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -27,6 +27,7 @@
#include "ardour/route_group.h"
#include "ardour/profile.h"
#include "ardour/midi_region.h"
+#include "ardour/audioplaylist.h"
#include "editor.h"
#include "actions.h"
@@ -35,6 +36,7 @@
#include "audio_streamview.h"
#include "automation_line.h"
#include "control_point.h"
+#include "crossfade_view.h"
#include "editor_regions.h"
#include "editor_cursors.h"
#include "midi_region_view.h"
@@ -475,6 +477,32 @@ Editor::mapped_get_equivalent_regions (RouteTimeAxisView& tv, uint32_t, RegionVi
}
void
+Editor::mapped_get_equivalent_crossfades (
+ RouteTimeAxisView& tv, uint32_t, boost::shared_ptr<Crossfade> basis, vector<boost::shared_ptr<Crossfade> >* equivs
+ ) const
+{
+ boost::shared_ptr<Playlist> pl;
+ vector<boost::shared_ptr<Crossfade> > results;
+ boost::shared_ptr<Track> tr;
+
+ if ((tr = tv.track()) == 0) {
+ /* bus */
+ return;
+ }
+
+ if ((pl = tr->playlist()) != 0) {
+ boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist> (pl);
+ if (apl) {
+ apl->get_equivalent_crossfades (basis, *equivs);
+ }
+ }
+
+ /* We might have just checked basis for equivalency with itself, so we need to remove dupes */
+ sort (equivs->begin (), equivs->end ());
+ unique (equivs->begin (), equivs->end ());
+}
+
+void
Editor::get_equivalent_regions (RegionView* basis, vector<RegionView*>& equivalent_regions, PBD::PropertyID property) const
{
mapover_tracks_with_unique_playlists (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_get_equivalent_regions), basis, &equivalent_regions), &basis->get_time_axis_view(), property);
@@ -507,6 +535,18 @@ Editor::get_equivalent_regions (RegionSelection & basis, PBD::PropertyID prop) c
return equivalent;
}
+vector<boost::shared_ptr<Crossfade> >
+Editor::get_equivalent_crossfades (RouteTimeAxisView& v, boost::shared_ptr<Crossfade> c, PBD::PropertyID prop) const
+{
+ vector<boost::shared_ptr<Crossfade> > e;
+ mapover_tracks_with_unique_playlists (
+ sigc::bind (sigc::mem_fun (*this, &Editor::mapped_get_equivalent_crossfades), c, &e),
+ &v,
+ prop
+ );
+
+ return e;
+}
int
Editor::get_regionview_count_from_region_list (boost::shared_ptr<Region> region)