Store Region export state in instant.xml (fixes #3935)
authorSakari Bergen <sakari.bergen@beatwaves.net>
Sat, 28 Jan 2012 15:05:53 +0000 (15:05 +0000)
committerSakari Bergen <sakari.bergen@beatwaves.net>
Sat, 28 Jan 2012 15:05:53 +0000 (15:05 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@11376 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/export_channel_selector.cc
libs/ardour/ardour/export_channel.h
libs/ardour/ardour/export_channel_configuration.h
libs/ardour/enums.cc
libs/ardour/export_channel_configuration.cc
libs/ardour/export_profile_manager.cc

index 4f332c9bff9a0cde9d44801bb10c74754b0ccb3c..b9c2dd5a787c9616bcc24462a9b8e7d71dda755f 100644 (file)
@@ -478,6 +478,24 @@ void
 RegionExportChannelSelector::sync_with_manager ()
 {
        state = manager->get_channel_configs().front();
+
+       if (!state) { return; }
+
+       switch (state->config->region_processing_type()) {
+       case RegionExportChannelFactory::None:
+               // Do nothing
+               break;
+       case RegionExportChannelFactory::Raw:
+               raw_button.set_active (true);
+               break;
+       case RegionExportChannelFactory::Fades:
+               fades_button.set_active (true);
+               break;
+       case RegionExportChannelFactory::Processed:
+               processed_button.set_active (true);
+               break;
+       }
+
        handle_selection ();
 }
 
@@ -490,17 +508,21 @@ RegionExportChannelSelector::handle_selection ()
 
        state->config->clear_channels ();
 
+       RegionExportChannelFactory::Type type = RegionExportChannelFactory::None;
        if (raw_button.get_active ()) {
-               factory.reset (new RegionExportChannelFactory (_session, region, track, RegionExportChannelFactory::Raw));
+               type = RegionExportChannelFactory::Raw;
        } else if (fades_button.get_active ()) {
-               factory.reset (new RegionExportChannelFactory (_session, region, track, RegionExportChannelFactory::Fades));
+               type = RegionExportChannelFactory::Fades;
        } else if (processed_button.get_active ()) {
-               factory.reset (new RegionExportChannelFactory(_session, region, track, RegionExportChannelFactory::Processed));
+               type = RegionExportChannelFactory::Processed;
        } else {
                CriticalSelectionChanged ();
                return;
        }
 
+       factory.reset (new RegionExportChannelFactory (_session, region, track, type));
+       state->config->set_region_processing_type (type);
+
        for (size_t chan = 0; chan < region_chans; ++chan) {
                state->config->register_channel (factory->create (chan));
        }
index a10bdfc29019c294f7164e7ac75e1f4d9057264f..6f9682018c514095febe758fb44b3f799bb6d973 100644 (file)
@@ -93,6 +93,7 @@ class RegionExportChannelFactory
 {
   public:
        enum Type {
+               None,
                Raw,
                Fades,
                Processed
index d84638ca8529011209076622684f29d6871cfec4..a950cecc65194f1d6b6bd843ac84114645d88cd6 100644 (file)
@@ -68,6 +68,9 @@ class ExportChannelConfiguration : public boost::enable_shared_from_this<ExportC
        void set_name (std::string name) { _name = name; }
        void set_split (bool value) { split = value; }
 
+       RegionExportChannelFactory::Type region_processing_type() const { return region_type; }
+       void set_region_processing_type(RegionExportChannelFactory::Type type) { region_type = type; }
+
        bool get_split () const { return split; }
        uint32_t get_n_chans () const { return channels.size(); }
 
@@ -88,6 +91,7 @@ class ExportChannelConfiguration : public boost::enable_shared_from_this<ExportC
        ChannelList     channels;
        bool            split; // Split to mono files
        std::string  _name;
+       RegionExportChannelFactory::Type region_type;
 };
 
 } // namespace ARDOUR
index fcf3b031addc7f35cbb43e19f4cded52c304442f..d1eca7401c032baae9078083c315a625027d344b 100644 (file)
@@ -27,6 +27,7 @@
 #include "ardour/export_filename.h"
 #include "ardour/export_format_base.h"
 #include "ardour/export_profile_manager.h"
+#include "ardour/export_channel_configuration.h"
 #include "ardour/io.h"
 #include "ardour/location.h"
 #include "ardour/midi_model.h"
@@ -112,6 +113,7 @@ setup_enum_writer ()
        ExportFormatBase::SampleRate _ExportFormatBase_SampleRate;
        ExportFormatBase::SRCQuality _ExportFormatBase_SRCQuality;
        ExportProfileManager::TimeFormat _ExportProfileManager_TimeFormat;
+       RegionExportChannelFactory::Type _RegionExportChannelFactory_Type;
        Delivery::Role _Delivery_Role;
        IO::Direction _IO_Direction;
        MuteMaster::MutePoint _MuteMaster_MutePoint;
@@ -529,6 +531,12 @@ setup_enum_writer ()
        REGISTER_CLASS_ENUM (ExportProfileManager, Frames);
        REGISTER (_ExportProfileManager_TimeFormat);
 
+       REGISTER_CLASS_ENUM (RegionExportChannelFactory, None);
+       REGISTER_CLASS_ENUM (RegionExportChannelFactory, Raw);
+       REGISTER_CLASS_ENUM (RegionExportChannelFactory, Fades);
+       REGISTER_CLASS_ENUM (RegionExportChannelFactory, Processed);
+       REGISTER (_RegionExportChannelFactory_Type);
+
        REGISTER_CLASS_ENUM (Delivery, Insert);
        REGISTER_CLASS_ENUM (Delivery, Send);
        REGISTER_CLASS_ENUM (Delivery, Listen);
index 31729e171b2f4bac3d7637ee30521b5e605fe518..9487d021b49273f2292e26b6466917ecbaa7b379 100644 (file)
@@ -31,6 +31,7 @@
 #include "ardour/audioengine.h"
 
 #include "pbd/convert.h"
+#include "pbd/enumwriter.h"
 #include "pbd/pthread_utils.h"
 
 using namespace PBD;
@@ -40,9 +41,10 @@ namespace ARDOUR
 
 /* ExportChannelConfiguration */
 
-ExportChannelConfiguration::ExportChannelConfiguration (Session & session) :
-  session (session),
-  split (false)
+ExportChannelConfiguration::ExportChannelConfiguration (Session & session)
+  : session (session)
+  , split (false)
+  , region_type (RegionExportChannelFactory::None)
 {
 
 }
@@ -56,6 +58,15 @@ ExportChannelConfiguration::get_state ()
        root->add_property ("split", get_split() ? "true" : "false");
        root->add_property ("channels", to_string (get_n_chans(), std::dec));
 
+       switch (region_type) {
+       case RegionExportChannelFactory::None:
+               // Do nothing
+               break;
+       default:
+               root->add_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");
@@ -79,6 +90,11 @@ ExportChannelConfiguration::set_state (const XMLNode & root)
                set_split (!prop->value().compare ("true"));
        }
 
+       if ((prop = root.property ("region-processing"))) {
+               set_region_processing_type ((RegionExportChannelFactory::Type)
+                       string_2_enum (prop->value(), RegionExportChannelFactory::Type));
+       }
+
        XMLNodeList channels = root.children ("Channel");
        for (XMLNodeList::iterator it = channels.begin(); it != channels.end(); ++it) {
                ExportChannelPtr channel (new PortExportChannel ());
index 459f8785967e72b82e8c76e37969a7db941ca172..6ff73261de5197075420d5f766cab0772947bd58 100644 (file)
@@ -90,8 +90,6 @@ ExportProfileManager::ExportProfileManager (Session & s, std::string xml_node_na
 
 ExportProfileManager::~ExportProfileManager ()
 {
-       if (single_range_mode) { return; }
-
        XMLNode * instant_xml (new XMLNode (xml_node_name));
        serialize_profile (*instant_xml);
        session.add_instant_xml (*instant_xml, false);