From af12adb34f62dc82f694a03ea3b2a6c99ba426ef Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 14 Dec 2006 14:15:43 +0000 Subject: use shared_ptr for all Playlist handling; cleanup works again git-svn-id: svn://localhost/ardour2/trunk@1209 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/analysis_window.cc | 6 +-- gtk2_ardour/audio_region_editor.cc | 8 ++-- gtk2_ardour/audio_streamview.cc | 4 +- gtk2_ardour/editor.cc | 30 +++++++------ gtk2_ardour/editor.h | 6 +-- gtk2_ardour/editor_audio_import.cc | 2 +- gtk2_ardour/editor_canvas_events.cc | 4 +- gtk2_ardour/editor_export_audio.cc | 2 +- gtk2_ardour/editor_mouse.cc | 54 +++++++++++------------ gtk2_ardour/editor_ops.cc | 84 ++++++++++++++++++++---------------- gtk2_ardour/editor_region_list.cc | 6 ++- gtk2_ardour/editor_selection_list.cc | 6 +-- gtk2_ardour/editor_timefx.cc | 2 +- gtk2_ardour/playlist_selection.h | 3 +- gtk2_ardour/playlist_selector.cc | 40 +++++++++++------ gtk2_ardour/playlist_selector.h | 11 +++-- gtk2_ardour/public_editor.h | 2 +- gtk2_ardour/route_time_axis.cc | 59 ++++++++++++++----------- gtk2_ardour/route_time_axis.h | 6 +-- gtk2_ardour/selection.cc | 30 ++++++------- gtk2_ardour/selection.h | 16 +++---- gtk2_ardour/time_axis_view.h | 2 +- 22 files changed, 211 insertions(+), 172 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/analysis_window.cc b/gtk2_ardour/analysis_window.cc index af81a28d80..e06ac59e19 100644 --- a/gtk2_ardour/analysis_window.cc +++ b/gtk2_ardour/analysis_window.cc @@ -228,8 +228,8 @@ AnalysisWindow::analyze_data (Gtk::Button *button) for (TrackSelection::iterator i = s.tracks.begin(); i != s.tracks.end(); ++i) { - ARDOUR::AudioPlaylist *pl - = dynamic_cast((*i)->playlist()); + boost::shared_ptr pl + = boost::dynamic_pointer_cast((*i)->playlist()); if (!pl) continue; @@ -246,7 +246,7 @@ AnalysisWindow::analyze_data (Gtk::Button *button) if (source_selection_ranges_rb.get_active()) { // cerr << "Analyzing ranges on track " << *&rui->route().name() << endl; - for (std::list::iterator j = ts.begin(); j != ts.end(); ++j) { + for (std::list::iterator j = ts.begin(); j != ts.end(); ++j) { nframes_t i = 0; int n; diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc index 0852072132..3ce8c76d2e 100644 --- a/gtk2_ardour/audio_region_editor.cc +++ b/gtk2_ardour/audio_region_editor.cc @@ -201,7 +201,7 @@ AudioRegionEditor::start_clock_changed () { _session.begin_reversible_command (_("change region start position")); - Playlist* const pl = _region->playlist(); + boost::shared_ptr pl = _region->playlist(); if (pl) { XMLNode &before = pl->get_state(); @@ -218,8 +218,8 @@ AudioRegionEditor::end_clock_changed () { _session.begin_reversible_command (_("change region end position")); - Playlist* const pl = _region->playlist(); - + boost::shared_ptr pl = _region->playlist(); + if (pl) { XMLNode &before = pl->get_state(); _region->trim_end (end_clock.current_time(), this); @@ -239,7 +239,7 @@ AudioRegionEditor::length_clock_changed () _session.begin_reversible_command (_("change region length")); - Playlist* const pl = _region->playlist(); + boost::shared_ptr pl = _region->playlist(); if (pl) { XMLNode &before = pl->get_state(); diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 75eb28e7d5..185a961064 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -239,7 +239,7 @@ AudioStreamView::playlist_changed (boost::shared_ptr ds) StreamView::playlist_changed(ds); - AudioPlaylist* apl = dynamic_cast(ds->playlist()); + boost::shared_ptr apl = boost::dynamic_pointer_cast(ds->playlist()); if (apl) playlist_connections.push_back (apl->NewCrossfade.connect (mem_fun (*this, &AudioStreamView::add_crossfade))); } @@ -328,7 +328,7 @@ AudioStreamView::redisplay_diskstream () if (_trackview.is_audio_track()) { _trackview.get_diskstream()->playlist()->foreach_region (static_cast(this), &StreamView::add_region_view); - AudioPlaylist* apl = dynamic_cast(_trackview.get_diskstream()->playlist()); + boost::shared_ptr apl = boost::dynamic_pointer_cast(_trackview.get_diskstream()->playlist()); if (apl) apl->foreach_crossfade (this, &AudioStreamView::add_crossfade); } diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 1938675780..b21db92119 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1538,7 +1538,7 @@ Editor::build_track_region_context_menu (nframes_t frame) if (atv) { boost::shared_ptr ds; - Playlist* pl = 0; + boost::shared_ptr pl; if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()))) { Playlist::RegionList* regions = pl->regions_at ((nframes_t) floor ( (double)frame * ds->speed())); @@ -1565,10 +1565,10 @@ Editor::build_track_crossfade_context_menu (nframes_t frame) if (atv) { boost::shared_ptr ds; - Playlist* pl = 0; - AudioPlaylist* apl = 0; + boost::shared_ptr pl; + boost::shared_ptr apl; - if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = dynamic_cast (pl)) != 0)) { + if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast (pl)) != 0)) { Playlist::RegionList* regions = pl->regions_at (frame); AudioPlaylist::Crossfades xfades; @@ -2996,7 +2996,7 @@ void Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32_t ignored, RegionView* basis, vector* all_equivs) { - Playlist* pl; + boost::shared_ptr pl; vector > results; RegionView* marv; boost::shared_ptr ds; @@ -3012,7 +3012,7 @@ Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32 } - if ((pl = dynamic_cast(ds->playlist())) != 0) { + if ((pl = ds->playlist()) != 0) { pl->get_equivalent_regions (basis->region(), results); } @@ -3213,7 +3213,7 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr regi if ((tatv = dynamic_cast (*i)) != 0) { - Playlist* pl; + boost::shared_ptr pl; vector > results; RegionView* marv; boost::shared_ptr ds; @@ -3222,8 +3222,8 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr regi /* bus */ continue; } - - if ((pl = dynamic_cast(ds->playlist())) != 0) { + + if ((pl = (ds->playlist())) != 0) { pl->get_region_list_equivalent_regions (region, results); } @@ -3844,17 +3844,19 @@ Editor::end_location_changed (Location* location) } int -Editor::playlist_deletion_dialog (Playlist* pl) +Editor::playlist_deletion_dialog (boost::shared_ptr pl) { ArdourDialog dialog ("playlist deletion dialog"); Label label (string_compose (_("Playlist %1 is currently unused.\n" - "If left alone, no audio files used by it will be cleaned.\n" - "If deleted, audio files used by it alone by will cleaned."), - pl->name())); - + "If left alone, no audio files used by it will be cleaned.\n" + "If deleted, audio files used by it alone by will cleaned."), + pl->name())); + dialog.set_position (WIN_POS_CENTER); dialog.get_vbox()->pack_start (label); + label.show (); + dialog.add_button (_("Delete playlist"), RESPONSE_ACCEPT); dialog.add_button (_("Keep playlist"), RESPONSE_CANCEL); dialog.add_button (_("Cancel"), RESPONSE_CANCEL); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 39b4b93222..2f435336ca 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -257,7 +257,7 @@ class Editor : public PublicEditor void route_name_changed (TimeAxisView *); gdouble frames_per_unit; nframes_t leftmost_frame; - void clear_playlist (ARDOUR::Playlist&); + void clear_playlist (boost::shared_ptr); void new_playlists (); void copy_playlists (); @@ -1039,7 +1039,7 @@ class Editor : public PublicEditor void fade_in_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); void fade_out_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); - std::set motion_frozen_playlists; + std::set > motion_frozen_playlists; void region_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); void region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); @@ -1754,7 +1754,7 @@ class Editor : public PublicEditor /* handling cleanup */ - int playlist_deletion_dialog (ARDOUR::Playlist*); + int playlist_deletion_dialog (boost::shared_ptr); vector session_connections; diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 65823efcac..56bdc82ff7 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -325,7 +325,7 @@ Editor::finish_bringing_in_audio (boost::shared_ptr region, uint32_ case ImportToTrack: if (track) { - Playlist* playlist = track->diskstream()->playlist(); + boost::shared_ptr playlist = track->diskstream()->playlist(); boost::shared_ptr copy (boost::dynamic_pointer_cast (RegionFactory::create (region))); begin_reversible_command (_("insert sndfile")); diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index ceff151541..19c83e01cc 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -513,8 +513,8 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item, if (atv->is_audio_track()) { - AudioPlaylist* pl; - if ((pl = dynamic_cast (atv->get_diskstream()->playlist())) != 0) { + boost::shared_ptr pl; + if ((pl = boost::dynamic_pointer_cast (atv->get_diskstream()->playlist())) != 0) { Playlist::RegionList* rl = pl->regions_at (event_frame (event)); diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc index fd40b9cae0..57ab02e3a3 100644 --- a/gtk2_ardour/editor_export_audio.cc +++ b/gtk2_ardour/editor_export_audio.cc @@ -288,7 +288,7 @@ Editor::write_audio_selection (TimeSelection& ts) if (atv->is_audio_track()) { - AudioPlaylist* playlist = dynamic_cast(atv->get_diskstream()->playlist()); + boost::shared_ptr playlist = boost::dynamic_pointer_cast(atv->get_diskstream()->playlist()); if (playlist && write_audio_range (*playlist, atv->get_diskstream()->n_channels(), ts) == 0) { ret = -1; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 76a40de95f..8868c1a88c 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -2791,8 +2791,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) vector new_regionviews; - set affected_playlists; - pair::iterator,bool> insert_result; + set > affected_playlists; + pair >::iterator,bool> insert_result; // TODO: Crossfades need to be copied! for (list::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) { @@ -2800,7 +2800,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) rv = (*i); - Playlist* to_playlist = rv->region()->playlist(); + boost::shared_ptr to_playlist = rv->region()->playlist(); RouteTimeAxisView* atv = dynamic_cast(&rv->get_time_axis_view()); insert_result = affected_playlists.insert (to_playlist); @@ -3128,7 +3128,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) MOTION ************************************************************/ - pair::iterator,bool> insert_result; + pair >::iterator,bool> insert_result; const list& layered_regions = selection->regions.by_layer(); for (list::const_iterator i = layered_regions.begin(); i != layered_regions.end(); ++i) { @@ -3240,7 +3240,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) AudioTimeAxisView* atv = dynamic_cast (&rv->get_time_axis_view()); if (atv && atv->is_audio_track()) { - AudioPlaylist* pl = dynamic_cast(atv->get_diskstream()->playlist()); + boost::shared_ptr pl = boost::dynamic_pointer_cast(atv->get_diskstream()->playlist()); if (pl) { /* only freeze and capture state once */ @@ -3278,7 +3278,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event { nframes_t where; RegionView* rv = reinterpret_cast (drag_info.data); - pair::iterator,bool> insert_result; + pair >::iterator,bool> insert_result; bool nocommit = true; double speed; RouteTimeAxisView* atv; @@ -3350,8 +3350,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event for (list::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) { - Playlist* from_playlist; - Playlist* to_playlist; + boost::shared_ptr from_playlist; + boost::shared_ptr to_playlist; double ix1, ix2, iy1, iy2; @@ -3387,8 +3387,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event for (list::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) { - Playlist* from_playlist; - Playlist* to_playlist; + boost::shared_ptr from_playlist; + boost::shared_ptr to_playlist; double ix1, ix2, iy1, iy2; @@ -3459,9 +3459,9 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event } out: - for (set::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) { + for (set >::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) { (*p)->thaw (); - session->add_command (new MementoCommand(*(*p), 0, & (*p)->get_state())); + session->add_command (new MementoCommand(*((*p).get()), 0, & (*p)->get_state())); } motion_frozen_playlists.clear (); @@ -3654,7 +3654,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event) begin_reversible_command (_("selection grab")); - Playlist* playlist = clicked_trackview->playlist(); + boost::shared_ptr playlist = clicked_trackview->playlist(); XMLNode *before = &(playlist->get_state()); clicked_trackview->playlist()->add_region (region, selection->time[clicked_selection].start); @@ -3978,7 +3978,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) double speed = 1.0; TimeAxisView* tvp = clicked_trackview; RouteTimeAxisView* tv = dynamic_cast(tvp); - pair::iterator,bool> insert_result; + pair >::iterator,bool> insert_result; if (tv && tv->is_audio_track()) { speed = tv->get_diskstream()->speed(); @@ -4024,7 +4024,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) if (arv) arv->temporarily_hide_envelope (); - Playlist * pl = (*i)->region()->playlist(); + boost::shared_ptr pl = (*i)->region()->playlist(); insert_result = motion_frozen_playlists.insert (pl); if (insert_result.second) { session->add_command(new MementoCommand(*pl, &pl->get_state(), 0)); @@ -4216,9 +4216,9 @@ Editor::trim_finished_callback (ArdourCanvas::Item* item, GdkEvent* event) } } - for (set::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) { + for (set >::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) { //(*p)->thaw (); - session->add_command (new MementoCommand(*(*p), 0, &(*p)->get_state())); + session->add_command (new MementoCommand(*(*p).get(), 0, &(*p)->get_state())); } motion_frozen_playlists.clear (); @@ -4252,22 +4252,22 @@ Editor::point_trim (GdkEvent* event) i != selection->regions.by_layer().end(); ++i) { if (!(*i)->region()->locked()) { - Playlist *pl = (*i)->region()->playlist(); + boost::shared_ptr pl = (*i)->region()->playlist(); XMLNode &before = pl->get_state(); (*i)->region()->trim_front (new_bound, this); XMLNode &after = pl->get_state(); - session->add_command(new MementoCommand(*pl, &before, &after)); + session->add_command(new MementoCommand(*pl.get(), &before, &after)); } } } else { if (!rv->region()->locked()) { - Playlist *pl = rv->region()->playlist(); + boost::shared_ptr pl = rv->region()->playlist(); XMLNode &before = pl->get_state(); rv->region()->trim_front (new_bound, this); XMLNode &after = pl->get_state(); - session->add_command(new MementoCommand(*pl, &before, &after)); + session->add_command(new MementoCommand(*pl.get(), &before, &after)); } } @@ -4283,22 +4283,22 @@ Editor::point_trim (GdkEvent* event) for (list::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) { if (!(*i)->region()->locked()) { - Playlist *pl = (*i)->region()->playlist(); + boost::shared_ptr pl = (*i)->region()->playlist(); XMLNode &before = pl->get_state(); (*i)->region()->trim_end (new_bound, this); XMLNode &after = pl->get_state(); - session->add_command(new MementoCommand(*pl, &before, &after)); + session->add_command(new MementoCommand(*pl.get(), &before, &after)); } } } else { if (!rv->region()->locked()) { - Playlist *pl = rv->region()->playlist(); + boost::shared_ptr pl = rv->region()->playlist(); XMLNode &before = pl->get_state(); rv->region()->trim_end (new_bound, this); XMLNode &after = pl->get_state(); - session->add_command (new MementoCommand(*pl, &before, &after)); + session->add_command (new MementoCommand(*pl.get(), &before, &after)); } } @@ -4843,13 +4843,13 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes_t pos) return; } - Playlist* playlist = atv->playlist(); + boost::shared_ptr playlist = atv->playlist(); double speed = atv->get_diskstream()->speed(); XMLNode &before = playlist->get_state(); playlist->add_region (boost::dynamic_pointer_cast (RegionFactory::create (arv->audio_region())), (nframes_t) (pos * speed)); XMLNode &after = playlist->get_state(); - session->add_command(new MementoCommand(*playlist, &before, &after)); + session->add_command(new MementoCommand(*playlist.get(), &before, &after)); // playlist is frozen, so we have to update manually diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 00faa2f21d..c8c11d59c1 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -44,6 +44,7 @@ #include #include #include +#include #include #include "ardour_ui.h" @@ -122,7 +123,7 @@ Editor::split_regions_at (nframes_t where, RegionSelection& regions) tmp = a; ++tmp; - Playlist* pl = (*a)->region()->playlist(); + boost::shared_ptr pl = (*a)->region()->playlist(); AudioRegionView* const arv = dynamic_cast(*a); if (arv) @@ -149,7 +150,7 @@ Editor::remove_clicked_region () return; } - Playlist* playlist = clicked_audio_trackview->playlist(); + boost::shared_ptr playlist = clicked_audio_trackview->playlist(); begin_reversible_command (_("remove region")); XMLNode &before = playlist->get_state(); @@ -232,7 +233,7 @@ Editor::select_region_for_operation (int dir, TimeAxisView **tv) RouteTimeAxisView* rtv; if ((rtv = dynamic_cast (*tv)) != 0) { - Playlist *pl; + boost::shared_ptr pl; if ((pl = rtv->playlist()) == 0) { return region; @@ -1719,7 +1720,7 @@ Editor::insert_region_list_drag (boost::shared_ptr region, int x, i TimeAxisView *tv; nframes_t where; AudioTimeAxisView *atv = 0; - Playlist *playlist; + boost::shared_ptr playlist; track_canvas.window_to_world (x, y, wx, wy); wx += horizontal_adjustment.get_value(); @@ -1749,20 +1750,26 @@ Editor::insert_region_list_drag (boost::shared_ptr region, int x, i return; } + cerr << "drop target playlist, UC = " << playlist.use_count() << endl; + snap_to (where); begin_reversible_command (_("insert dragged region")); XMLNode &before = playlist->get_state(); + cerr << "pre add target playlist, UC = " << playlist.use_count() << endl; playlist->add_region (RegionFactory::create (region), where, 1.0); + cerr << "post add target playlist, UC = " << playlist.use_count() << endl; session->add_command(new MementoCommand(*playlist, &before, &playlist->get_state())); commit_reversible_command (); + + cerr << "post drop target playlist, UC = " << playlist.use_count() << endl; } void Editor::insert_region_list_selection (float times) { RouteTimeAxisView *tv = 0; - Playlist *playlist; + boost::shared_ptr playlist; if (clicked_audio_trackview != 0) { tv = clicked_audio_trackview; @@ -2097,7 +2104,7 @@ Editor::region_from_selection () for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { boost::shared_ptr current; boost::shared_ptr current_r; - Playlist *pl; + boost::shared_ptr pl; nframes_t internal_start; string new_name; @@ -2134,7 +2141,7 @@ Editor::create_region_from_selection (vector >& n boost::shared_ptr current; boost::shared_ptr current_r; - Playlist* playlist; + boost::shared_ptr playlist; nframes_t internal_start; string new_name; @@ -2189,7 +2196,7 @@ Editor::separate_region_from_selection () return; } - Playlist *playlist; + boost::shared_ptr playlist; for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { @@ -2235,7 +2242,7 @@ Editor::separate_regions_using_location (Location& loc) return; } - Playlist *playlist; + boost::shared_ptr playlist; /* XXX i'm unsure as to whether this should operate on selected tracks only or the entire enchillada. uncomment the below line to correct the behaviour @@ -2284,8 +2291,8 @@ Editor::crop_region_to_selection () return; } - vector playlists; - Playlist *playlist; + vector > playlists; + boost::shared_ptr playlist; if (clicked_trackview != 0) { @@ -2321,7 +2328,7 @@ Editor::crop_region_to_selection () begin_reversible_command (_("trim to selection")); - for (vector::iterator i = playlists.begin(); i != playlists.end(); ++i) { + for (vector >::iterator i = playlists.begin(); i != playlists.end(); ++i) { boost::shared_ptr region; @@ -2371,7 +2378,7 @@ Editor::region_fill_track () if (!ar) continue; - Playlist* pl = region->playlist(); + boost::shared_ptr pl = region->playlist(); if (end <= region->last_frame()) { return; @@ -2415,7 +2422,7 @@ Editor::region_fill_selection () nframes_t start = selection->time[clicked_selection].start; nframes_t end = selection->time[clicked_selection].end; - Playlist *playlist; + boost::shared_ptr playlist; if (selection->tracks.empty()) { return; @@ -2781,7 +2788,7 @@ Editor::bounce_range_selection () continue; } - Playlist* playlist; + boost::shared_ptr playlist; if ((playlist = atv->playlist()) == 0) { return; @@ -2897,7 +2904,7 @@ Editor::cut_copy_points (CutCopyOp op) } struct PlaylistState { - Playlist* playlist; + boost::shared_ptr playlist; XMLNode* before; }; @@ -2910,7 +2917,7 @@ struct lt_playlist { void Editor::cut_copy_regions (CutCopyOp op) { - typedef std::map PlaylistMapping; + typedef std::map,boost::shared_ptr > PlaylistMapping; PlaylistMapping pmap; nframes_t first_position = max_frames; @@ -2921,7 +2928,8 @@ Editor::cut_copy_regions (CutCopyOp op) first_position = min ((*x)->region()->position(), first_position); if (op == Cut || op == Clear) { - AudioPlaylist *pl = dynamic_cast((*x)->region()->playlist()); + boost::shared_ptr pl = boost::dynamic_pointer_cast((*x)->region()->playlist()); + if (pl) { PlaylistState before; @@ -2939,8 +2947,8 @@ Editor::cut_copy_regions (CutCopyOp op) for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ) { - AudioPlaylist *pl = dynamic_cast((*x)->region()->playlist()); - AudioPlaylist* npl; + boost::shared_ptr pl = boost::dynamic_pointer_cast((*x)->region()->playlist()); + boost::shared_ptr npl; RegionSelection::iterator tmp; tmp = x; @@ -2951,7 +2959,7 @@ Editor::cut_copy_regions (CutCopyOp op) PlaylistMapping::iterator pi = pmap.find (pl); if (pi == pmap.end()) { - npl = new AudioPlaylist (*session, "cutlist", true); + npl = boost::dynamic_pointer_cast (PlaylistFactory::create (*session, "cutlist", true)); npl->freeze(); pmap[pl] = npl; } else { @@ -2983,7 +2991,7 @@ Editor::cut_copy_regions (CutCopyOp op) x = tmp; } - list foo; + list > foo; for (PlaylistMapping::iterator i = pmap.begin(); i != pmap.end(); ++i) { foo.push_back (i->second); @@ -3080,8 +3088,8 @@ Editor::paste_named_selection (float times) TreeModel::iterator i = selected->get_selected(); NamedSelection* ns = (*i)[named_selection_columns.selection]; - list::iterator chunk; - list::iterator tmp; + list >::iterator chunk; + list >::iterator tmp; chunk = ns->playlists.begin(); @@ -3090,8 +3098,8 @@ Editor::paste_named_selection (float times) for (t = selection->tracks.begin(); t != selection->tracks.end(); ++t) { AudioTimeAxisView* atv; - Playlist* pl; - AudioPlaylist* apl; + boost::shared_ptr pl; + boost::shared_ptr apl; if ((atv = dynamic_cast (*t)) == 0) { continue; @@ -3100,8 +3108,8 @@ Editor::paste_named_selection (float times) if ((pl = atv->playlist()) == 0) { continue; } - - if ((apl = dynamic_cast (pl)) == 0) { + + if ((apl = boost::dynamic_pointer_cast (pl)) == 0) { continue; } @@ -3109,7 +3117,7 @@ Editor::paste_named_selection (float times) ++tmp; XMLNode &before = apl->get_state(); - apl->paste (**chunk, edit_cursor->current_frame, times); + apl->paste (*chunk, edit_cursor->current_frame, times); session->add_command(new MementoCommand(*apl, &before, &apl->get_state())); if (tmp != ns->playlists.end()) { @@ -3123,7 +3131,7 @@ Editor::paste_named_selection (float times) void Editor::duplicate_some_regions (RegionSelection& regions, float times) { - Playlist *playlist; + boost::shared_ptr playlist; RegionSelection sel = regions; // clear (below) will clear the argument list begin_reversible_command (_("duplicate region")); @@ -3161,7 +3169,7 @@ Editor::duplicate_selection (float times) return; } - Playlist *playlist; + boost::shared_ptr playlist; vector > new_regions; vector >::iterator ri; @@ -3227,20 +3235,20 @@ Editor::center_edit_cursor () } void -Editor::clear_playlist (Playlist& playlist) +Editor::clear_playlist (boost::shared_ptr playlist) { begin_reversible_command (_("clear playlist")); - XMLNode &before = playlist.get_state(); - playlist.clear (); - XMLNode &after = playlist.get_state(); - session->add_command (new MementoCommand(playlist, &before, &after)); + XMLNode &before = playlist->get_state(); + playlist->clear (); + XMLNode &after = playlist->get_state(); + session->add_command (new MementoCommand(*playlist.get(), &before, &after)); commit_reversible_command (); } void Editor::nudge_track (bool use_edit_cursor, bool forwards) { - Playlist *playlist; + boost::shared_ptr playlist; nframes_t distance; nframes_t next_distance; nframes_t start; @@ -3388,7 +3396,7 @@ Editor::apply_filter (AudioFilter& filter, string command) if (!arv) continue; - Playlist* playlist = arv->region()->playlist(); + boost::shared_ptr playlist = arv->region()->playlist(); RegionSelection::iterator tmp; diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc index fdb8ca9dd3..d12d562237 100644 --- a/gtk2_ardour/editor_region_list.cc +++ b/gtk2_ardour/editor_region_list.cc @@ -101,7 +101,8 @@ Editor::add_audio_region_to_region_display (boost::shared_ptr regio parent = *(region_list_model->append()); parent[region_list_columns.name] = _("Hidden"); - /// XXX FIX ME parent[region_list_columns.region]->reset (); + boost::shared_ptr proxy = parent[region_list_columns.region]; + proxy.reset (); } else { @@ -109,7 +110,8 @@ Editor::add_audio_region_to_region_display (boost::shared_ptr regio parent = *(region_list_model->insert(iter)); parent[region_list_columns.name] = _("Hidden"); - /// XXX FIX ME parent[region_list_columns.region]->reset (); + boost::shared_ptr proxy = parent[region_list_columns.region]; + proxy.reset (); } else { parent = *iter; diff --git a/gtk2_ardour/editor_selection_list.cc b/gtk2_ardour/editor_selection_list.cc index 469e7a472e..8e88ee497b 100644 --- a/gtk2_ardour/editor_selection_list.cc +++ b/gtk2_ardour/editor_selection_list.cc @@ -150,12 +150,12 @@ Editor::create_named_selection (const string & name) return; } - Playlist* what_we_found; - list thelist; + boost::shared_ptr what_we_found; + list > thelist; for (TrackViewList::iterator i = views->begin(); i != views->end(); ++i) { - Playlist *pl = (*i)->playlist(); + boost::shared_ptr pl = (*i)->playlist(); if (pl) { diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc index 188960c962..bfc5ee85cd 100644 --- a/gtk2_ardour/editor_timefx.cc +++ b/gtk2_ardour/editor_timefx.cc @@ -159,7 +159,7 @@ void Editor::do_timestretch (TimeStretchDialog& dialog) { Track* t; - Playlist* playlist; + boost::shared_ptr playlist; boost::shared_ptr new_region; for (RegionSelection::iterator i = dialog.regions.begin(); i != dialog.regions.end(); ) { diff --git a/gtk2_ardour/playlist_selection.h b/gtk2_ardour/playlist_selection.h index af0031fec9..813f8a9211 100644 --- a/gtk2_ardour/playlist_selection.h +++ b/gtk2_ardour/playlist_selection.h @@ -2,11 +2,12 @@ #define __ardour_gtk_playlist_selection_h__ #include +#include namespace ARDOUR { class Playlist; } -struct PlaylistSelection : list {}; +struct PlaylistSelection : list > {}; #endif /* __ardour_gtk_playlist_selection_h__ */ diff --git a/gtk2_ardour/playlist_selector.cc b/gtk2_ardour/playlist_selector.cc index ffeaf8f5e9..87531bbbd0 100644 --- a/gtk2_ardour/playlist_selector.cc +++ b/gtk2_ardour/playlist_selector.cc @@ -86,6 +86,17 @@ PlaylistSelector::clear_map () dspl_map.clear (); } +bool +PlaylistSelector::on_unmap_event (GdkEventAny* ev) +{ + cerr << "PLselector unmapped\n"; + clear_map (); + if (model) { + model->clear (); + } + return Dialog::on_unmap_event (ev); +} + void PlaylistSelector::show_for (RouteUI* ruix) { @@ -112,7 +123,8 @@ PlaylistSelector::show_for (RouteUI* ruix) TreeModel::Row others = *(model->append ()); others[columns.text] = _("Other tracks"); - others[columns.playlist] = 0; + boost::shared_ptr proxy = others[columns.playlist]; + proxy.reset (); for (DSPL_Map::iterator x = dspl_map.begin(); x != dspl_map.end(); ++x) { @@ -139,18 +151,20 @@ PlaylistSelector::show_for (RouteUI* ruix) if (ds == this_ds) { row = *(model->prepend()); row[columns.text] = nodename; - row[columns.playlist] = 0; + boost::shared_ptr proxy = row[columns.playlist]; + proxy.reset (); } else { row = *(model->append (others.children())); row[columns.text] = nodename; - row[columns.playlist] = 0; + boost::shared_ptr proxy = row[columns.playlist]; + proxy.reset (); } /* Now insert all the playlists for this diskstream/track in a subtree */ - list *pls = x->second; + list > *pls = x->second; - for (list::iterator p = pls->begin(); p != pls->end(); ++p) { + for (list >::iterator p = pls->begin(); p != pls->end(); ++p) { TreeModel::Row child_row; @@ -173,15 +187,15 @@ PlaylistSelector::show_for (RouteUI* ruix) } void -PlaylistSelector::add_playlist_to_map (Playlist *pl) +PlaylistSelector::add_playlist_to_map (boost::shared_ptr pl) { - AudioPlaylist* apl; + boost::shared_ptr apl; if (pl->frozen()) { return; } - - if ((apl = dynamic_cast (pl)) == 0) { + + if ((apl = boost::dynamic_pointer_cast (pl)) == 0) { return; } @@ -189,7 +203,7 @@ PlaylistSelector::add_playlist_to_map (Playlist *pl) if ((x = dspl_map.find (apl->get_orig_diskstream_id())) == dspl_map.end()) { - pair*> newp (apl->get_orig_diskstream_id(), new list); + pair >*> newp (apl->get_orig_diskstream_id(), new list >); x = dspl_map.insert (dspl_map.end(), newp); } @@ -219,7 +233,7 @@ PlaylistSelector::close_button_click () void PlaylistSelector::selection_changed () { - Playlist *playlist; + boost::shared_ptr playlist; TreeModel::iterator iter = tree.get_selection()->get_selected(); @@ -231,14 +245,14 @@ PlaylistSelector::selection_changed () if ((playlist = ((*iter)[columns.playlist])) != 0) { AudioTrack* at; - AudioPlaylist* apl; + boost::shared_ptr apl; if ((at = rui->audio_track()) == 0) { /* eh? */ return; } - if ((apl = dynamic_cast (playlist)) == 0) { + if ((apl = boost::dynamic_pointer_cast (playlist)) == 0) { /* eh? */ return; } diff --git a/gtk2_ardour/playlist_selector.h b/gtk2_ardour/playlist_selector.h index 2829ba54bb..071f82c616 100644 --- a/gtk2_ardour/playlist_selector.h +++ b/gtk2_ardour/playlist_selector.h @@ -20,6 +20,8 @@ #ifndef __ardour_playlist_selector_h__ #define __ardour_playlist_selector_h__ +#include + #include #include #include @@ -45,8 +47,11 @@ class PlaylistSelector : public ArdourDialog void set_session (ARDOUR::Session*); void show_for (RouteUI*); + protected: + bool on_unmap_event (GdkEventAny*); + private: - typedef std::map*> DSPL_Map; + typedef std::map >*> DSPL_Map; ARDOUR::Session* session; Gtk::ScrolledWindow scroller; @@ -55,7 +60,7 @@ class PlaylistSelector : public ArdourDialog sigc::connection select_connection; - void add_playlist_to_map (ARDOUR::Playlist*); + void add_playlist_to_map (boost::shared_ptr); void clear_map (); void close_button_click (); void selection_changed (); @@ -66,7 +71,7 @@ class PlaylistSelector : public ArdourDialog add (playlist); } Gtk::TreeModelColumn text; - Gtk::TreeModelColumn playlist; + Gtk::TreeModelColumn > playlist; }; ModelColumns columns; diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 390cb20ca8..8a105cd0aa 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -106,7 +106,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway virtual gdouble get_current_zoom () = 0; virtual PlaylistSelector& playlist_selector() const = 0; virtual void route_name_changed (TimeAxisView *) = 0; - virtual void clear_playlist (ARDOUR::Playlist&) = 0; + virtual void clear_playlist (boost::shared_ptr) = 0; virtual void new_playlists () = 0; virtual void copy_playlists () = 0; virtual void clear_playlists () = 0; diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 92af31b19a..bacd9e23f4 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -245,9 +245,9 @@ RouteTimeAxisView::~RouteTimeAxisView () } void -RouteTimeAxisView::set_playlist (Playlist *newplaylist) +RouteTimeAxisView::set_playlist (boost::shared_ptr newplaylist) { - Playlist *pl = playlist(); + boost::shared_ptr pl = playlist(); assert(pl); modified_connection.disconnect (); @@ -312,7 +312,7 @@ RouteTimeAxisView::playlist_changed () label_view (); if (is_track()) { - set_playlist (dynamic_cast(get_diskstream()->playlist())); + set_playlist (get_diskstream()->playlist()); } } @@ -843,7 +843,7 @@ RouteTimeAxisView::rename_current_playlist () if (!ds || ds->destructive()) return; - Playlist *const pl = ds->playlist(); + boost::shared_ptr pl = ds->playlist(); if (!pl) return; @@ -874,7 +874,7 @@ RouteTimeAxisView::use_copy_playlist (bool prompt) if (!ds || ds->destructive()) return; - Playlist *const pl = ds->playlist(); + boost::shared_ptr pl = ds->playlist(); if (!pl) return; @@ -922,7 +922,7 @@ RouteTimeAxisView::use_new_playlist (bool prompt) if (!ds || ds->destructive()) return; - Playlist *const pl = ds->playlist(); + boost::shared_ptr pl = ds->playlist(); if (!pl) return; @@ -955,6 +955,7 @@ RouteTimeAxisView::use_new_playlist (bool prompt) if (name.length()) { ds->use_new_playlist (); ds->playlist()->set_name (name); + cerr << " installed new PL, UC = " << ds->playlist().use_count() << endl; } } @@ -965,11 +966,11 @@ RouteTimeAxisView::clear_playlist () if (!ds || ds->destructive()) return; - Playlist *const pl = ds->playlist(); + boost::shared_ptr pl = ds->playlist(); if (!pl) return; - editor.clear_playlist (*pl); + editor.clear_playlist (pl); } void @@ -1087,7 +1088,7 @@ RouteTimeAxisView::name() const return _route->name(); } -Playlist * +boost::shared_ptr RouteTimeAxisView::playlist () const { boost::shared_ptr ds; @@ -1095,7 +1096,7 @@ RouteTimeAxisView::playlist () const if ((ds = get_diskstream()) != 0) { return ds->playlist(); } else { - return 0; + return boost::shared_ptr (); } } @@ -1146,7 +1147,7 @@ boost::shared_ptr RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t dir) { boost::shared_ptr stream; - Playlist *playlist = 0; + boost::shared_ptr playlist; if ((stream = get_diskstream()) != 0 && (playlist = stream->playlist()) != 0) { return playlist->find_next_region (pos, point, dir); @@ -1158,9 +1159,9 @@ RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t d bool RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op) { - Playlist* what_we_got; + boost::shared_ptr what_we_got; boost::shared_ptr ds = get_diskstream(); - Playlist* playlist; + boost::shared_ptr playlist; bool ret = false; if (ds == 0) { @@ -1185,7 +1186,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op) case Cut: if ((what_we_got = playlist->cut (time)) != 0) { editor.get_cut_buffer().add (what_we_got); - _session.add_command( new MementoCommand(*playlist, &before, &playlist->get_state())); + _session.add_command( new MementoCommand(*playlist.get(), &before, &playlist->get_state())); ret = true; } break; @@ -1198,7 +1199,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op) case Clear: if ((what_we_got = playlist->cut (time)) != 0) { _session.add_command( new MementoCommand(*playlist, &before, &playlist->get_state())); - what_we_got->unref (); + what_we_got->release (); ret = true; } break; @@ -1214,7 +1215,7 @@ RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size return false; } - Playlist* playlist = get_diskstream()->playlist(); + boost::shared_ptr playlist = get_diskstream()->playlist(); PlaylistSelection::iterator p; for (p = selection.playlists.begin(); p != selection.playlists.end() && nth; ++p, --nth); @@ -1227,7 +1228,7 @@ RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size pos = session_frame_to_track_frame(pos, get_diskstream()->speed() ); XMLNode &before = playlist->get_state(); - playlist->paste (**p, pos, times); + playlist->paste (*p, pos, times); _session.add_command( new MementoCommand(*playlist, &before, &playlist->get_state())); return true; @@ -1269,29 +1270,29 @@ RouteTimeAxisView::build_playlist_menu (Gtk::Menu * menu) playlist_menu = new Menu; playlist_menu->set_name ("ArdourContextMenu"); - vector playlists; + vector > playlists; boost::shared_ptr ds = get_diskstream(); RadioMenuItem::Group playlist_group; _session.get_playlists (playlists); - for (vector::iterator i = playlists.begin(); i != playlists.end(); ++i) { + for (vector >::iterator i = playlists.begin(); i != playlists.end(); ++i) { if ((*i)->get_orig_diskstream_id() == ds->id()) { - playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name(), bind (mem_fun (*this, &RouteTimeAxisView::use_playlist), (*i)))); + playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name(), bind (mem_fun (*this, &RouteTimeAxisView::use_playlist), + boost::weak_ptr (*i)))); if (ds->playlist()->id() == (*i)->id()) { static_cast(&playlist_items.back())->set_active(); } } else if (ds->playlist()->id() == (*i)->id()) { - playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name(), bind (mem_fun (*this, &RouteTimeAxisView::use_playlist), (*i)))); + playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name(), bind (mem_fun (*this, &RouteTimeAxisView::use_playlist), + boost::weak_ptr(*i)))); static_cast(&playlist_items.back())->set_active(); } } - - playlist_items.push_back (SeparatorElem()); playlist_items.push_back (MenuElem (_("Rename"), mem_fun(*this, &RouteTimeAxisView::rename_current_playlist))); playlist_items.push_back (SeparatorElem()); @@ -1306,12 +1307,18 @@ RouteTimeAxisView::build_playlist_menu (Gtk::Menu * menu) } void -RouteTimeAxisView::use_playlist (Playlist* pl) +RouteTimeAxisView::use_playlist (boost::weak_ptr wpl) { - AudioPlaylist* apl = dynamic_cast (pl); - assert (is_track()); + boost::shared_ptr pl (wpl.lock()); + + if (!pl) { + return; + } + + boost::shared_ptr apl = boost::dynamic_pointer_cast (pl); + if (apl) { get_diskstream()->use_playlist (apl); } diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index cefe954c9a..1e28a790a6 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -99,7 +99,7 @@ public: string name() const; StreamView* view() const { return _view; } ARDOUR::RouteGroup* edit_group() const; - ARDOUR::Playlist* playlist() const; + boost::shared_ptr playlist() const; protected: friend class StreamView; @@ -176,7 +176,7 @@ protected: void align_style_changed (); void set_align_style (ARDOUR::AlignStyle); - virtual void set_playlist (ARDOUR::Playlist *); + virtual void set_playlist (boost::shared_ptr); void playlist_click (); void show_playlist_selector (); void playlist_changed (); @@ -229,7 +229,7 @@ protected: Gtk::Menu* playlist_action_menu; Gtk::MenuItem* playlist_item; - void use_playlist (ARDOUR::Playlist*); + void use_playlist (boost::weak_ptr); ArdourCanvas::SimpleRect* timestretch_rect; diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index 06475aa1d4..38a0cdd8e2 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -132,7 +132,7 @@ Selection::clear_playlists () /* Selections own their playlists */ for (PlaylistSelection::iterator i = playlists.begin(); i != playlists.end(); ++i) { - (*i)->unref (); + (*i)->release (); } if (!playlists.empty()) { @@ -165,12 +165,12 @@ Selection::toggle (boost::shared_ptr r) } void -Selection::toggle (Playlist* pl) +Selection::toggle (boost::shared_ptr pl) { PlaylistSelection::iterator i; if ((i = find (playlists.begin(), playlists.end(), pl)) == playlists.end()) { - pl->ref (); + pl->use (); playlists.push_back(pl); } else { playlists.erase (i); @@ -260,23 +260,23 @@ Selection::add (boost::shared_ptr r) } void -Selection::add (Playlist* pl) +Selection::add (boost::shared_ptr pl) { if (find (playlists.begin(), playlists.end(), pl) == playlists.end()) { - pl->ref (); + pl->use (); playlists.push_back(pl); PlaylistsChanged (); } } void -Selection::add (const list& pllist) +Selection::add (const list >& pllist) { bool changed = false; - for (list::const_iterator i = pllist.begin(); i != pllist.end(); ++i) { + for (list >::const_iterator i = pllist.begin(); i != pllist.end(); ++i) { if (find (playlists.begin(), playlists.end(), (*i)) == playlists.end()) { - (*i)->ref (); + (*i)->use (); playlists.push_back (*i); changed = true; } @@ -429,9 +429,9 @@ Selection::remove (const list& track_list) } void -Selection::remove (Playlist* track) +Selection::remove (boost::shared_ptr track) { - list::iterator i; + list >::iterator i; if ((i = find (playlists.begin(), playlists.end(), track)) != playlists.end()) { playlists.erase (i); PlaylistsChanged(); @@ -439,13 +439,13 @@ Selection::remove (Playlist* track) } void -Selection::remove (const list& pllist) +Selection::remove (const list >& pllist) { bool changed = false; - for (list::const_iterator i = pllist.begin(); i != pllist.end(); ++i) { + for (list >::const_iterator i = pllist.begin(); i != pllist.end(); ++i) { - list::iterator x; + list >::iterator x; if ((x = find (playlists.begin(), playlists.end(), (*i))) != playlists.end()) { playlists.erase (x); @@ -520,14 +520,14 @@ Selection::set (const list& track_list) } void -Selection::set (Playlist* playlist) +Selection::set (boost::shared_ptr playlist) { clear_playlists (); add (playlist); } void -Selection::set (const list& pllist) +Selection::set (const list >& pllist) { clear_playlists (); add (pllist); diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h index c4336fba21..a2997cd7b5 100644 --- a/gtk2_ardour/selection.h +++ b/gtk2_ardour/selection.h @@ -101,8 +101,8 @@ class Selection : public sigc::trackable void set (std::vector&); long set (TimeAxisView*, nframes_t, nframes_t); void set (ARDOUR::AutomationList*); - void set (ARDOUR::Playlist*); - void set (const list&); + void set (boost::shared_ptr); + void set (const list >&); void set (boost::shared_ptr); void set (AutomationSelectable*); @@ -112,8 +112,8 @@ class Selection : public sigc::trackable void toggle (std::vector&); long toggle (nframes_t, nframes_t); void toggle (ARDOUR::AutomationList*); - void toggle (ARDOUR::Playlist*); - void toggle (const list&); + void toggle (boost::shared_ptr); + void toggle (const list >&); void toggle (boost::shared_ptr); void add (TimeAxisView*); @@ -122,8 +122,8 @@ class Selection : public sigc::trackable void add (std::vector&); long add (nframes_t, nframes_t); void add (ARDOUR::AutomationList*); - void add (ARDOUR::Playlist*); - void add (const list&); + void add (boost::shared_ptr); + void add (const list >&); void add (boost::shared_ptr); void remove (TimeAxisView*); @@ -132,8 +132,8 @@ class Selection : public sigc::trackable void remove (uint32_t selection_id); void remove (nframes_t, nframes_t); void remove (ARDOUR::AutomationList*); - void remove (ARDOUR::Playlist*); - void remove (const list&); + void remove (boost::shared_ptr); + void remove (const list >&); void remove (boost::shared_ptr); void replace (uint32_t time_index, nframes_t start, nframes_t end); diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index 3a652bd0ea..0700954a54 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -168,7 +168,7 @@ class TimeAxisView : public virtual AxisView virtual void step_height (bool bigger); virtual ARDOUR::RouteGroup* edit_group() const { return 0; } - virtual ARDOUR::Playlist* playlist() const { return 0; } + virtual boost::shared_ptr playlist() const { return boost::shared_ptr (); } virtual void set_samples_per_unit (double); virtual void show_selection (TimeSelection&); -- cgit v1.2.3