X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_profile_manager.h;h=aff481eced4bc11d05ed659c681dcc90c155d12c;hb=7b6b75f38ff6b34de3f70e36045498f227c1727d;hp=84a5251aa8b30f7b8062158c345df93f400d72ab;hpb=68f04adec110a991e2b2c1657e67a7dc791decc1;p=ardour.git diff --git a/libs/ardour/ardour/export_profile_manager.h b/libs/ardour/ardour/export_profile_manager.h index 84a5251aa8..aff481eced 100644 --- a/libs/ardour/ardour/export_profile_manager.h +++ b/libs/ardour/ardour/export_profile_manager.h @@ -24,24 +24,19 @@ #include #include #include -#include +#include #include #include -#include #include -#include -#include -#include +#include "pbd/uuid.h" +#include "pbd/file_utils.h" +#include "pbd/xml++.h" -#include -#include -#include - -using std::string; -using std::list; -using std::set; +#include "ardour/filesystem_paths.h" +#include "ardour/location.h" +#include "ardour/types.h" namespace ARDOUR { @@ -65,13 +60,13 @@ class ExportProfileManager void load_profile (); void prepare_for_export (); - + typedef boost::shared_ptr PresetPtr; typedef std::list PresetList; - + PresetList const & get_presets () { return preset_list; } - void load_preset (PresetPtr preset); - PresetPtr save_preset (string const & name); + bool load_preset (PresetPtr preset); + PresetPtr save_preset (std::string const & name); void remove_preset (); private: @@ -79,27 +74,27 @@ class ExportProfileManager typedef std::pair FilePair; typedef std::map FileMap; - + HandlerPtr handler; Session & session; - + void load_presets (); void load_preset_from_disk (PBD::sys::path const & path); - - void set_state (XMLNode const & root); - void set_global_state (XMLNode const & root); - void set_local_state (XMLNode const & root); - + + bool set_state (XMLNode const & root); + bool set_global_state (XMLNode const & root); + bool set_local_state (XMLNode const & root); + void serialize_profile (XMLNode & root); void serialize_global_profile (XMLNode & root); void serialize_local_profile (XMLNode & root); - + PresetList preset_list; PresetPtr current_preset; FileMap preset_file_map; - + std::vector find_file (std::string const & pattern); - + PBD::sys::path export_config_dir; PBD::SearchPath search_path; @@ -112,7 +107,7 @@ class ExportProfileManager typedef std::list LocationList; enum TimeFormat { - SMPTE, + Timecode, BBT, MinSec, Frames, @@ -122,46 +117,49 @@ class ExportProfileManager struct TimespanState { TimespanListPtr timespans; TimeFormat time_format; - + boost::shared_ptr session_range; boost::shared_ptr selection_range; boost::shared_ptr ranges; - + TimespanState (boost::shared_ptr session_range, boost::shared_ptr selection_range, - boost::shared_ptr ranges) : - timespans (new TimespanList ()), - time_format (SMPTE), - - session_range (session_range), - selection_range (selection_range), - ranges (ranges) + boost::shared_ptr ranges) + : timespans (new TimespanList ()) + , time_format (Timecode) + , session_range (session_range) + , selection_range (selection_range) + , ranges (ranges) {} }; - + typedef boost::shared_ptr TimespanStatePtr; typedef std::list TimespanStateList; - + void set_selection_range (nframes_t start = 0, nframes_t end = 0); - TimespanStateList const & get_timespans () { return timespans; } - + std::string set_single_range (nframes_t start, nframes_t end, Glib::ustring name); + TimespanStateList const & get_timespans () { return check_list (timespans); } + private: TimespanStateList timespans; - void init_timespans (XMLNodeList nodes); - + bool init_timespans (XMLNodeList nodes); + TimespanStatePtr deserialize_timespan (XMLNode & root); XMLNode & serialize_timespan (TimespanStatePtr state); - + /* Locations */ - + void update_ranges (); - + boost::shared_ptr session_range; boost::shared_ptr selection_range; boost::shared_ptr ranges; + bool single_range_mode; + boost::shared_ptr single_range; + /* Channel Configs */ public: @@ -169,22 +167,19 @@ class ExportProfileManager struct ChannelConfigState { ChannelConfigPtr config; - + ChannelConfigState (ChannelConfigPtr ptr) : config (ptr) {} }; typedef boost::shared_ptr ChannelConfigStatePtr; typedef std::list ChannelConfigStateList; - - ChannelConfigStateList const & get_channel_configs () { return channel_configs; } + + ChannelConfigStateList const & get_channel_configs () { return check_list (channel_configs); } private: ChannelConfigStateList channel_configs; - void init_channel_configs (XMLNodeList nodes); - - ChannelConfigStatePtr deserialize_channel_config (XMLNode & root); - XMLNode & serialize_channel_config (ChannelConfigStatePtr state); + bool init_channel_configs (XMLNodeList nodes); /* Formats */ public: @@ -195,65 +190,61 @@ class ExportProfileManager struct FormatState { boost::shared_ptr list; FormatPtr format; - + FormatState (boost::shared_ptr list, FormatPtr format) : list (list), format (format) {} }; typedef boost::shared_ptr FormatStatePtr; typedef std::list FormatStateList; - - FormatStateList const & get_formats () { return formats; } + + FormatStateList const & get_formats () { return check_list (formats); } FormatStatePtr duplicate_format_state (FormatStatePtr state); void remove_format_state (FormatStatePtr state); - + PBD::sys::path save_format_to_disk (FormatPtr format); void remove_format_profile (FormatPtr format); FormatPtr get_new_format (FormatPtr original); - - sigc::signal FormatListChanged; + + PBD::Signal0 FormatListChanged; private: FormatStateList formats; - void init_formats (XMLNodeList nodes); + bool init_formats (XMLNodeList nodes); FormatStatePtr deserialize_format (XMLNode & root); XMLNode & serialize_format (FormatStatePtr state); void load_formats (); - + FormatPtr load_format (XMLNode & node); void load_format_from_disk (PBD::sys::path const & path); boost::shared_ptr format_list; FileMap format_file_map; - + /* Filenames */ public: - + typedef boost::shared_ptr FilenamePtr; - + struct FilenameState { FilenamePtr filename; - + FilenameState (FilenamePtr ptr) : filename (ptr) {} }; typedef boost::shared_ptr FilenameStatePtr; typedef std::list FilenameStateList; - - FilenameStateList const & get_filenames () { return filenames; } + + FilenameStateList const & get_filenames () { return check_list (filenames); } FilenameStatePtr duplicate_filename_state (FilenameStatePtr state); void remove_filename_state (FilenameStatePtr state); private: FilenameStateList filenames; - - void init_filenames (XMLNodeList nodes); - - FilenameStatePtr deserialize_filename (XMLNode & root); - XMLNode & serialize_filename (FilenameStatePtr state); + bool init_filenames (XMLNodeList nodes); FilenamePtr load_filename (XMLNode & node); /* Warnings */ @@ -263,15 +254,32 @@ class ExportProfileManager std::list warnings; std::list conflicting_filenames; }; - + boost::shared_ptr get_warnings (); - + private: void check_config (boost::shared_ptr warnings, TimespanStatePtr timespan_state, ChannelConfigStatePtr channel_config_state, FormatStatePtr format_state, FilenameStatePtr filename_state); + + bool check_format (FormatPtr format, uint32_t channels); + bool check_sndfile_format (FormatPtr format, unsigned int channels); + + /* Utilities */ + + /* Element state lists should never be empty, this is used to check them */ + template + std::list const & + check_list (std::list const & list) + { + if (list.empty()) { + throw std::runtime_error ("Programming error: Uninitialized list in ExportProfileManager"); + } + return list; + } + };