Remove some unused code.
[ardour.git] / libs / ardour / session.cc
index edb8ba80cf6456719da7f391bb71701ac41d2a92..559ca640620556e2ca8c35f3d4a64a44a2c1b3e1 100644 (file)
 #include "ardour/audio_track.h"
 #include "ardour/audioengine.h"
 #include "ardour/audiofilesource.h"
-#include "ardour/audioplaylist.h"
-#include "ardour/audioregion.h"
 #include "ardour/auditioner.h"
 #include "ardour/buffer_manager.h"
 #include "ardour/buffer_set.h"
 #include "ardour/bundle.h"
 #include "ardour/butler.h"
 #include "ardour/click.h"
-#include "ardour/configuration.h"
 #include "ardour/control_protocol_manager.h"
-#include "ardour/crossfade.h"
-#include "ardour/cycle_timer.h"
 #include "ardour/data_type.h"
 #include "ardour/debug.h"
 #include "ardour/filename_extensions.h"
-#include "ardour/internal_send.h"
-#include "ardour/io_processor.h"
-#include "ardour/midi_diskstream.h"
-#include "ardour/midi_playlist.h"
-#include "ardour/midi_region.h"
+#include "ardour/graph.h"
 #include "ardour/midi_track.h"
 #include "ardour/midi_ui.h"
 #include "ardour/named_selection.h"
-#include "ardour/process_thread.h"
+#include "ardour/operations.h"
 #include "ardour/playlist.h"
 #include "ardour/plugin.h"
 #include "ardour/plugin_insert.h"
-#include "ardour/port_insert.h"
-#include "ardour/processor.h"
+#include "ardour/process_thread.h"
 #include "ardour/rc_configuration.h"
 #include "ardour/recent_sessions.h"
+#include "ardour/region.h"
 #include "ardour/region_factory.h"
-#include "ardour/return.h"
 #include "ardour/route_graph.h"
 #include "ardour/route_group.h"
 #include "ardour/send.h"
 #include "ardour/session.h"
 #include "ardour/session_directory.h"
-#include "ardour/session_directory.h"
-#include "ardour/session_metadata.h"
 #include "ardour/session_playlists.h"
-#include "ardour/slave.h"
 #include "ardour/smf_source.h"
 #include "ardour/source_factory.h"
-#include "ardour/tape_file_matcher.h"
-#include "ardour/tempo.h"
 #include "ardour/utils.h"
-#include "ardour/graph.h"
-#include "ardour/speakers.h"
-#include "ardour/operations.h"
 
 #include "midi++/port.h"
+#include "midi++/jack_midi_port.h"
 #include "midi++/mmc.h"
 #include "midi++/manager.h"
 
 #include "i18n.h"
 
+namespace ARDOUR {
+class MidiSource;
+class Processor;
+class Speakers;
+}
+
 using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
@@ -127,8 +116,6 @@ PBD::Signal3<int,Session*,std::string,DataType> Session::MissingFile;
 
 PBD::Signal1<void, framepos_t> Session::StartTimeChanged;
 PBD::Signal1<void, framepos_t> Session::EndTimeChanged;
-PBD::Signal0<void> Session::AutoBindingOn;
-PBD::Signal0<void> Session::AutoBindingOff;
 PBD::Signal2<void,std::string, std::string> Session::Exported;
 PBD::Signal1<int,boost::shared_ptr<Playlist> > Session::AskAboutPlaylistDeletion;
 PBD::Signal0<void> Session::Quit;
@@ -163,7 +150,6 @@ Session::Session (AudioEngine &eng,
        , click_data (0)
        , click_emphasis_data (0)
        , main_outs (0)
-       , _metadata (new SessionMetadata())
        , _have_rec_enabled_track (false)
        , _suspend_timecode_transmission (0)
 {
@@ -328,8 +314,6 @@ Session::destroy ()
                delete *i;
        }
 
-       Crossfade::set_buffer_size (0);
-
        /* not strictly necessary, but doing it here allows the shared_ptr debugging to work */
        playlists.reset ();
 
@@ -542,11 +526,21 @@ Session::when_engine_running ()
 
        BootMessage (_("Setup signal flow and plugins"));
 
+       /* Reset all panners */
+
+       Delivery::reset_panners ();
+
+       /* this will cause the CPM to instantiate any protocols that are in use
+        * (or mandatory), which will pass it this Session, and then call
+        * set_state() on each instantiated protocol to match stored state.
+        */
+
        ControlProtocolManager::instance().set_session (this);
 
        /* This must be done after the ControlProtocolManager set_session above,
           as it will set states for ports which the ControlProtocolManager creates.
        */
+
        MIDI::Manager::instance()->set_port_states (Config->midi_port_states ());
 
        /* And this must be done after the MIDI::Manager::set_port_states as
@@ -555,6 +549,12 @@ Session::when_engine_running ()
 
        hookup_io ();
 
+       /* Let control protocols know that we are now all connected, so they
+        * could start talking to surfaces if they want to.
+        */
+
+       ControlProtocolManager::instance().midi_connectivity_established ();
+
        if (_is_new && !no_auto_connect()) {
                Glib::Mutex::Lock lm (AudioEngine::instance()->process_lock());
                auto_connect_master_bus ();
@@ -830,11 +830,7 @@ Session::hookup_io ()
        /* Tell all IO objects to connect themselves together */
 
        IO::enable_connecting ();
-       MIDI::Port::MakeConnections ();
-
-       /* Now reset all panners */
-
-       Delivery::reset_panners ();
+       MIDI::JackMIDIPort::MakeConnections ();
 
        /* Anyone who cares about input state, wake up and do something */
 
@@ -2954,6 +2950,14 @@ Session::add_source (boost::shared_ptr<Source> source)
 
                /* yay, new source */
 
+               boost::shared_ptr<FileSource> fs = boost::dynamic_pointer_cast<FileSource> (source);
+               
+               if (fs) {
+                       if (!fs->within_session()) {
+                               ensure_search_path_includes (Glib::path_get_dirname (fs->path()), fs->type());
+                       }
+               }
+               
                set_dirty();
 
                boost::shared_ptr<AudioFileSource> afs;
@@ -3419,12 +3423,9 @@ Session::audition_playlist ()
 void
 Session::non_realtime_set_audition ()
 {
-       if (!pending_audition_region) {
-               auditioner->audition_current_playlist ();
-       } else {
-               auditioner->audition_region (pending_audition_region);
-               pending_audition_region.reset ();
-       }
+       assert (pending_audition_region);
+       auditioner->audition_region (pending_audition_region);
+       pending_audition_region.reset ();
        AuditionActive (true); /* EMIT SIGNAL */
 }
 
@@ -4475,7 +4476,7 @@ Session::ensure_search_path_includes (const string& path, DataType type)
                search_path = config.get_midi_search_path ();
                break;
        }
-       
+
        split (search_path, dirs, ':');
 
        for (vector<string>::iterator i = dirs.begin(); i != dirs.end(); ++i) {
@@ -4485,7 +4486,7 @@ Session::ensure_search_path_includes (const string& path, DataType type)
 
                   On Windows, I think we could just do if (*i == path) here.
                */
-               if (inodes_same (*i, path)) {
+               if (PBD::sys::inodes_same (*i, path)) {
                        return;
                }
        }