add group disposition argument to Route::set_gain() and use it in various UIs
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Jan 2016 15:52:15 +0000 (10:52 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Jan 2016 17:11:09 +0000 (12:11 -0500)
Executive decisions were necessary in a couple of places about the correct group disposition
behaviour, notably faderport and OSC surfaces

gtk2_ardour/gain_meter.cc
gtk2_ardour/mixer_actor.cc
gtk2_ardour/route_ui.cc
libs/ardour/ardour/route.h
libs/ardour/audio_track.cc
libs/ardour/route.cc
libs/ardour/session.cc
libs/surfaces/control_protocol/control_protocol.cc
libs/surfaces/faderport/faderport.cc
libs/surfaces/osc/osc.cc

index 7fa9bf88de6a16bac9cc2e5b98a8f58aecbb3745..5a2047cf7322c2d7e0b6bf6465edaab018e9b79b 100644 (file)
@@ -532,7 +532,7 @@ GainMeterBase::gain_adjusted ()
 
        if (!ignore_toggle) {
                if (_route && _route->amp() == _amp) {
-                       _route->set_gain (value, this);
+                       _route->set_gain (value, Controllable::UseGroup);
                } else {
                        _amp->gain_control()->set_value (value, Controllable::NoGroup);
                }
index ffd68ff6c4e8bdddaf5120534e4bd37d0c8f5e32..87a4d014e68a73f372e8e8e8309ceb79117ce8bb 100644 (file)
@@ -176,7 +176,7 @@ printf("setting gain to unity (?)");
        BOOST_FOREACH(RouteUI* r, _route_targets) {
                boost::shared_ptr<Route> rp = r->route();
                if (rp) {
-                       rp->set_gain (1.0, this);
+                       rp->set_gain (1.0, Controllable::NoGroup);
                }
        }
 }
index a3fa56945d9e8d5d5b7c82c88ecacf132c4c8525..059f20a885b05d0c0bdb7e269c9b33f61ffdcc5a 100644 (file)
@@ -1949,25 +1949,25 @@ RouteUI::parameter_changed (string const & p)
 void
 RouteUI::step_gain_up ()
 {
-       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.1), this);
+       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.1), Controllable::UseGroup);
 }
 
 void
 RouteUI::page_gain_up ()
 {
-       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.5), this);
+       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.5), Controllable::UseGroup);
 }
 
 void
 RouteUI::step_gain_down ()
 {
-       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.1), this);
+       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.1), Controllable::UseGroup);
 }
 
 void
 RouteUI::page_gain_down ()
 {
-       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), this);
+       _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), Controllable::UseGroup);
 }
 
 void
index a57610ab98597f789641f8602a8ff376911f8306..e3eec7107843cf0a5941c223e9b9e3c70795c656 100644 (file)
@@ -142,8 +142,8 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
 
        void shift (framepos_t, framecnt_t);
 
-       void set_gain (gain_t val, void *src);
-       void inc_gain (gain_t delta, void *src);
+       void set_gain (gain_t val, PBD::Controllable::GroupControlDisposition);
+       void inc_gain (gain_t delta);
 
        void set_trim (gain_t val, void *src);
 
index f5d5207cc65a46eaf6321a1466abbaabb222e067..47746ffe312d0a1e018e9a5e46c65899d101a5dd 100644 (file)
@@ -629,7 +629,7 @@ AudioTrack::freeze_me (InterThreadInfo& itt)
 
        /* reset stuff that has already been accounted for in the freeze process */
 
-       set_gain (GAIN_COEFF_UNITY, this);
+       set_gain (GAIN_COEFF_UNITY, Controllable::NoGroup);
        _amp->gain_control()->set_automation_state (Off);
        /* XXX need to use _main_outs _panner->set_automation_state (Off); */
 
index a23af603de87eaab2da15579451a0c790820fec4..c07612f125cce183404030c299dd1f89ecbeb2d9 100644 (file)
@@ -387,7 +387,7 @@ Route::ensure_track_or_route_name(string name, Session &session)
 }
 
 void
-Route::inc_gain (gain_t factor, void *src)
+Route::inc_gain (gain_t factor)
 {
        /* To be used ONLY when doing group-relative gain adjustment, from
         * ::set_gain()
@@ -404,9 +404,9 @@ Route::inc_gain (gain_t factor, void *src)
 }
 
 void
-Route::set_gain (gain_t val, void *src)
+Route::set_gain (gain_t val, Controllable::GroupControlDisposition group_override)
 {
-       if (src != 0 && _route_group && src != _route_group && _route_group->is_active() && _route_group->is_gain()) {
+       if (_route_group && (group_override != Controllable::NoGroup) && _route_group->is_active() && _route_group->is_gain()) {
 
                if (_route_group->is_relative()) {
 
@@ -441,11 +441,11 @@ Route::set_gain (gain_t val, void *src)
                                }
                        }
 
-                       _route_group->foreach_route (boost::bind (&Route::inc_gain, _1, factor, _route_group));
+                       _route_group->foreach_route (boost::bind (&Route::inc_gain, _1, factor));
 
                } else {
 
-                       _route_group->foreach_route (boost::bind (&Route::set_gain, _1, val, _route_group));
+                       _route_group->foreach_route (boost::bind (&Route::set_gain, _1, val, Controllable::NoGroup));
                }
 
                return;
@@ -3894,14 +3894,14 @@ Route::set_latency_compensation (framecnt_t longest_session_latency)
 }
 
 void
-Route::set_control (AutomationType type, double val, PBD::Controllable::GroupControlDisposition /*group_override*/)
+Route::set_control (AutomationType type, double val, PBD::Controllable::GroupControlDisposition group_override)
 {
        boost::shared_ptr<RouteList> rl;
 
        switch (type) {
        case GainAutomation:
                /* route must mediate group control */
-               set_gain (val, this); /* any "src" argument will do other than our route group */
+               set_gain (val, group_override); 
                return;
                break;
 
index c20a7709ce88b636de17335cf9490962abf08150..3da7f6c071f302e085854fb079c8e54de21a1415 100644 (file)
@@ -2880,7 +2880,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
                                //  0 for Stereo Out mode
                                //  0 Multi Out mode
                                if (Config->get_output_auto_connect() & AutoConnectMaster) {
-                                       track->set_gain (dB_to_coefficient (0), 0);
+                                       track->set_gain (dB_to_coefficient (0), Controllable::NoGroup);
                                }
                        }
 
index 52aaa51e6ec13158f0be7ee14ae7628019974aee..1ce51bcd7552f7fdb1985e121f376e0762d633c3 100644 (file)
@@ -248,7 +248,7 @@ ControlProtocol::route_set_gain (uint32_t table_index, float gain)
        boost::shared_ptr<Route> r = route_table[table_index];
 
        if (r != 0) {
-               r->set_gain (gain, this);
+               r->set_gain (gain, Controllable::UseGroup);
        }
 }
 
index 9481445af24bc2f542b992f75050770e87d6f269..50250a5f13ca2e30f7ea0a23ffae6ca7bc3a4bb5 100644 (file)
@@ -499,7 +499,11 @@ FaderPort::fader_handler (MIDI::Parser &, MIDI::EventTwoBytes* tb)
                        if (gain) {
                                int ival = (fader_msb << 7) | fader_lsb;
                                float val = gain->interface_to_internal (ival/16384.0);
-                               _current_route->set_gain (val, this);
+                               /* even though the faderport only controls a
+                                  single route at a time, allow the fader to
+                                  modify the group, if appropriate.
+                               */
+                               _current_route->set_gain (val, Controllable::UseGroup);
                        }
                }
        }
index 31fd146a5f9fb04ccb3102a361c151c209d951ed..328acc7222d6baa01a68ac2e657b280e4d314ec7 100644 (file)
@@ -1013,7 +1013,7 @@ OSC::route_set_gain_abs (int rid, float level)
        boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
 
        if (r) {
-               r->set_gain (level, this);
+               r->set_gain (level, PBD::Controllable::NoGroup);
        }
 
        return 0;