(Source List) Region List rewrite (libardour part)
[ardour.git] / libs / ardour / ardour / session.h
index d744cd1d0e4a64fd42009869fb06e01808a0be26..dac08af29bc7e8272368063a9c299c7c7952d53c 100644 (file)
@@ -1079,7 +1079,6 @@ public:
        boost::shared_ptr<AutomationControl> automation_control_by_id (const PBD::ID&);
 
        void add_controllable (boost::shared_ptr<PBD::Controllable>);
-       void remove_controllable (PBD::Controllable*);
 
        boost::shared_ptr<PBD::Controllable> solo_cut_control() const;
 
@@ -1117,7 +1116,7 @@ public:
                PostTransportAdjustCaptureBuffering   = 0x2000
        };
 
-       boost::shared_ptr<SessionPlaylists> playlists;
+       boost::shared_ptr<SessionPlaylists> playlists () const { return _playlists; }
 
        void send_mmc_locate (samplepos_t);
        void queue_full_time_code () { _send_timecode_update = true; }
@@ -1227,6 +1226,8 @@ private:
        static void init_name_id_counter (guint n);
        static unsigned int name_id_counter ();
 
+       boost::shared_ptr<SessionPlaylists> _playlists;
+
        /* stuff used in process() should be close together to
           maximise cache hits
        */
@@ -1239,7 +1240,7 @@ private:
        process_function_type    last_process_function;
        bool                    _bounce_processing_active;
        bool                     waiting_for_sync_offset;
-       samplecnt_t              _base_sample_rate;     // sample-rate of the session at creation time, "native" SR
+       samplecnt_t             _base_sample_rate;     // sample-rate of the session at creation time, "native" SR
        samplecnt_t             _nominal_sample_rate;  // overridden by audioengine setting
        samplecnt_t             _current_sample_rate;  // this includes video pullup offset
        int                      transport_sub_state;
@@ -1364,7 +1365,7 @@ private:
        pframes_t               _pframes_since_last_mtc;
        bool                     play_loop;
        bool                     loop_changing;
-       samplepos_t               last_loopend;
+       samplepos_t              last_loopend;
 
        boost::scoped_ptr<SessionDirectory> _session_dir;
 
@@ -1617,13 +1618,13 @@ private:
 
        double            ltc_speed;
        int32_t           ltc_enc_byte;
-       samplepos_t        ltc_enc_pos;
+       samplepos_t       ltc_enc_pos;
        double            ltc_enc_cnt;
-       samplepos_t        ltc_enc_off;
+       samplepos_t       ltc_enc_off;
        bool              restarting;
-       samplepos_t        ltc_prev_cycle;
+       samplepos_t       ltc_prev_cycle;
 
-       samplepos_t        ltc_timecode_offset;
+       samplepos_t       ltc_timecode_offset;
        bool              ltc_timecode_negative_offset;
 
        LatencyRange      ltc_out_latency;
@@ -1753,8 +1754,22 @@ private:
        mutable Glib::Threads::Mutex source_lock;
 
 public:
+
+       /* Emited when a new source is added to the session */
+       PBD::Signal1< void, boost::shared_ptr<Source> > SourceAdded;
+       PBD::Signal1< void, boost::shared_ptr<Source> > SourceRemoved;
+
        typedef std::map<PBD::ID,boost::shared_ptr<Source> > SourceMap;
 
+       void foreach_source (boost::function<void( boost::shared_ptr<Source> )> f) {
+               Glib::Threads::Mutex::Lock ls (source_lock);
+               for (SourceMap::iterator i = sources.begin(); i != sources.end(); ++i) {
+                       f ( (*i).second );
+               }
+       }
+       
+       bool playlist_is_active( boost::shared_ptr<Playlist>);
+       
 private:
        void reset_write_sources (bool mark_write_complete, bool force = false);
        SourceMap sources;
@@ -1875,32 +1890,32 @@ private:
        XMLNode& get_template ();
 
        /* click track */
-       typedef std::list<Click*> Clicks;
-       Clicks                  clicks;
-       bool                   _clicking;
-       bool                   _click_rec_only;
-       boost::shared_ptr<IO>  _click_io;
-       boost::shared_ptr<Amp> _click_gain;
-       Sample*                 click_data;
-       Sample*                 click_emphasis_data;
-       samplecnt_t              click_length;
-       samplecnt_t              click_emphasis_length;
-       mutable Glib::Threads::RWLock    click_lock;
+       typedef std::list<Click*>     Clicks;
+       Clicks                        clicks;
+       bool                         _clicking;
+       bool                         _click_rec_only;
+       boost::shared_ptr<IO>        _click_io;
+       boost::shared_ptr<Amp>       _click_gain;
+       Sample*                       click_data;
+       Sample*                       click_emphasis_data;
+       samplecnt_t                   click_length;
+       samplecnt_t                   click_emphasis_length;
+       mutable Glib::Threads::RWLock click_lock;
 
        static const Sample     default_click[];
        static const samplecnt_t default_click_length;
        static const Sample     default_click_emphasis[];
        static const samplecnt_t default_click_emphasis_length;
 
-       Click *get_click();
+       Clickget_click();
        samplepos_t _clicks_cleared;
-       void   setup_click_sounds (int which);
-       void   setup_click_sounds (Sample**, Sample const *, samplecnt_t*, samplecnt_t, std::string const &);
-       void   clear_clicks ();
-       void   click (samplepos_t start, samplecnt_t nframes);
-       void   run_click (samplepos_t start, samplecnt_t nframes);
-       void   add_click (samplepos_t pos, bool emphasis);
        samplecnt_t _count_in_samples;
+       void setup_click_sounds (int which);
+       void setup_click_sounds (Sample**, Sample const *, samplecnt_t*, samplecnt_t, std::string const &);
+       void clear_clicks ();
+       void click (samplepos_t start, samplecnt_t nframes);
+       void run_click (samplepos_t start, samplecnt_t nframes);
+       void add_click (samplepos_t pos, bool emphasis);
 
        /* range playback */