summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_playlist_importer.cc
diff options
context:
space:
mode:
authorSakari Bergen <sakari.bergen@beatwaves.net>2008-11-26 17:13:50 +0000
committerSakari Bergen <sakari.bergen@beatwaves.net>2008-11-26 17:13:50 +0000
commit38382b792113cbf23881c1dca64e16c2d0207d45 (patch)
tree5fb1185a6f21ecc769a4c229fc0f6b7415eabaf5 /libs/ardour/audio_playlist_importer.cc
parent95a86871c028ab7f0ae16608adb9b86495678d50 (diff)
More work on track import and some cleaning up of ElementImporter interface
git-svn-id: svn://localhost/ardour2/branches/3.0@4265 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audio_playlist_importer.cc')
-rw-r--r--libs/ardour/audio_playlist_importer.cc50
1 files changed, 38 insertions, 12 deletions
diff --git a/libs/ardour/audio_playlist_importer.cc b/libs/ardour/audio_playlist_importer.cc
index 022bc6fab2..0318a4ed54 100644
--- a/libs/ardour/audio_playlist_importer.cc
+++ b/libs/ardour/audio_playlist_importer.cc
@@ -66,7 +66,7 @@ AudioPlaylistImportHandler::get_info () const
}
void
-AudioPlaylistImportHandler::get_regions (XMLNode const & node, ElementList & list)
+AudioPlaylistImportHandler::get_regions (XMLNode const & node, ElementList & list) const
{
region_handler.create_regions_from_children (node, list);
}
@@ -79,21 +79,28 @@ AudioPlaylistImportHandler::update_region_id (XMLProperty* id_prop)
id_prop->set_value (new_id.to_s());
}
+void
+AudioPlaylistImportHandler::playlists_by_diskstream (PBD::ID const & id, PlaylistList & list) const
+{
+ for (ElementList::const_iterator it = elements.begin(); it != elements.end(); ++it) {
+ boost::shared_ptr<AudioPlaylistImporter> pl = boost::dynamic_pointer_cast<AudioPlaylistImporter> (*it);
+ if (pl && pl->orig_diskstream() == id) {
+ list.push_back (PlaylistPtr (new AudioPlaylistImporter (*pl)));
+ }
+ }
+}
+
/*** AudioPlaylistImporter ***/
AudioPlaylistImporter::AudioPlaylistImporter (XMLTree const & source, Session & session, AudioPlaylistImportHandler & handler, XMLNode const & node) :
ElementImporter (source, session),
handler (handler),
+ orig_node (node),
xml_playlist (node),
diskstream_id ("0")
{
bool ds_ok = false;
- // Populate region list
- ElementImportHandler::ElementList elements;
- handler.get_regions (node, elements);
- for (ElementImportHandler::ElementList::iterator it = elements.begin(); it != elements.end(); ++it) {
- regions.push_back (boost::dynamic_pointer_cast<AudioRegionImporter> (*it));
- }
+ populate_region_list ();
// Parse XML
XMLPropertyList const & props = xml_playlist.properties();
@@ -104,6 +111,7 @@ AudioPlaylistImporter::AudioPlaylistImporter (XMLTree const & source, Session &
} else if (!prop.compare("name")) {
name = (*it)->value();
} else if (!prop.compare("orig-diskstream-id")) {
+ orig_diskstream_id = (*it)->value();
ds_ok = true;
} else {
std::cerr << string_compose (X_("AudioPlaylistImporter did not recognise XML-property \"%1\""), prop) << endmsg;
@@ -116,6 +124,16 @@ AudioPlaylistImporter::AudioPlaylistImporter (XMLTree const & source, Session &
}
}
+AudioPlaylistImporter::AudioPlaylistImporter (AudioPlaylistImporter const & other) :
+ ElementImporter (other.source, other.session),
+ handler (other.handler),
+ orig_node (other.orig_node),
+ xml_playlist (other.xml_playlist),
+ orig_diskstream_id (other.orig_diskstream_id)
+{
+ populate_region_list ();
+}
+
string
AudioPlaylistImporter::get_info () const
{
@@ -141,7 +159,7 @@ AudioPlaylistImporter::get_info () const
}
bool
-AudioPlaylistImporter::prepare_move ()
+AudioPlaylistImporter::_prepare_move ()
{
// Rename
while (session.playlist_by_name (name) || !handler.check_name (name)) {
@@ -154,19 +172,17 @@ AudioPlaylistImporter::prepare_move ()
xml_playlist.property ("name")->set_value (name);
handler.add_name (name);
- queued = true;
return true;
}
void
-AudioPlaylistImporter::cancel_move ()
+AudioPlaylistImporter::_cancel_move ()
{
handler.remove_name (name);
- queued = false;
}
void
-AudioPlaylistImporter::move ()
+AudioPlaylistImporter::_move ()
{
boost::shared_ptr<Playlist> playlist;
@@ -219,3 +235,13 @@ AudioPlaylistImporter::set_diskstream (PBD::ID const & id)
diskstream_id = id;
}
+void
+AudioPlaylistImporter::populate_region_list ()
+{
+ ElementImportHandler::ElementList elements;
+ handler.get_regions (orig_node, elements);
+ for (ElementImportHandler::ElementList::iterator it = elements.begin(); it != elements.end(); ++it) {
+ regions.push_back (boost::dynamic_pointer_cast<AudioRegionImporter> (*it));
+ }
+}
+