follow various events related to playhead priority (loop changes, parameter changes...
[ardour.git] / libs / ardour / session_state.cc
index a124f4fc12e4f389f73469e701277931e160c942..b51d7a7d694b7f1c30477c232076a09ebfc34d03 100644 (file)
@@ -271,6 +271,7 @@ Session::post_engine_init ()
                
                Config->map_parameters (ff);
                config.map_parameters (ft);
+                _butler->map_parameters ();
 
                /* Reset all panners */
                
@@ -352,9 +353,51 @@ Session::post_engine_init ()
                state_was_pending = false;
        }
 
+       /* Now, finally, we can fill the playback buffers */
+    
+       BootMessage (_("Filling playback buffers"));
+    
+       boost::shared_ptr<RouteList> rl = routes.reader();
+       for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
+               boost::shared_ptr<Track> trk = boost::dynamic_pointer_cast<Track> (*r);
+               if (trk && !trk->hidden()) {
+                       trk->seek (_transport_frame, true);
+               }
+       }
+
        return 0;
 }
 
+void
+Session::session_loaded ()
+{
+       SessionLoaded();
+       
+       _state_of_the_state = Clean;
+       
+       DirtyChanged (); /* EMIT SIGNAL */
+       
+       if (_is_new) {
+               save_state ("");
+       } else if (state_was_pending) {
+               save_state ("");
+               remove_pending_capture_state ();
+               state_was_pending = false;
+       }
+       
+       /* Now, finally, we can fill the playback buffers */
+       
+       BootMessage (_("Filling playback buffers"));
+       
+       boost::shared_ptr<RouteList> rl = routes.reader();
+       for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
+               boost::shared_ptr<Track> trk = boost::dynamic_pointer_cast<Track> (*r);
+               if (trk && !trk->hidden()) {
+                       trk->seek (_transport_frame, true);
+               }
+       }
+}
+
 string
 Session::raid_path () const
 {
@@ -507,10 +550,12 @@ Session::create (const string& session_template, BusProfile* bus_profile)
                                out << in.rdbuf();
                                 _is_new = false;
 
-                               /* Copy plugin state files from template to new session */
-                               std::string template_plugins = Glib::build_filename (session_template, X_("plugins"));
-                               copy_recurse (template_plugins, plugins_dir ());
-                               
+                                if (!ARDOUR::Profile->get_trx()) {
+                                       /* Copy plugin state files from template to new session */
+                                       std::string template_plugins = Glib::build_filename (session_template, X_("plugins"));
+                                       copy_recurse (template_plugins, plugins_dir ());
+                                }
+                                
                                return 0;
 
                        } else {
@@ -538,8 +583,9 @@ Session::create (const string& session_template, BusProfile* bus_profile)
                RouteList rl;
                 ChanCount count(DataType::AUDIO, bus_profile->master_out_channels);
 
-               if (bus_profile->master_out_channels) {
-                       boost::shared_ptr<Route> r (new Route (*this, _("Master"), Route::MasterOut, DataType::AUDIO));
+                // Waves Tracks: always create master bus for Tracks
+                if (ARDOUR::Profile->get_trx() || bus_profile->master_out_channels) {
+                       boost::shared_ptr<Route> r (new Route (*this, _("Master"), Route::MasterOut, DataType::AUDIO));
                         if (r->init ()) {
                                 return -1;
                         }
@@ -563,16 +609,20 @@ Session::create (const string& session_template, BusProfile* bus_profile)
                        add_routes (rl, false, false, false);
                }
 
-                /* this allows the user to override settings with an environment variable.
-                 */
-
-                if (no_auto_connect()) {
-                        bus_profile->input_ac = AutoConnectOption (0);
-                        bus_profile->output_ac = AutoConnectOption (0);
-                }
-
-                Config->set_input_auto_connect (bus_profile->input_ac);
-                Config->set_output_auto_connect (bus_profile->output_ac);
+               // Waves Tracks: Skip this. Always use autoconnection for Tracks
+               if (!ARDOUR::Profile->get_trx()) {
+                       
+                       /* this allows the user to override settings with an environment variable.
+                        */
+                       
+                       if (no_auto_connect()) {
+                               bus_profile->input_ac = AutoConnectOption (0);
+                               bus_profile->output_ac = AutoConnectOption (0);
+                       }
+                       
+                       Config->set_input_auto_connect (bus_profile->input_ac);
+                       Config->set_output_auto_connect (bus_profile->output_ac);
+               }
         }
 
        if (Config->get_use_monitor_bus() && bus_profile) {
@@ -1064,6 +1114,7 @@ Session::state (bool full_state)
                XMLNode& locations_state = loc.get_state();
                
                if (ARDOUR::Profile->get_trx() && _locations) {
+                       // For tracks we need stored the Auto Loop Range and all MIDI markers.
                        for (Locations::LocationList::const_iterator i = _locations->list ().begin (); i != _locations->list ().end (); ++i) {
                                if ((*i)->is_mark () || (*i)->is_auto_loop ()) {
                                        locations_state.add_child_nocopy ((*i)->get_state ());
@@ -1871,17 +1922,15 @@ Session::get_sources_as_xml ()
 void
 Session::reset_write_sources (bool mark_write_complete, bool force)
 {
-    boost::shared_ptr<RouteList> rl = routes.reader();
-    for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
-        boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
-        if (tr) {
-                       
-                       // block state saving
+       boost::shared_ptr<RouteList> rl = routes.reader();
+       for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+               boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+               if (tr) {
                        _state_of_the_state = StateOfTheState (_state_of_the_state|InCleanup);
                        tr->reset_write_sources(mark_write_complete, force);
                        _state_of_the_state = StateOfTheState (_state_of_the_state & ~InCleanup);
-        }
-    }
+               }
+       }
 }
 
 int
@@ -3596,6 +3645,8 @@ Session::config_changed (std::string p, bool ours)
                reconnect_ltc_output ();
        } else if (p == "timecode-generator-offset") {
                ltc_tx_parse_offset();
+       } else if (p == "auto-return-target-list") {
+               follow_playhead_priority ();
        }
 
        set_dirty ();