mackie: still respond to route groups visibility changes
[ardour.git] / libs / ardour / ardour / session.h
index 0a2cb786ced68d9e4dd7d5f989fed4691f2f247e..adadaa26f464827a76e82a9f2ad831d0bd7533fc 100644 (file)
 #include "ardour/chan_count.h"
 #include "ardour/delivery.h"
 #include "ardour/interthread_info.h"
+#include "ardour/location.h"
+#include "ardour/monitor_processor.h"
 #include "ardour/rc_configuration.h"
 #include "ardour/session_configuration.h"
 #include "ardour/session_event.h"
-#include "ardour/location.h"
 #include "ardour/interpolation.h"
+#include "ardour/route.h"
 #include "ardour/route_graph.h"
 
 
@@ -173,6 +175,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        virtual ~Session ();
 
        static int get_info_from_path (const std::string& xmlpath, float& sample_rate, SampleFormat& data_format);
+       static std::string get_snapshot_from_instant (const std::string& session_dir);
 
        std::string path() const { return _path; }
        std::string name() const { return _name; }
@@ -180,8 +183,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        std::string raid_path () const;
        bool path_is_within_session (const std::string&);
 
-       void set_snap_name ();
-
        bool writable() const { return _writable; }
        void set_dirty ();
        void set_clean ();
@@ -218,7 +219,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        std::string new_audio_source_path_for_embedded (const std::string& existing_path);
        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);
+       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);
        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);
@@ -347,7 +349,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        /** Emitted when a property of one of our route groups changes.
         *  The parameter is the RouteGroup that has changed.
         */
-       PBD::Signal1<void, RouteGroup *> RouteGroupPropertyChanged;
+       PBD::Signal2<void, RouteGroup *, PBD::PropertyChange> RouteGroupPropertyChanged;
        /** Emitted when a route is added to one of our route groups.
         *  First parameter is the RouteGroup, second is the route.
         */
@@ -378,8 +380,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        void goto_start ();
        void use_rf_shuttle_speed ();
        void allow_auto_play (bool yn);
-       void request_transport_speed (double speed, bool as_default = false);
-       void request_transport_speed_nonzero (double, bool as_default = false);
+       void request_transport_speed (double speed, bool as_default = true);
+       void request_transport_speed_nonzero (double, bool as_default = true);
        void request_overwrite_buffer (Track *);
        void adjust_playback_buffering();
        void adjust_capture_buffering();
@@ -749,6 +751,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        PBD::Signal1<void,bool> SoloActive;
        PBD::Signal0<void> SoloChanged;
        PBD::Signal0<void> IsolatedChanged;
+       PBD::Signal0<void> MonitorChanged;
 
        PBD::Signal0<void> session_routes_reconnected;
 
@@ -757,6 +760,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        void add_monitor_section ();
        void reset_monitor_section ();
        void remove_monitor_section ();
+       bool monitor_active() const { return (_monitor_out && _monitor_out->monitor_control () && _monitor_out->monitor_control ()->monitor_active()); }
 
        boost::shared_ptr<Route> monitor_out() const { return _monitor_out; }
        boost::shared_ptr<Route> master_out() const { return _master_out; }
@@ -1009,27 +1013,26 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        SceneChanger* scene_changer() const { return _scene_changer; }
 
-       boost::shared_ptr<Port> ltc_input_port() const;
-       boost::shared_ptr<Port> ltc_output_port() const;
-
-       boost::shared_ptr<IO> ltc_input_io() { return _ltc_input; }
-       boost::shared_ptr<IO> ltc_output_io() { return _ltc_output; }
+       /* asynchronous MIDI control ports */
 
-       MIDI::Port* midi_input_port () const;
-       MIDI::Port* midi_output_port () const;
-       MIDI::Port* mmc_output_port () const;
-       MIDI::Port* mmc_input_port () const;
+       boost::shared_ptr<Port> midi_input_port () const;
+       boost::shared_ptr<Port> midi_output_port () const;
+       boost::shared_ptr<Port> mmc_output_port () const;
+       boost::shared_ptr<Port> mmc_input_port () const;
+       boost::shared_ptr<Port> scene_input_port () const;
+       boost::shared_ptr<Port> scene_output_port () const;
 
-       MIDI::Port* scene_input_port () const;
-       MIDI::Port* scene_output_port () const;
-
-       boost::shared_ptr<MidiPort> scene_in () const;
-       boost::shared_ptr<MidiPort> scene_out () const;
+       /* synchronous MIDI ports used for synchronization */
 
        boost::shared_ptr<MidiPort> midi_clock_output_port () const;
        boost::shared_ptr<MidiPort> midi_clock_input_port () const;
        boost::shared_ptr<MidiPort> mtc_output_port () const;
        boost::shared_ptr<MidiPort> mtc_input_port () const;
+       boost::shared_ptr<Port> ltc_input_port() const;
+       boost::shared_ptr<Port> ltc_output_port() const;
+
+       boost::shared_ptr<IO> ltc_input_io() { return _ltc_input; }
+       boost::shared_ptr<IO> ltc_output_io() { return _ltc_output; }
 
        MIDI::MachineControl& mmc() { return *_mmc; }
 
@@ -1104,6 +1107,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        framecnt_t              _worst_track_latency;
        bool                    _have_captured;
        bool                    _non_soloed_outs_muted;
+       bool                    _listening;
        uint32_t                _listen_cnt;
        uint32_t                _solo_isolated_cnt;
        bool                    _writable;
@@ -1237,6 +1241,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        void graph_reordered ();
 
        /** current snapshot name, without the .ardour suffix */
+       void set_snapshot_name (const std::string &);
+       void save_snapshot_name (const std::string &);
        std::string _current_snapshot_name;
 
        XMLTree*         state_tree;
@@ -1554,7 +1560,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        void route_added_to_route_group (RouteGroup *, boost::weak_ptr<Route>);
        void route_removed_from_route_group (RouteGroup *, boost::weak_ptr<Route>);
-       void route_group_property_changed (RouteGroup *);
+       void route_group_property_changed (RouteGroup *, PBD::PropertyChange);
 
        /* SOURCES */
 
@@ -1838,6 +1844,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath);
        static const uint32_t session_end_shift;
+
+       std::string _template_state_dir;
 };