diff options
author | Sakari Bergen <sakari.bergen@beatwaves.net> | 2008-11-26 17:13:50 +0000 |
---|---|---|
committer | Sakari Bergen <sakari.bergen@beatwaves.net> | 2008-11-26 17:13:50 +0000 |
commit | 38382b792113cbf23881c1dca64e16c2d0207d45 (patch) | |
tree | 5fb1185a6f21ecc769a4c229fc0f6b7415eabaf5 /libs/ardour/audio_playlist_importer.cc | |
parent | 95a86871c028ab7f0ae16608adb9b86495678d50 (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.cc | 50 |
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)); + } +} + |