initial support for archiving sessions
[ardour.git] / libs / ardour / ardour / session.h
index a1e094a7a443bccd47674a5b220448869c91d8ca..93e3703665b11f22515d5c217124344eff8eeb0d 100644 (file)
@@ -134,6 +134,7 @@ class PluginInfo;
 class Port;
 class PortInsert;
 class ProcessThread;
+class Progress;
 class Processor;
 class Region;
 class Return;
@@ -169,6 +170,16 @@ private:
 /** Ardour Session */
 class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionList, public SessionEventManager
 {
+  private:
+       enum SubState {
+               PendingDeclickIn      = 0x1,  ///< pending de-click fade-in for start
+               PendingDeclickOut     = 0x2,  ///< pending de-click fade-out for stop
+               StopPendingCapture    = 0x4,
+               PendingLoopDeclickIn  = 0x8,  ///< pending de-click fade-in at the start of a loop
+               PendingLoopDeclickOut = 0x10, ///< pending de-click fade-out at the end of a loop
+               PendingLocate         = 0x20,
+       };
+
   public:
        enum RecordState {
                Disabled = 0,
@@ -245,8 +256,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
         * @param pd Playlist disposition
         * @return list of newly created routes
         */
-       RouteList new_route_from_template (uint32_t how_many, const std::string& template_path, const std::string& name, PlaylistDisposition pd = NewPlaylist);
-       RouteList new_route_from_template (uint32_t how_many, XMLNode&, const std::string& name, PlaylistDisposition pd = NewPlaylist);
+       RouteList new_route_from_template (uint32_t how_many, PresentationInfo::order_t insert_at, const std::string& template_path, const std::string& name, PlaylistDisposition pd = NewPlaylist);
+       RouteList new_route_from_template (uint32_t how_many, PresentationInfo::order_t insert_at, XMLNode&, const std::string& name, PlaylistDisposition pd = NewPlaylist);
        std::vector<std::string> get_paths_for_new_sources (bool allow_replacing, const std::string& import_file_path, uint32_t channels);
 
        int bring_all_sources_into_session (boost::function<void(uint32_t,uint32_t,std::string)> callback);
@@ -426,6 +437,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        void request_input_change_handling ();
 
        bool locate_pending() const { return static_cast<bool>(post_transport_work()&PostTransportLocate); }
+       bool declick_out_pending() const { return static_cast<bool>(transport_sub_state&(PendingDeclickOut)); }
        bool transport_locked () const;
 
        int wipe ();
@@ -505,6 +517,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
         * @return zero on success
         */
        int save_state (std::string snapshot_name, bool pending = false, bool switch_to_snapshot = false, bool template_only = false);
+
+       int archive_session (const std::string&, const std::string&, Progress* p = 0);
+
        int restore_state (std::string snapshot_name);
        int save_template (std::string template_name, bool replace_existing = false);
        int save_history (std::string snapshot_name = "");
@@ -874,13 +889,11 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        /** Undo some transactions.
         * @param n Number of transactions to undo.
         */
-       void undo (uint32_t n) {
-               _history.undo (n);
-       }
-
-       void redo (uint32_t n) {
-               _history.redo (n);
-       }
+       void undo (uint32_t n);
+       /** Redo some transactions.
+        * @param n Number of transactions to undo.
+        */
+       void redo (uint32_t n);
 
        UndoHistory& history() { return _history; }
 
@@ -1130,6 +1143,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        VCAManager& vca_manager() { return *_vca_manager; }
 
+       bool midi_regions_use_bbt_beats () { return _midi_regions_use_bbt_beats; }
+
   protected:
        friend class AudioEngine;
        void set_block_size (pframes_t nframes);
@@ -1151,15 +1166,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        static void init_name_id_counter (guint n);
        static unsigned int name_id_counter ();
 
-       enum SubState {
-               PendingDeclickIn      = 0x1,  ///< pending de-click fade-in for start
-               PendingDeclickOut     = 0x2,  ///< pending de-click fade-out for stop
-               StopPendingCapture    = 0x4,
-               PendingLoopDeclickIn  = 0x8,  ///< pending de-click fade-in at the start of a loop
-               PendingLoopDeclickOut = 0x10, ///< pending de-click fade-out at the end of a loop
-               PendingLocate         = 0x20,
-       };
-
        /* stuff used in process() should be close together to
           maximise cache hits
        */
@@ -2018,6 +2024,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        boost::shared_ptr<Route> get_midi_nth_route_by_id (PresentationInfo::order_t n) const;
 
        std::string created_with;
+
+       bool _midi_regions_use_bbt_beats;
 };