summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/analysis_window.cc6
-rw-r--r--gtk2_ardour/audio_region_editor.cc8
-rw-r--r--gtk2_ardour/audio_streamview.cc4
-rw-r--r--gtk2_ardour/editor.cc30
-rw-r--r--gtk2_ardour/editor.h6
-rw-r--r--gtk2_ardour/editor_audio_import.cc2
-rw-r--r--gtk2_ardour/editor_canvas_events.cc4
-rw-r--r--gtk2_ardour/editor_export_audio.cc2
-rw-r--r--gtk2_ardour/editor_mouse.cc54
-rw-r--r--gtk2_ardour/editor_ops.cc84
-rw-r--r--gtk2_ardour/editor_region_list.cc6
-rw-r--r--gtk2_ardour/editor_selection_list.cc6
-rw-r--r--gtk2_ardour/editor_timefx.cc2
-rw-r--r--gtk2_ardour/playlist_selection.h3
-rw-r--r--gtk2_ardour/playlist_selector.cc40
-rw-r--r--gtk2_ardour/playlist_selector.h11
-rw-r--r--gtk2_ardour/public_editor.h2
-rw-r--r--gtk2_ardour/route_time_axis.cc59
-rw-r--r--gtk2_ardour/route_time_axis.h6
-rw-r--r--gtk2_ardour/selection.cc30
-rw-r--r--gtk2_ardour/selection.h16
-rw-r--r--gtk2_ardour/time_axis_view.h2
22 files changed, 211 insertions, 172 deletions
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<ARDOUR::AudioPlaylist*>((*i)->playlist());
+ boost::shared_ptr<AudioPlaylist> pl
+ = boost::dynamic_pointer_cast<AudioPlaylist*>((*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<ARDOUR::AudioRange>::iterator j = ts.begin(); j != ts.end(); ++j) {
+ for (std::list<AudioRange>::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<Playlist> 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<Playlist> 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<Playlist> 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<Diskstream> ds)
StreamView::playlist_changed(ds);
- AudioPlaylist* apl = dynamic_cast<AudioPlaylist*>(ds->playlist());
+ boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(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<StreamView*>(this), &StreamView::add_region_view);
- AudioPlaylist* apl = dynamic_cast<AudioPlaylist*>(_trackview.get_diskstream()->playlist());
+ boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(_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<Diskstream> ds;
- Playlist* pl = 0;
+ boost::shared_ptr<Playlist> 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<Diskstream> ds;
- Playlist* pl = 0;
- AudioPlaylist* apl = 0;
+ boost::shared_ptr<Playlist> pl;
+ boost::shared_ptr<AudioPlaylist> apl;
- if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = dynamic_cast<AudioPlaylist*> (pl)) != 0)) {
+ if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (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<RegionView*>* all_equivs)
{
- Playlist* pl;
+ boost::shared_ptr<Playlist> pl;
vector<boost::shared_ptr<Region> > results;
RegionView* marv;
boost::shared_ptr<Diskstream> ds;
@@ -3012,7 +3012,7 @@ Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32
}
- if ((pl = dynamic_cast<Playlist*>(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<Region> regi
if ((tatv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
- Playlist* pl;
+ boost::shared_ptr<Playlist> pl;
vector<boost::shared_ptr<Region> > results;
RegionView* marv;
boost::shared_ptr<Diskstream> ds;
@@ -3222,8 +3222,8 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr<Region> regi
/* bus */
continue;
}
-
- if ((pl = dynamic_cast<Playlist*>(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<Playlist> 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<ARDOUR::Playlist>);
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<ARDOUR::Playlist*> motion_frozen_playlists;
+ std::set<boost::shared_ptr<ARDOUR::Playlist> > 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<ARDOUR::Playlist>);
vector<sigc::connection> 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<AudioRegion> region, uint32_
case ImportToTrack:
if (track) {
- Playlist* playlist = track->diskstream()->playlist();
+ boost::shared_ptr<Playlist> playlist = track->diskstream()->playlist();
boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (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<AudioPlaylist*> (atv->get_diskstream()->playlist())) != 0) {
+ boost::shared_ptr<AudioPlaylist> pl;
+ if ((pl = boost::dynamic_pointer_cast<AudioPlaylist> (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<AudioPlaylist*>(atv->get_diskstream()->playlist());
+ boost::shared_ptr<AudioPlaylist> playlist = boost::dynamic_pointer_cast<AudioPlaylist>(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<RegionView*> new_regionviews;
- set<Playlist*> affected_playlists;
- pair<set<Playlist*>::iterator,bool> insert_result;
+ set<boost::shared_ptr<Playlist> > affected_playlists;
+ pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
// TODO: Crossfades need to be copied!
for (list<RegionView*>::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<Playlist> to_playlist = rv->region()->playlist();
RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*>(&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<set<Playlist*>::iterator,bool> insert_result;
+ pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
const list<RegionView*>& layered_regions = selection->regions.by_layer();
for (list<RegionView*>::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<AudioTimeAxisView*> (&rv->get_time_axis_view());
if (atv && atv->is_audio_track()) {
- AudioPlaylist* pl = dynamic_cast<AudioPlaylist*>(atv->get_diskstream()->playlist());
+ boost::shared_ptr<AudioPlaylist> pl = boost::dynamic_pointer_cast<AudioPlaylist>(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<RegionView *> (drag_info.data);
- pair<set<Playlist*>::iterator,bool> insert_result;
+ pair<set<boost::shared_ptr<Playlist> >::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<RegionView*>::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) {
- Playlist* from_playlist;
- Playlist* to_playlist;
+ boost::shared_ptr<Playlist> from_playlist;
+ boost::shared_ptr<Playlist> to_playlist;
double ix1, ix2, iy1, iy2;
@@ -3387,8 +3387,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
for (list<RegionView*>::const_iterator i = new_selection.begin(); i != new_selection.end();i++ ) {
- Playlist* from_playlist;
- Playlist* to_playlist;
+ boost::shared_ptr<Playlist> from_playlist;
+ boost::shared_ptr<Playlist> to_playlist;
double ix1, ix2, iy1, iy2;
@@ -3459,9 +3459,9 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
}
out:
- for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
+ for (set<boost::shared_ptr<Playlist> >::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
(*p)->thaw ();
- session->add_command (new MementoCommand<Playlist>(*(*p), 0, & (*p)->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*((*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> 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<RouteTimeAxisView*>(tvp);
- pair<set<Playlist*>::iterator,bool> insert_result;
+ pair<set<boost::shared_ptr<Playlist> >::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<Playlist> pl = (*i)->region()->playlist();
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
session->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
@@ -4216,9 +4216,9 @@ Editor::trim_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
}
}
- for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
+ for (set<boost::shared_ptr<Playlist> >::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
//(*p)->thaw ();
- session->add_command (new MementoCommand<Playlist>(*(*p), 0, &(*p)->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*(*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<Playlist> 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<Playlist>(*pl, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
} else {
if (!rv->region()->locked()) {
- Playlist *pl = rv->region()->playlist();
+ boost::shared_ptr<Playlist> 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<Playlist>(*pl, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
@@ -4283,22 +4283,22 @@ Editor::point_trim (GdkEvent* event)
for (list<RegionView*>::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<Playlist> 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<Playlist>(*pl, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
}
}
} else {
if (!rv->region()->locked()) {
- Playlist *pl = rv->region()->playlist();
+ boost::shared_ptr<Playlist> 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<Playlist>(*pl, &before, &after));
+ session->add_command (new MementoCommand<Playlist>(*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> playlist = atv->playlist();
double speed = atv->get_diskstream()->speed();
XMLNode &before = playlist->get_state();
playlist->add_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (arv->audio_region())), (nframes_t) (pos * speed));
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
+ session->add_command(new MementoCommand<Playlist>(*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 <ardour/audio_track.h>
#include <ardour/audioplaylist.h>
#include <ardour/region_factory.h>
+#include <ardour/playlist_factory.h>
#include <ardour/reverse.h>
#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<Playlist> pl = (*a)->region()->playlist();
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*a);
if (arv)
@@ -149,7 +150,7 @@ Editor::remove_clicked_region ()
return;
}
- Playlist* playlist = clicked_audio_trackview->playlist();
+ boost::shared_ptr<Playlist> 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<RouteTimeAxisView*> (*tv)) != 0) {
- Playlist *pl;
+ boost::shared_ptr<Playlist> pl;
if ((pl = rtv->playlist()) == 0) {
return region;
@@ -1719,7 +1720,7 @@ Editor::insert_region_list_drag (boost::shared_ptr<AudioRegion> region, int x, i
TimeAxisView *tv;
nframes_t where;
AudioTimeAxisView *atv = 0;
- Playlist *playlist;
+ boost::shared_ptr<Playlist> 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<AudioRegion> 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>(*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> 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<AudioRegion> current;
boost::shared_ptr<Region> current_r;
- Playlist *pl;
+ boost::shared_ptr<Playlist> pl;
nframes_t internal_start;
string new_name;
@@ -2134,7 +2141,7 @@ Editor::create_region_from_selection (vector<boost::shared_ptr<AudioRegion> >& n
boost::shared_ptr<AudioRegion> current;
boost::shared_ptr<Region> current_r;
- Playlist* playlist;
+ boost::shared_ptr<Playlist> playlist;
nframes_t internal_start;
string new_name;
@@ -2189,7 +2196,7 @@ Editor::separate_region_from_selection ()
return;
}
- Playlist *playlist;
+ boost::shared_ptr<Playlist> 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> 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<Playlist*> playlists;
- Playlist *playlist;
+ vector<boost::shared_ptr<Playlist> > playlists;
+ boost::shared_ptr<Playlist> playlist;
if (clicked_trackview != 0) {
@@ -2321,7 +2328,7 @@ Editor::crop_region_to_selection ()
begin_reversible_command (_("trim to selection"));
- for (vector<Playlist*>::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
boost::shared_ptr<Region> region;
@@ -2371,7 +2378,7 @@ Editor::region_fill_track ()
if (!ar)
continue;
- Playlist* pl = region->playlist();
+ boost::shared_ptr<Playlist> 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> playlist;
if (selection->tracks.empty()) {
return;
@@ -2781,7 +2788,7 @@ Editor::bounce_range_selection ()
continue;
}
- Playlist* playlist;
+ boost::shared_ptr<Playlist> 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> playlist;
XMLNode* before;
};
@@ -2910,7 +2917,7 @@ struct lt_playlist {
void
Editor::cut_copy_regions (CutCopyOp op)
{
- typedef std::map<AudioPlaylist*,AudioPlaylist*> PlaylistMapping;
+ typedef std::map<boost::shared_ptr<AudioPlaylist>,boost::shared_ptr<AudioPlaylist> > 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<AudioPlaylist*>((*x)->region()->playlist());
+ boost::shared_ptr<AudioPlaylist> pl = boost::dynamic_pointer_cast<AudioPlaylist>((*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<AudioPlaylist*>((*x)->region()->playlist());
- AudioPlaylist* npl;
+ boost::shared_ptr<AudioPlaylist> pl = boost::dynamic_pointer_cast<AudioPlaylist>((*x)->region()->playlist());
+ boost::shared_ptr<AudioPlaylist> 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<AudioPlaylist> (PlaylistFactory::create (*session, "cutlist", true));
npl->freeze();
pmap[pl] = npl;
} else {
@@ -2983,7 +2991,7 @@ Editor::cut_copy_regions (CutCopyOp op)
x = tmp;
}
- list<Playlist*> foo;
+ list<boost::shared_ptr<Playlist> > 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<Playlist*>::iterator chunk;
- list<Playlist*>::iterator tmp;
+ list<boost::shared_ptr<Playlist> >::iterator chunk;
+ list<boost::shared_ptr<Playlist> >::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<Playlist> pl;
+ boost::shared_ptr<AudioPlaylist> apl;
if ((atv = dynamic_cast<AudioTimeAxisView*> (*t)) == 0) {
continue;
@@ -3100,8 +3108,8 @@ Editor::paste_named_selection (float times)
if ((pl = atv->playlist()) == 0) {
continue;
}
-
- if ((apl = dynamic_cast<AudioPlaylist*> (pl)) == 0) {
+
+ if ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (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<AudioPlaylist>(*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> 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> playlist;
vector<boost::shared_ptr<AudioRegion> > new_regions;
vector<boost::shared_ptr<AudioRegion> >::iterator ri;
@@ -3227,20 +3235,20 @@ Editor::center_edit_cursor ()
}
void
-Editor::clear_playlist (Playlist& playlist)
+Editor::clear_playlist (boost::shared_ptr<Playlist> playlist)
{
begin_reversible_command (_("clear playlist"));
- XMLNode &before = playlist.get_state();
- playlist.clear ();
- XMLNode &after = playlist.get_state();
- session->add_command (new MementoCommand<Playlist>(playlist, &before, &after));
+ XMLNode &before = playlist->get_state();
+ playlist->clear ();
+ XMLNode &after = playlist->get_state();
+ session->add_command (new MementoCommand<Playlist>(*playlist.get(), &before, &after));
commit_reversible_command ();
}
void
Editor::nudge_track (bool use_edit_cursor, bool forwards)
{
- Playlist *playlist;
+ boost::shared_ptr<Playlist> 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> 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<AudioRegion> regio
parent = *(region_list_model->append());
parent[region_list_columns.name] = _("Hidden");
- /// XXX FIX ME parent[region_list_columns.region]->reset ();
+ boost::shared_ptr<Region> proxy = parent[region_list_columns.region];
+ proxy.reset ();
} else {
@@ -109,7 +110,8 @@ Editor::add_audio_region_to_region_display (boost::shared_ptr<AudioRegion> 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<Region> 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<Playlist*> thelist;
+ boost::shared_ptr<Playlist> what_we_found;
+ list<boost::shared_ptr<Playlist> > thelist;
for (TrackViewList::iterator i = views->begin(); i != views->end(); ++i) {
- Playlist *pl = (*i)->playlist();
+ boost::shared_ptr<Playlist> 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> playlist;
boost::shared_ptr<Region> 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 <list>
+#include <boost/shared_ptr.hpp>
namespace ARDOUR {
class Playlist;
}
-struct PlaylistSelection : list<ARDOUR::Playlist*> {};
+struct PlaylistSelection : list<boost::shared_ptr<ARDOUR::Playlist> > {};
#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<Playlist> 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<Playlist> proxy = row[columns.playlist];
+ proxy.reset ();
} else {
row = *(model->append (others.children()));
row[columns.text] = nodename;
- row[columns.playlist] = 0;
+ boost::shared_ptr<Playlist> proxy = row[columns.playlist];
+ proxy.reset ();
}
/* Now insert all the playlists for this diskstream/track in a subtree */
- list<Playlist*> *pls = x->second;
+ list<boost::shared_ptr<Playlist> > *pls = x->second;
- for (list<Playlist*>::iterator p = pls->begin(); p != pls->end(); ++p) {
+ for (list<boost::shared_ptr<Playlist> >::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<Playlist> pl)
{
- AudioPlaylist* apl;
+ boost::shared_ptr<AudioPlaylist> apl;
if (pl->frozen()) {
return;
}
-
- if ((apl = dynamic_cast<AudioPlaylist*> (pl)) == 0) {
+
+ if ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (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<PBD::ID,list<Playlist*>*> newp (apl->get_orig_diskstream_id(), new list<Playlist*>);
+ pair<PBD::ID,list<boost::shared_ptr<Playlist> >*> newp (apl->get_orig_diskstream_id(), new list<boost::shared_ptr<Playlist> >);
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> 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<AudioPlaylist> apl;
if ((at = rui->audio_track()) == 0) {
/* eh? */
return;
}
- if ((apl = dynamic_cast<AudioPlaylist*> (playlist)) == 0) {
+ if ((apl = boost::dynamic_pointer_cast<AudioPlaylist> (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 <boost/shared_ptr.hpp>
+
#include <gtkmm/box.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/button.h>
@@ -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<PBD::ID,std::list<ARDOUR::Playlist*>*> DSPL_Map;
+ typedef std::map<PBD::ID,std::list<boost::shared_ptr<ARDOUR::Playlist> >*> 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<ARDOUR::Playlist>);
void clear_map ();
void close_button_click ();
void selection_changed ();
@@ -66,7 +71,7 @@ class PlaylistSelector : public ArdourDialog
add (playlist);
}
Gtk::TreeModelColumn<std::string> text;
- Gtk::TreeModelColumn<ARDOUR::Playlist*> playlist;
+ Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Playlist> > 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<ARDOUR::Playlist>) = 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<Playlist> newplaylist)
{
- Playlist *pl = playlist();
+ boost::shared_ptr<Playlist> pl = playlist();
assert(pl);
modified_connection.disconnect ();
@@ -312,7 +312,7 @@ RouteTimeAxisView::playlist_changed ()
label_view ();
if (is_track()) {
- set_playlist (dynamic_cast<Playlist*>(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<Playlist> 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<const Playlist> 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<const Playlist> 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<Playlist> 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<Playlist>
RouteTimeAxisView::playlist () const
{
boost::shared_ptr<Diskstream> ds;
@@ -1095,7 +1096,7 @@ RouteTimeAxisView::playlist () const
if ((ds = get_diskstream()) != 0) {
return ds->playlist();
} else {
- return 0;
+ return boost::shared_ptr<Playlist> ();
}
}
@@ -1146,7 +1147,7 @@ boost::shared_ptr<Region>
RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t dir)
{
boost::shared_ptr<Diskstream> stream;
- Playlist *playlist = 0;
+ boost::shared_ptr<Playlist> 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<Playlist> what_we_got;
boost::shared_ptr<Diskstream> ds = get_diskstream();
- Playlist* playlist;
+ boost::shared_ptr<Playlist> 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>(*playlist, &before, &playlist->get_state()));
+ _session.add_command( new MementoCommand<Playlist>(*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>(*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> 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>(*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<Playlist*> playlists;
+ vector<boost::shared_ptr<Playlist> > playlists;
boost::shared_ptr<Diskstream> ds = get_diskstream();
RadioMenuItem::Group playlist_group;
_session.get_playlists (playlists);
- for (vector<Playlist*>::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ for (vector<boost::shared_ptr<Playlist> >::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<Playlist> (*i))));
if (ds->playlist()->id() == (*i)->id()) {
static_cast<RadioMenuItem*>(&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<Playlist>(*i))));
static_cast<RadioMenuItem*>(&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<Playlist> wpl)
{
- AudioPlaylist* apl = dynamic_cast<AudioPlaylist*> (pl);
-
assert (is_track());
+ boost::shared_ptr<Playlist> pl (wpl.lock());
+
+ if (!pl) {
+ return;
+ }
+
+ boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist> (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<ARDOUR::Playlist> 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<ARDOUR::Playlist>);
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<ARDOUR::Playlist>);
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<Redirect> r)
}
void
-Selection::toggle (Playlist* pl)
+Selection::toggle (boost::shared_ptr<Playlist> 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<Redirect> r)
}
void
-Selection::add (Playlist* pl)
+Selection::add (boost::shared_ptr<Playlist> pl)
{
if (find (playlists.begin(), playlists.end(), pl) == playlists.end()) {
- pl->ref ();
+ pl->use ();
playlists.push_back(pl);
PlaylistsChanged ();
}
}
void
-Selection::add (const list<Playlist*>& pllist)
+Selection::add (const list<boost::shared_ptr<Playlist> >& pllist)
{
bool changed = false;
- for (list<Playlist*>::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
+ for (list<boost::shared_ptr<Playlist> >::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<TimeAxisView*>& track_list)
}
void
-Selection::remove (Playlist* track)
+Selection::remove (boost::shared_ptr<Playlist> track)
{
- list<Playlist*>::iterator i;
+ list<boost::shared_ptr<Playlist> >::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<Playlist*>& pllist)
+Selection::remove (const list<boost::shared_ptr<Playlist> >& pllist)
{
bool changed = false;
- for (list<Playlist*>::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
+ for (list<boost::shared_ptr<Playlist> >::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
- list<Playlist*>::iterator x;
+ list<boost::shared_ptr<Playlist> >::iterator x;
if ((x = find (playlists.begin(), playlists.end(), (*i))) != playlists.end()) {
playlists.erase (x);
@@ -520,14 +520,14 @@ Selection::set (const list<TimeAxisView*>& track_list)
}
void
-Selection::set (Playlist* playlist)
+Selection::set (boost::shared_ptr<Playlist> playlist)
{
clear_playlists ();
add (playlist);
}
void
-Selection::set (const list<Playlist*>& pllist)
+Selection::set (const list<boost::shared_ptr<Playlist> >& 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<RegionView*>&);
long set (TimeAxisView*, nframes_t, nframes_t);
void set (ARDOUR::AutomationList*);
- void set (ARDOUR::Playlist*);
- void set (const list<ARDOUR::Playlist*>&);
+ void set (boost::shared_ptr<ARDOUR::Playlist>);
+ void set (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void set (boost::shared_ptr<ARDOUR::Redirect>);
void set (AutomationSelectable*);
@@ -112,8 +112,8 @@ class Selection : public sigc::trackable
void toggle (std::vector<RegionView*>&);
long toggle (nframes_t, nframes_t);
void toggle (ARDOUR::AutomationList*);
- void toggle (ARDOUR::Playlist*);
- void toggle (const list<ARDOUR::Playlist*>&);
+ void toggle (boost::shared_ptr<ARDOUR::Playlist>);
+ void toggle (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void toggle (boost::shared_ptr<ARDOUR::Redirect>);
void add (TimeAxisView*);
@@ -122,8 +122,8 @@ class Selection : public sigc::trackable
void add (std::vector<RegionView*>&);
long add (nframes_t, nframes_t);
void add (ARDOUR::AutomationList*);
- void add (ARDOUR::Playlist*);
- void add (const list<ARDOUR::Playlist*>&);
+ void add (boost::shared_ptr<ARDOUR::Playlist>);
+ void add (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void add (boost::shared_ptr<ARDOUR::Redirect>);
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<ARDOUR::Playlist*>&);
+ void remove (boost::shared_ptr<ARDOUR::Playlist>);
+ void remove (const list<boost::shared_ptr<ARDOUR::Playlist> >&);
void remove (boost::shared_ptr<ARDOUR::Redirect>);
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<ARDOUR::Playlist> playlist() const { return boost::shared_ptr<ARDOUR::Playlist> (); }
virtual void set_samples_per_unit (double);
virtual void show_selection (TimeSelection&);