diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-10-20 16:09:42 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-10-20 16:09:42 +0000 |
commit | 3e8be2ca624575d7578c405e6df1bfffd4b34fae (patch) | |
tree | 887c7bec241f091ff6f7454be66d691a3eea5191 /libs/ardour/audio_playlist.cc | |
parent | 2592a320d42dd4a157ee16101c042d875d3142be (diff) |
fixes for crossfade views, crossfades and undo/redo. added default crossfade settings to ardour.rc.in
git-svn-id: svn://localhost/ardour2/trunk@994 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audio_playlist.cc')
-rw-r--r-- | libs/ardour/audio_playlist.cc | 52 |
1 files changed, 18 insertions, 34 deletions
diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index e39be5d402..00c3038d25 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -237,9 +237,9 @@ AudioPlaylist::remove_dependents (boost::shared_ptr<Region> region) tmp = i; tmp++; + if ((*i)->involves (r)) { - /* do not delete crossfades */ - _crossfades.erase (i); + delete *i; } i = tmp; @@ -488,9 +488,7 @@ AudioPlaylist::set_state (const XMLNode& node) XMLNodeList nlist; XMLNodeConstIterator niter; - if (!in_set_state) { - Playlist::set_state (node); - } + Playlist::set_state (node); nlist = node.children(); @@ -502,10 +500,12 @@ AudioPlaylist::set_state (const XMLNode& node) continue; } - Crossfade *xfade; - try { - xfade = new Crossfade (*((const Playlist *)this), *child); + Crossfade* xfade = new Crossfade (*((const Playlist *)this), *child); + _crossfades.push_back (xfade); + xfade->Invalidated.connect (mem_fun (*this, &AudioPlaylist::crossfade_invalidated)); + xfade->StateChanged.connect (mem_fun (*this, &AudioPlaylist::crossfade_changed)); + NewCrossfade(xfade); } catch (failed_constructor& err) { @@ -514,44 +514,28 @@ AudioPlaylist::set_state (const XMLNode& node) // << endl; continue; } - - Crossfades::iterator ci; - - for (ci = _crossfades.begin(); ci != _crossfades.end(); ++ci) { - if (*(*ci) == *xfade) { - break; - } - } - - if (ci == _crossfades.end()) { - _crossfades.push_back (xfade); - xfade->Invalidated.connect (mem_fun (*this, &AudioPlaylist::crossfade_invalidated)); - xfade->StateChanged.connect (mem_fun (*this, &AudioPlaylist::crossfade_changed)); - NewCrossfade(xfade); - } else { - - /* adjust the current state of the existing crossfade */ - - (*ci)->set_state (*child); - - /* drop the new one */ - delete xfade; - } } return 0; } void -AudioPlaylist::clear () +AudioPlaylist::clear (bool with_signals) { - for (Crossfades::iterator i = _crossfades.begin(); i != _crossfades.end(); ++i) { + for (Crossfades::iterator i = _crossfades.begin(); i != _crossfades.end(); ) { + + Crossfades::iterator tmp; + tmp = i; + ++tmp; + delete *i; + + i = tmp; } _crossfades.clear (); - Playlist::clear (); + Playlist::clear (with_signals); } XMLNode& |