add slave,transport and event debugging traces
[ardour.git] / libs / ardour / ardour / route.h
index 1a60e2f8cd7a093215d72a8a1057a24d450626f9..6c6acb89bd8404e0cb914bece60902a6ff046f00 100644 (file)
@@ -129,11 +129,17 @@ class Route : public SessionObject, public AutomatableControls
         */
 
        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;
 
@@ -262,7 +268,7 @@ class Route : public SessionObject, public AutomatableControls
        void drop_listen (boost::shared_ptr<Route>);
 
        bool feeds (boost::shared_ptr<Route>, bool* via_send_only = 0);
-       std::set<boost::shared_ptr<Route> > fed_by;
+       std::set<boost::weak_ptr<Route> > fed_by;
 
        /* Controls (not all directly owned by the Route */
 
@@ -310,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 ();
@@ -347,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;
@@ -411,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