-void
-AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
-{
- ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_region_view, weak_r);
-
- boost::shared_ptr<Region> r (weak_r.lock());
-
- if (!r) {
- return;
- }
-
- if (!_trackview.session()->deletion_in_progress()) {
-
- for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end();) {
- CrossfadeViewList::iterator tmp;
-
- tmp = i;
- ++tmp;
-
- boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(r);
- if (ar && i->second->crossfade->involves (ar)) {
- delete i->second;
- crossfade_views.erase (i);
- }
-
- i = tmp;
- }
- }
-
- StreamView::remove_region_view(r);
-}
-
-void
-AudioStreamView::undisplay_track ()
-{
- StreamView::undisplay_track ();
-
- for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
- delete i->second;
- }
-
- crossfade_views.clear ();
-}
-
-void
-AudioStreamView::playlist_layered (boost::weak_ptr<Track> wtr)
-{
- boost::shared_ptr<Track> tr (wtr.lock());
-
- if (!tr) {
- return;
- }
-
- StreamView::playlist_layered (wtr);
-
- /* make sure xfades are on top and all the regionviews are stacked correctly. */
-
- for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
- i->second->get_canvas_group()->raise_to_top();
- }
-}
-
-void
-AudioStreamView::playlist_switched (boost::weak_ptr<Track> wtr)
-{
- boost::shared_ptr<Track> tr (wtr.lock());
-
- if (!tr) {
- return;
- }
-
- playlist_connections.drop_connections ();
-
- StreamView::playlist_switched (tr);
-
- boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist> (tr->playlist());
-
- if (apl) {
- apl->NewCrossfade.connect (playlist_connections, invalidator (*this), ui_bind (&AudioStreamView::add_crossfade, this, _1), gui_context());
- }
-}
-
-void
-AudioStreamView::add_crossfade (boost::weak_ptr<Crossfade> wc)
-{
- boost::shared_ptr<Crossfade> crossfade (wc.lock());
-
- if (!crossfade) {
- return;
- }
-
- AudioRegionView* lview = 0;
- AudioRegionView* rview = 0;
-
- /* first see if we already have a CrossfadeView for this Crossfade */
-
- CrossfadeViewList::iterator i = crossfade_views.find (crossfade);
- if (i != crossfade_views.end()) {
- if (!crossfades_visible) {
- i->second->hide();
- } else {
- i->second->show ();
- }
- i->second->set_valid (true);
- return;
- }
-
- /* create a new one */
-
- for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- AudioRegionView* arv = dynamic_cast<AudioRegionView*>(*i);
-
- if (!lview && arv && (arv->region() == crossfade->out())) {
- lview = arv;
- }
- if (!rview && arv && (arv->region() == crossfade->in())) {
- rview = arv;
- }
- }
-
- CrossfadeView *cv = new CrossfadeView (_trackview.canvas_display (),
- _trackview,
- crossfade,
- _samples_per_unit,
- region_color,
- *lview, *rview);
- cv->set_valid (true);
- crossfade->Invalidated.connect (*this, invalidator (*this), ui_bind (&AudioStreamView::remove_crossfade, this, _1), gui_context());
- crossfade_views[cv->crossfade] = cv;
- if (!crossfades_visible) {
- cv->hide ();
- }
-
- update_content_height (cv);
-}
-
-void
-AudioStreamView::remove_crossfade (boost::shared_ptr<Region> r)
-{
- ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_crossfade, r)
-
- boost::shared_ptr<Crossfade> xfade = boost::dynamic_pointer_cast<Crossfade> (r);
-
- for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
- if (i->second->crossfade == xfade) {
- delete i->second;
- crossfade_views.erase (i);
- break;
- }
- }
-}
-