clean up mess in Route/Track controllables caused by not understanding the significan...
[ardour.git] / libs / ardour / ardour / route.h
index 44069462d1e7d4dcf9fdd2a40371bbda94bae6aa..84d78fcdd3d51d94410485b2c3168db7fe050fb1 100644 (file)
@@ -391,14 +391,6 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
                                        AutomationType atype,
                                        boost::shared_ptr<AutomationList> alist,
                                        boost::shared_ptr<Route> route);
-
-               void set_value (double val, PBD::Controllable::GroupControlDisposition group_override) {
-                       boost::shared_ptr<Route> r = _route.lock();
-                       if (r) {
-                               r->set_control ((AutomationType) parameter().type(), val, group_override);
-                       }
-               }
-
        protected:
                friend class Route;
 
@@ -418,6 +410,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
                void set_value (double val, PBD::Controllable::GroupControlDisposition group_override) {
                        boost::shared_ptr<Route> r = _route.lock();
                        if (r) {
+                               /* Route must mediate group control */
                                r->set_control ((AutomationType) parameter().type(), val, group_override);
                        }
                }
@@ -470,6 +463,26 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
                void _set_value (double, PBD::Controllable::GroupControlDisposition group_override);
        };
 
+       class LIBARDOUR_API SoloIsolateControllable : public RouteAutomationControl {
+       public:
+               SoloIsolateControllable (std::string name, boost::shared_ptr<Route>);
+               void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
+               /* currently no automation, so no need for set_value_unchecked() */
+               double get_value () const;
+       private:
+               void _set_value (double, PBD::Controllable::GroupControlDisposition group_override);
+       };
+
+       class LIBARDOUR_API SoloSafeControllable : public RouteAutomationControl {
+       public:
+               SoloSafeControllable (std::string name, boost::shared_ptr<Route>);
+               void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
+               /* currently no automation, so no need for set_value_unchecked() */
+               double get_value () const;
+       private:
+               void _set_value (double, PBD::Controllable::GroupControlDisposition group_override);
+       };
+
        void set_control (AutomationType, double val, PBD::Controllable::GroupControlDisposition group_override);
 
        boost::shared_ptr<SoloControllable> solo_control() const {
@@ -488,6 +501,21 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
                return _phase_control;
        }
 
+       boost::shared_ptr<SoloIsolateControllable> solo_isolate_control() const {
+               return _solo_isolate_control;
+       }
+
+       boost::shared_ptr<SoloSafeControllable> solo_safe_control() const {
+               return _solo_safe_control;
+       }
+
+       boost::shared_ptr<AutomationControl> monitoring_control() const {
+               /* tracks override this to provide actual monitoring control;
+                  busses have no possible choices except input monitoring.
+               */
+               return boost::shared_ptr<AutomationControl> ();
+       }
+
        /* Route doesn't own these items, but sub-objects that it does own have them
           and to make UI code a bit simpler, we provide direct access to them
           here.
@@ -693,6 +721,8 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
        boost::shared_ptr<MuteControllable> _mute_control;
        boost::shared_ptr<MuteMaster> _mute_master;
        boost::shared_ptr<PhaseControllable> _phase_control;
+       boost::shared_ptr<SoloIsolateControllable> _solo_isolate_control;
+       boost::shared_ptr<SoloSafeControllable> _solo_safe_control;
 
        virtual void act_on_mute () {}