/*
- Copyright (C) 2000-2006 Paul Davis
+ Copyright (C) 2000-2006 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
-#include <pbd/error.h>
+#include "pbd/error.h"
+#include "pbd/xml++.h"
-#include <ardour/playlist.h>
-#include <ardour/audioplaylist.h>
-#include <ardour/midi_playlist.h>
-#include <ardour/playlist_factory.h>
+#include "ardour/playlist.h"
+#include "ardour/audioplaylist.h"
+#include "ardour/midi_playlist.h"
+#include "ardour/playlist_factory.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
+using namespace std;
using namespace ARDOUR;
using namespace PBD;
-sigc::signal<void,boost::shared_ptr<Playlist> > PlaylistFactory::PlaylistCreated;
+PBD::Signal2<void,boost::shared_ptr<Playlist>, bool> PlaylistFactory::PlaylistCreated;
-boost::shared_ptr<Playlist>
-PlaylistFactory::create (Session& s, const XMLNode& node, bool hidden)
+boost::shared_ptr<Playlist>
+PlaylistFactory::create (Session& s, const XMLNode& node, bool hidden, bool unused)
{
- const XMLProperty* type = node.property("type");
+ XMLProperty const * type = node.property("type");
boost::shared_ptr<Playlist> pl;
- if ( !type || type->value() == "audio" )
- pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, node, hidden));
- else if ( type->value() == "midi" )
- pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, node, hidden));
+ try {
+ if (!type || type->value() == "audio") {
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, node, hidden));
+ } else if (type->value() == "midi") {
+ pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, node, hidden));
+ }
- pl->set_region_ownership ();
+ pl->set_region_ownership ();
+
+ if (pl && !hidden) {
+ PlaylistCreated (pl, unused);
+ }
+ return pl;
- if (pl && !hidden) {
- PlaylistCreated (pl);
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
}
- return pl;
}
-boost::shared_ptr<Playlist>
-PlaylistFactory::create (DataType type, Session& s, string name, bool hidden)
+boost::shared_ptr<Playlist>
+PlaylistFactory::create (DataType type, Session& s, string name, bool hidden)
{
boost::shared_ptr<Playlist> pl;
- if (type == DataType::AUDIO)
- pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, name, hidden));
- else if (type == DataType::MIDI)
- pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, name, hidden));
+ try {
+ if (type == DataType::AUDIO)
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, name, hidden));
+ else if (type == DataType::MIDI)
+ pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, name, hidden));
- if (pl && !hidden) {
- PlaylistCreated (pl);
- }
+ if (pl && !hidden) {
+ PlaylistCreated (pl, false);
+ }
- return pl;
+ return pl;
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
+ }
}
-boost::shared_ptr<Playlist>
-PlaylistFactory::create (boost::shared_ptr<const Playlist> old, string name, bool hidden)
+boost::shared_ptr<Playlist>
+PlaylistFactory::create (boost::shared_ptr<const Playlist> old, string name, bool hidden)
{
boost::shared_ptr<Playlist> pl;
boost::shared_ptr<const AudioPlaylist> apl;
boost::shared_ptr<const MidiPlaylist> mpl;
- if ((apl = boost::dynamic_pointer_cast<const AudioPlaylist> (old)) != 0) {
- pl = boost::shared_ptr<Playlist> (new AudioPlaylist (apl, 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, name, hidden));
- pl->set_region_ownership ();
- }
+ try {
- if (pl && !hidden) {
- PlaylistCreated (pl);
+ if ((apl = boost::dynamic_pointer_cast<const AudioPlaylist> (old)) != 0) {
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (apl, 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, name, hidden));
+ pl->set_region_ownership ();
+ }
+
+ if (pl && !hidden) {
+ PlaylistCreated (pl, false);
+ }
+
+ return pl;
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
}
- return pl;
}
-boost::shared_ptr<Playlist>
-PlaylistFactory::create (boost::shared_ptr<const Playlist> old, nframes_t start, nframes_t cnt, string name, bool hidden)
+boost::shared_ptr<Playlist>
+PlaylistFactory::create (boost::shared_ptr<const Playlist> old, framepos_t start, framecnt_t cnt, string name, bool hidden)
{
boost::shared_ptr<Playlist> pl;
boost::shared_ptr<const AudioPlaylist> apl;
boost::shared_ptr<const MidiPlaylist> mpl;
-
- 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 */
+ 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;
+ return pl;
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
+ }
}