add slave,transport and event debugging traces
[ardour.git] / libs / ardour / ardour / route.h
index ac3c6f89f3fff4a410034ff8e25927b64acfe13a..6c6acb89bd8404e0cb914bece60902a6ff046f00 100644 (file)
@@ -66,9 +66,8 @@ class Route : public SessionObject, public AutomatableControls
                ControlOut = 0x4
        };
 
-       Route (Session&, std::string name, Flag flags = Flag(0),
-              DataType default_type = DataType::AUDIO);
-       Route (Session&, const XMLNode&, int, DataType default_type = DataType::AUDIO);
+       Route (Session&, std::string name, Flag flags = Flag(0), DataType default_type = DataType::AUDIO);
+       Route (Session&, const XMLNode&, DataType default_type = DataType::AUDIO);
        virtual ~Route();
 
        boost::shared_ptr<IO> input() const { return _input; }
@@ -121,19 +120,26 @@ class Route : public SessionObject, public AutomatableControls
        void set_gain (gain_t val, void *src);
        void inc_gain (gain_t delta, void *src);
 
+       void set_mute_points (MuteMaster::MutePoint);
+       MuteMaster::MutePoint mute_points() const { return _mute_points; }
        void set_mute (bool yn, void* src);
        bool muted () const;
 
-
        /* controls use set_solo() to modify this route's solo state
         */
 
        void set_solo (bool yn, void *src);
-       bool soloed () const { return (bool) _solo_level; }
+       bool soloed () const {return self_soloed () || soloed_by_others (); }
 
+       bool soloed_by_others () const { return !_solo_isolated && _soloed_by_others; }
+       bool self_soloed () const { return _self_solo; }
+       
        void set_solo_isolated (bool yn, void *src);
        bool solo_isolated() const;
 
+       void set_solo_safe (bool yn, void *src);
+       bool solo_safe() const;
+
        void set_listen (bool yn, void* src);
        bool listening () const;
 
@@ -233,10 +239,7 @@ class Route : public SessionObject, public AutomatableControls
        sigc::signal<void,void*> solo_isolated_changed;
        sigc::signal<void,void*> comment_changed;
        sigc::signal<void,void*> mute_changed;
-       sigc::signal<void,void*> pre_fader_changed;
-       sigc::signal<void,void*> post_fader_changed;
-       sigc::signal<void,void*> control_outs_changed;
-       sigc::signal<void,void*> main_outs_changed;
+       sigc::signal<void>       mute_points_changed;
        sigc::signal<void>       processors_changed;
        sigc::signal<void,void*> record_enable_changed;
        sigc::signal<void,void*> route_group_changed;
@@ -251,7 +254,7 @@ class Route : public SessionObject, public AutomatableControls
        /* stateful */
 
        XMLNode& get_state();
-       int set_state (const XMLNode&, int version = 3000);
+       int set_state (const XMLNode&, int version);
        virtual XMLNode& get_template();
 
        XMLNode& get_processor_state ();
@@ -264,8 +267,8 @@ class Route : public SessionObject, public AutomatableControls
        int listen_via (boost::shared_ptr<Route>, Placement p, bool active, bool aux);
        void drop_listen (boost::shared_ptr<Route>);
 
-       bool feeds (boost::shared_ptr<Route>);
-       std::set<boost::shared_ptr<Route> > fed_by;
+       bool feeds (boost::shared_ptr<Route>, bool* via_send_only = 0);
+       std::set<boost::weak_ptr<Route> > fed_by;
 
        /* Controls (not all directly owned by the Route */
 
@@ -313,8 +316,7 @@ class Route : public SessionObject, public AutomatableControls
        friend class Session;
 
        void catch_up_on_solo_mute_override ();
-       void mod_solo_level (int32_t);
-       uint32_t solo_level () const { return _solo_level; }
+       void mod_solo_by_others (int32_t);
        void set_block_size (nframes_t nframes);
        bool has_external_redirects() const;
        void curve_reallocate ();
@@ -350,7 +352,8 @@ class Route : public SessionObject, public AutomatableControls
        int            _pending_declick;
        MeterPoint     _meter_point;
        uint32_t       _phase_invert;
-       uint32_t       _solo_level;
+       bool           _self_solo;
+       uint32_t       _soloed_by_others;
        bool           _solo_isolated;
 
        bool           _denormal_protection;
@@ -361,6 +364,7 @@ class Route : public SessionObject, public AutomatableControls
 
        boost::shared_ptr<SoloControllable> _solo_control;
        boost::shared_ptr<MuteMaster> _mute_master;
+       MuteMaster::MutePoint _mute_points;
 
        RouteGroup*    _route_group;
        std::string    _comment;
@@ -413,6 +417,9 @@ class Route : public SessionObject, public AutomatableControls
        bool add_processor_from_xml_2X (const XMLNode&, int, ProcessorList::iterator iter);     
 
        void placement_range (Placement p, ProcessorList::iterator& start, ProcessorList::iterator& end);
+
+       void set_self_solo (bool yn);
+       void set_delivery_solo ();
 };
 
 } // namespace ARDOUR