/* * Copyright (C) 2008-2009 Paul Davis * Copyright (C) 2008-2012 Sakari Bergen * Copyright (C) 2009-2012 David Robillard * * 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 * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ardour/export_channel_configuration.h" #include "pbd/convert.h" #include "pbd/enumwriter.h" #include "pbd/pthread_utils.h" using namespace PBD; namespace ARDOUR { /* ExportChannelConfiguration */ ExportChannelConfiguration::ExportChannelConfiguration (Session & session) : session (session) , split (false) , region_type (RegionExportChannelFactory::None) { } XMLNode & ExportChannelConfiguration::get_state () { XMLNode * root = new XMLNode ("ExportChannelConfiguration"); XMLNode * channel; root->set_property ("split", get_split()); root->set_property ("channels", get_n_chans()); switch (region_type) { case RegionExportChannelFactory::None: // Do nothing break; default: root->set_property ("region-processing", enum_2_string (region_type)); break; } uint32_t i = 1; for (ExportChannelConfiguration::ChannelList::const_iterator c_it = channels.begin(); c_it != channels.end(); ++c_it) { channel = root->add_child ("Channel"); if (!channel) { continue; } channel->set_property ("number", i); (*c_it)->get_state (channel); ++i; } return *root; } int ExportChannelConfiguration::set_state (const XMLNode & root) { bool yn; if (root.get_property ("split", yn)) { set_split (yn); } std::string str; if (root.get_property ("region-processing", str)) { set_region_processing_type ((RegionExportChannelFactory::Type) string_2_enum (str, RegionExportChannelFactory::Type)); } XMLNodeList channels = root.children ("Channel"); for (XMLNodeList::iterator it = channels.begin(); it != channels.end(); ++it) { ExportChannelPtr channel (new PortExportChannel ()); channel->set_state (*it, session); register_channel (channel); } return 0; } bool ExportChannelConfiguration::all_channels_have_ports () const { for (ChannelList::const_iterator it = channels.begin(); it != channels.end(); ++it) { if ((*it)->empty ()) { return false; } } return true; } void ExportChannelConfiguration::configurations_for_files (std::list > & configs) { configs.clear (); if (!split) { configs.push_back (shared_from_this ()); return; } for (ChannelList::const_iterator it = channels.begin (); it != channels.end (); ++it) { boost::shared_ptr config (new ExportChannelConfiguration (session)); config->set_name (_name); config->register_channel (*it); configs.push_back (config); } } } // namespace ARDOUR