merge with master.
[ardour.git] / libs / ardour / ardour / session.h
index 0dd986226b2c2766f72bab5e2f5a05ce9e58e4f6..03eccd40a32dd45ea29e3758fa94894d339090c6 100644 (file)
@@ -196,10 +196,10 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        std::string peak_path (std::string) const;
 
        std::string peak_path_from_audio_path (std::string) const;
-       std::string new_audio_source_name (const std::string&, uint32_t nchans, uint32_t chan, bool destructive);
-       std::string new_midi_source_name (const std::string&);
-       std::string new_source_path_from_name (DataType type, const std::string&);
+       std::string new_audio_source_path (const std::string&, uint32_t nchans, uint32_t chan, bool destructive, bool take_required);
+       std::string new_midi_source_path (const std::string&);
         RouteList new_route_from_template (uint32_t how_many, const std::string& template_path, const std::string& name);
+       std::vector<std::string> get_paths_for_new_sources (bool allow_replacing, const std::string& import_file_path, uint32_t channels);
 
        void process (pframes_t nframes);
 
@@ -260,6 +260,10 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        bool route_name_unique (std::string) const;
        bool route_name_internal (std::string) const;
 
+       uint32_t track_number_decimals () const {
+               return _track_number_decimals;
+       }
+
        bool get_record_enabled() const {
                return (record_status () >= Enabled);
        }
@@ -397,6 +401,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        int rename (const std::string&);
        bool get_nsm_state () const { return _under_nsm_control; }
        void set_nsm_state (bool state) { _under_nsm_control = state; }
+       bool save_default_options ();
 
        PBD::Signal1<void,std::string> StateSaved;
        PBD::Signal0<void> StateReady;
@@ -425,6 +430,23 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        StateOfTheState state_of_the_state() const { return _state_of_the_state; }
 
+       class StateProtector {
+               public:
+                       StateProtector (Session* s) : _session (s) {
+                               g_atomic_int_inc (&s->_suspend_save);
+                       }
+                       ~StateProtector () {
+                               if (g_atomic_int_dec_and_test (&_session->_suspend_save)) {
+                                       while (_session->_save_queued) {
+                                               _session->_save_queued = false;
+                                               _session->save_state ("");
+                                       }
+                               }
+                       }
+               private:
+                       Session * _session;
+       };
+
        void add_route_group (RouteGroup *);
        void remove_route_group (RouteGroup&);
        void reorder_route_groups (std::list<RouteGroup*>);
@@ -527,8 +549,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        boost::shared_ptr<Region> find_whole_file_parent (boost::shared_ptr<Region const>) const;
 
-       std::string path_from_region_name (DataType type, std::string name, std::string identifier);
-
        boost::shared_ptr<Region>      XMLRegionFactory (const XMLNode&, bool full);
        boost::shared_ptr<AudioRegion> XMLAudioRegionFactory (const XMLNode&, bool full);
        boost::shared_ptr<MidiRegion>  XMLMidiRegionFactory (const XMLNode&, bool full);
@@ -1095,6 +1115,10 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        bool             state_was_pending;
        StateOfTheState _state_of_the_state;
 
+       friend class    StateProtector;
+       gint            _suspend_save; /* atomic */
+       volatile bool   _save_queued;
+
        void     auto_save();
        int      load_options (const XMLNode&);
        int      load_state (std::string snapshot_name);
@@ -1342,6 +1366,11 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
                                 ChanCount input_start = ChanCount (), ChanCount output_start = ChanCount ());
        void midi_output_change_handler (IOChange change, void* /*src*/, boost::weak_ptr<Route> midi_track);
 
+       /* track numbering */
+
+       void reassign_track_numbers ();
+       uint32_t _track_number_decimals;
+
        /* mixer stuff */
 
        bool solo_update_disabled;
@@ -1454,7 +1483,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        bool no_questions_about_missing_files;
 
-       std::string get_best_session_directory_for_new_source ();
+       std::string get_best_session_directory_for_new_audio ();
 
        mutable gint _playback_load;
        mutable gint _capture_load;
@@ -1639,6 +1668,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath);
 };
 
+
 } // namespace ARDOUR
 
 #endif /* __ardour_session_h__ */