use identical logic for gain/trim controls as others when it comes to group/select stuff

This commit is contained in:
Paul Davis 2023-07-31 18:31:03 -06:00
parent a5477feb27
commit 200194b134
4 changed files with 21 additions and 40 deletions

View File

@ -399,8 +399,6 @@ public:
void gui_idle_handler ();
bool maybe_use_select_as_group (ARDOUR::Route const&) const;
protected:
friend class PublicEditor;

View File

@ -212,28 +212,3 @@ ARDOUR_UI::record_state_changed ()
}
}
bool
ARDOUR_UI::maybe_use_select_as_group (Route const & route) const
{
if (!UIConfiguration::instance().get_allow_selection_as_group()) {
return false;
}
if (!route.is_selected()) {
/* Not selected, can't possibly use selection */
return false;
}
if (editor->get_selection().tracks.size() < 2) {
/* only this track selected */
return false;
}
if (route.route_group() && route.route_group()->is_active() && !route.route_group()->is_select()) {
/* active route group that does not share selection status */
return false;
}
return true;
}

View File

@ -37,6 +37,7 @@
#include "ardour/control_group.h"
#include "ardour/logmeter.h"
#include "ardour/route_group.h"
#include "ardour/selection.h"
#include "ardour/session_route.h"
#include "ardour/dB.h"
#include "ardour/utils.h"
@ -756,10 +757,14 @@ GainMeterBase::meter_point_clicked (MeterPoint mp)
void
GainMeterBase::amp_start_touch (int state)
{
if (_route && ARDOUR_UI::instance()->maybe_use_select_as_group (*_route)) {
if (_route) {
StripableList sl;
_session->selection ().get_stripables_for_op (sl, _route, &RouteGroup::is_gain);
_touch_control_group.reset (new GainControlGroup ());
_touch_control_group->set_mode (ControlGroup::Relative);
_touch_control_group->fill_from_selection_or_group (_route, _control->session().selection(), _control->parameter(), &RouteGroup::is_gain);
_touch_control_group->fill_from_stripable_list (sl, _control->parameter());
}
_control->start_touch (timepos_t (_control->session().transport_sample()));

View File

@ -59,6 +59,7 @@
#include "ardour/route.h"
#include "ardour/route_group.h"
#include "ardour/send.h"
#include "ardour/selection.h"
#include "ardour/session.h"
#include "ardour/types.h"
#include "ardour/user_bundle.h"
@ -505,18 +506,20 @@ MixerStrip::trim_start_touch (int)
{
assert (_route && _session);
if (route()->trim() && route()->trim()->active() && route()->n_inputs().n_audio() > 0) {
std::shared_ptr<AutomationControl> control (route()->trim()->gain_control());
if (ARDOUR_UI::instance()->maybe_use_select_as_group (*_route)) {
_touch_control_group.reset (new GainControlGroup (TrimAutomation));
_touch_control_group->set_mode (ControlGroup::Relative);
_touch_control_group->fill_from_selection_or_group (_route, control->session().selection(), control->parameter(), &RouteGroup::is_gain);
}
control->start_touch (timepos_t (_session->transport_sample()));
if (!route()->trim() || !route()->trim()->active() || route()->n_inputs().n_audio() <= 0) {
return;
}
std::shared_ptr<AutomationControl> control (route()->trim()->gain_control());
StripableList sl;
_session->selection ().get_stripables_for_op (sl, _route, &RouteGroup::is_gain);
_touch_control_group.reset (new GainControlGroup (TrimAutomation));
_touch_control_group->set_mode (ControlGroup::Relative);
_touch_control_group->fill_from_stripable_list (sl, control->parameter());
control->start_touch (timepos_t (_session->transport_sample()));
}
void