- const AudioPlaylist* apl;
-
- if ((apl = dynamic_cast<const AudioPlaylist*> (&playlist)) != 0) {
- return new AudioPlaylist (*apl, start, length, name, result_is_hidden);
- } else {
- fatal << _("programming error: Playlist::copyPlaylist called with unknown Playlist type")
- << endmsg;
- /*NOTREACHED*/
- return 0;
+ boost::shared_ptr<Playlist> pl;
+ boost::shared_ptr<const AudioPlaylist> apl;
+ boost::shared_ptr<const MidiPlaylist> mpl;
+
+ try {
+ if ((apl = boost::dynamic_pointer_cast<const AudioPlaylist> (old)) != 0) {
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (apl, start, cnt, name, hidden));
+ pl->set_region_ownership ();
+ } else if ((mpl = boost::dynamic_pointer_cast<const MidiPlaylist> (old)) != 0) {
+ pl = boost::shared_ptr<Playlist> (new MidiPlaylist (mpl, start, cnt, name, hidden));
+ pl->set_region_ownership ();
+ }
+
+ /* this factory method does NOT notify others */
+
+ return pl;
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();