adjust GainMeter* API and design to handle stripables, not just routes for selection/group behavior
This commit is contained in:
parent
3c44c326c2
commit
1d31ace29d
|
@ -227,7 +227,7 @@ GainMeterBase::~GainMeterBase ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GainMeterBase::set_controls (std::shared_ptr<Route> r,
|
GainMeterBase::set_controls (std::shared_ptr<Stripable> s,
|
||||||
std::shared_ptr<PeakMeter> pm,
|
std::shared_ptr<PeakMeter> pm,
|
||||||
std::shared_ptr<Amp> amp,
|
std::shared_ptr<Amp> amp,
|
||||||
std::shared_ptr<GainControl> control)
|
std::shared_ptr<GainControl> control)
|
||||||
|
@ -242,14 +242,14 @@ GainMeterBase::set_controls (std::shared_ptr<Route> r,
|
||||||
gain_slider->set_controllable (std::shared_ptr<PBD::Controllable>());
|
gain_slider->set_controllable (std::shared_ptr<PBD::Controllable>());
|
||||||
_meter.reset ();
|
_meter.reset ();
|
||||||
_amp.reset ();
|
_amp.reset ();
|
||||||
_route.reset ();
|
_stripable.reset ();
|
||||||
_control.reset ();
|
_control.reset ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_meter = pm;
|
_meter = pm;
|
||||||
_amp = amp;
|
_amp = amp;
|
||||||
_route = r;
|
_stripable = s;
|
||||||
_control = control;
|
_control = control;
|
||||||
|
|
||||||
level_meter->set_meter (pm.get());
|
level_meter->set_meter (pm.get());
|
||||||
|
@ -263,7 +263,7 @@ GainMeterBase::set_controls (std::shared_ptr<Route> r,
|
||||||
|
|
||||||
setup_gain_adjustment ();
|
setup_gain_adjustment ();
|
||||||
|
|
||||||
if (!_route || !_route->is_auditioner()) {
|
if (!route() || !route()->is_auditioner()) {
|
||||||
|
|
||||||
using namespace Menu_Helpers;
|
using namespace Menu_Helpers;
|
||||||
|
|
||||||
|
@ -370,8 +370,8 @@ GainMeterBase::setup_meters (int len)
|
||||||
uint32_t meter_channels = 0;
|
uint32_t meter_channels = 0;
|
||||||
if (_meter) {
|
if (_meter) {
|
||||||
meter_channels = _meter->input_streams().n_total();
|
meter_channels = _meter->input_streams().n_total();
|
||||||
} else if (_route) {
|
} else if (route()) {
|
||||||
meter_channels = _route->shared_peak_meter()->input_streams().n_total();
|
meter_channels = route()->shared_peak_meter()->input_streams().n_total();
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (_width) {
|
switch (_width) {
|
||||||
|
@ -404,8 +404,8 @@ GainMeter::setup_meters (int len)
|
||||||
uint32_t meter_channels = 0;
|
uint32_t meter_channels = 0;
|
||||||
if (_meter) {
|
if (_meter) {
|
||||||
meter_channels = _meter->input_streams().n_total();
|
meter_channels = _meter->input_streams().n_total();
|
||||||
} else if (_route) {
|
} else if (route()) {
|
||||||
meter_channels = _route->shared_peak_meter()->input_streams().n_total();
|
meter_channels = route()->shared_peak_meter()->input_streams().n_total();
|
||||||
}
|
}
|
||||||
hbox.set_homogeneous(meter_channels < 7 ? true : false);
|
hbox.set_homogeneous(meter_channels < 7 ? true : false);
|
||||||
}
|
}
|
||||||
|
@ -442,11 +442,11 @@ GainMeterBase::peak_button_release (GdkEventButton* ev)
|
||||||
if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
|
if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
|
||||||
ResetAllPeakDisplays ();
|
ResetAllPeakDisplays ();
|
||||||
} else if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
} else if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
||||||
if (_route) {
|
if (route()) {
|
||||||
ResetGroupPeakDisplays (_route->route_group());
|
ResetGroupPeakDisplays (route()->route_group());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ResetRoutePeakDisplays (_route.get());
|
ResetRoutePeakDisplays (route().get());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -455,7 +455,7 @@ GainMeterBase::peak_button_release (GdkEventButton* ev)
|
||||||
void
|
void
|
||||||
GainMeterBase::reset_peak_display ()
|
GainMeterBase::reset_peak_display ()
|
||||||
{
|
{
|
||||||
if (!_route) {
|
if (!route()) {
|
||||||
// catch "reset all" for VCAs
|
// catch "reset all" for VCAs
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -464,9 +464,9 @@ GainMeterBase::reset_peak_display ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GainMeterBase::reset_route_peak_display (Route* route)
|
GainMeterBase::reset_route_peak_display (Route* r)
|
||||||
{
|
{
|
||||||
if (_route && _route.get() == route) {
|
if (route() && route().get() == r) {
|
||||||
reset_peak_display ();
|
reset_peak_display ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -474,7 +474,7 @@ GainMeterBase::reset_route_peak_display (Route* route)
|
||||||
void
|
void
|
||||||
GainMeterBase::reset_group_peak_display (RouteGroup* group)
|
GainMeterBase::reset_group_peak_display (RouteGroup* group)
|
||||||
{
|
{
|
||||||
if (_route && group == _route->route_group()) {
|
if (route() && group == route()->route_group()) {
|
||||||
reset_peak_display ();
|
reset_peak_display ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -682,7 +682,7 @@ GainMeterBase::update_gain_sensitive ()
|
||||||
gint
|
gint
|
||||||
GainMeterBase::meter_press(GdkEventButton* ev)
|
GainMeterBase::meter_press(GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
if (!_route) {
|
if (!route()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!ignore_toggle) {
|
if (!ignore_toggle) {
|
||||||
|
@ -708,7 +708,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
|
||||||
}
|
}
|
||||||
Gtkmm2ext::anchored_menu_popup(&meter_point_menu,
|
Gtkmm2ext::anchored_menu_popup(&meter_point_menu,
|
||||||
&meter_point_button,
|
&meter_point_button,
|
||||||
meterpt_string (_route->meter_point()),
|
meterpt_string (route()->meter_point()),
|
||||||
1, ev->time);
|
1, ev->time);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -739,16 +739,16 @@ GainMeterBase::set_route_group_meter_point (Route& route, MeterPoint mp)
|
||||||
void
|
void
|
||||||
GainMeterBase::meter_point_clicked (MeterPoint mp)
|
GainMeterBase::meter_point_clicked (MeterPoint mp)
|
||||||
{
|
{
|
||||||
if (_route) {
|
if (route()) {
|
||||||
switch (meter_point_change_target) {
|
switch (meter_point_change_target) {
|
||||||
case MeterPointChangeAll:
|
case MeterPointChangeAll:
|
||||||
_session->foreach_route (this, &GainMeterBase::set_meter_point, mp);
|
_session->foreach_route (this, &GainMeterBase::set_meter_point, mp);
|
||||||
break;
|
break;
|
||||||
case MeterPointChangeGroup:
|
case MeterPointChangeGroup:
|
||||||
set_route_group_meter_point (*_route, mp);
|
set_route_group_meter_point (*route(), mp);
|
||||||
break;
|
break;
|
||||||
case MeterPointChangeSingle:
|
case MeterPointChangeSingle:
|
||||||
_route->set_meter_point (mp);
|
route()->set_meter_point (mp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -757,10 +757,10 @@ GainMeterBase::meter_point_clicked (MeterPoint mp)
|
||||||
void
|
void
|
||||||
GainMeterBase::amp_start_touch (int state)
|
GainMeterBase::amp_start_touch (int state)
|
||||||
{
|
{
|
||||||
if (_route) {
|
if (_stripable) {
|
||||||
StripableList sl;
|
StripableList sl;
|
||||||
|
|
||||||
_session->selection ().get_stripables_for_op (sl, _route, &RouteGroup::is_gain);
|
_session->selection ().get_stripables_for_op (sl, _stripable, &RouteGroup::is_gain);
|
||||||
|
|
||||||
_touch_control_group.reset (new GainControlGroup ());
|
_touch_control_group.reset (new GainControlGroup ());
|
||||||
_touch_control_group->set_mode (ControlGroup::Relative);
|
_touch_control_group->set_mode (ControlGroup::Relative);
|
||||||
|
@ -922,7 +922,7 @@ GainMeterBase::set_width (Width w, int len)
|
||||||
{
|
{
|
||||||
_width = w;
|
_width = w;
|
||||||
int meter_width = 5;
|
int meter_width = 5;
|
||||||
if (_width == Wide && _route && _route->shared_peak_meter()->input_streams().n_total() == 1) {
|
if (_width == Wide && route() && route()->shared_peak_meter()->input_streams().n_total() == 1) {
|
||||||
meter_width = 10;
|
meter_width = 10;
|
||||||
}
|
}
|
||||||
level_meter->setup_meters(len, meter_width);
|
level_meter->setup_meters(len, meter_width);
|
||||||
|
@ -942,6 +942,12 @@ GainMeterBase::redraw_metrics()
|
||||||
meter_ticks2_area.queue_draw ();
|
meter_ticks2_area.queue_draw ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<Route>
|
||||||
|
GainMeterBase::route ()
|
||||||
|
{
|
||||||
|
return std::dynamic_pointer_cast<Route> (_stripable);
|
||||||
|
}
|
||||||
|
|
||||||
#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * UIConfiguration::instance().get_ui_scale()))
|
#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * UIConfiguration::instance().get_ui_scale()))
|
||||||
|
|
||||||
GainMeter::GainMeter (Session* s, int fader_length)
|
GainMeter::GainMeter (Session* s, int fader_length)
|
||||||
|
@ -1009,7 +1015,7 @@ GainMeter::GainMeter (Session* s, int fader_length)
|
||||||
GainMeter::~GainMeter () { }
|
GainMeter::~GainMeter () { }
|
||||||
|
|
||||||
void
|
void
|
||||||
GainMeter::set_controls (std::shared_ptr<Route> r,
|
GainMeter::set_controls (std::shared_ptr<Stripable> s,
|
||||||
std::shared_ptr<PeakMeter> meter,
|
std::shared_ptr<PeakMeter> meter,
|
||||||
std::shared_ptr<Amp> amp,
|
std::shared_ptr<Amp> amp,
|
||||||
std::shared_ptr<GainControl> control)
|
std::shared_ptr<GainControl> control)
|
||||||
|
@ -1022,7 +1028,7 @@ GainMeter::set_controls (std::shared_ptr<Route> r,
|
||||||
// fader_vbox->remove (gain_automation_state_button);
|
// fader_vbox->remove (gain_automation_state_button);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
GainMeterBase::set_controls (r, meter, amp, control);
|
GainMeterBase::set_controls (s, meter, amp, control);
|
||||||
|
|
||||||
if (_meter) {
|
if (_meter) {
|
||||||
_meter->ConfigurationChanged.connect (
|
_meter->ConfigurationChanged.connect (
|
||||||
|
@ -1036,8 +1042,8 @@ GainMeter::set_controls (std::shared_ptr<Route> r,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (_route) {
|
if (route()) {
|
||||||
_route->active_changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeter::route_active_changed, this), gui_context ());
|
route()->active_changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeter::route_active_changed, this), gui_context ());
|
||||||
}
|
}
|
||||||
|
|
||||||
hbox.pack_start (meter_hbox, true, true);
|
hbox.pack_start (meter_hbox, true, true);
|
||||||
|
@ -1078,31 +1084,31 @@ GainMeter::get_gm_width ()
|
||||||
gint
|
gint
|
||||||
GainMeter::meter_metrics_expose (GdkEventExpose *ev)
|
GainMeter::meter_metrics_expose (GdkEventExpose *ev)
|
||||||
{
|
{
|
||||||
if (!_route) {
|
if (!route()) {
|
||||||
if (_types.empty()) { _types.push_back(DataType::AUDIO); }
|
if (_types.empty()) { _types.push_back(DataType::AUDIO); }
|
||||||
return meter_expose_metrics(ev, MeterPeak, _types, &meter_metric_area);
|
return meter_expose_metrics(ev, MeterPeak, _types, &meter_metric_area);
|
||||||
}
|
}
|
||||||
return meter_expose_metrics(ev, _route->meter_type(), _types, &meter_metric_area);
|
return meter_expose_metrics(ev, route()->meter_type(), _types, &meter_metric_area);
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
GainMeter::meter_ticks1_expose (GdkEventExpose *ev)
|
GainMeter::meter_ticks1_expose (GdkEventExpose *ev)
|
||||||
{
|
{
|
||||||
if (!_route) {
|
if (!route()) {
|
||||||
if (_types.empty()) { _types.push_back(DataType::AUDIO); }
|
if (_types.empty()) { _types.push_back(DataType::AUDIO); }
|
||||||
return meter_expose_ticks(ev, MeterPeak, _types, &meter_ticks1_area);
|
return meter_expose_ticks(ev, MeterPeak, _types, &meter_ticks1_area);
|
||||||
}
|
}
|
||||||
return meter_expose_ticks(ev, _route->meter_type(), _types, &meter_ticks1_area);
|
return meter_expose_ticks(ev, route()->meter_type(), _types, &meter_ticks1_area);
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
GainMeter::meter_ticks2_expose (GdkEventExpose *ev)
|
GainMeter::meter_ticks2_expose (GdkEventExpose *ev)
|
||||||
{
|
{
|
||||||
if (!_route) {
|
if (!route()) {
|
||||||
if (_types.empty()) { _types.push_back(DataType::AUDIO); }
|
if (_types.empty()) { _types.push_back(DataType::AUDIO); }
|
||||||
return meter_expose_ticks(ev, MeterPeak, _types, &meter_ticks2_area);
|
return meter_expose_ticks(ev, MeterPeak, _types, &meter_ticks2_area);
|
||||||
}
|
}
|
||||||
return meter_expose_ticks(ev, _route->meter_type(), _types, &meter_ticks2_area);
|
return meter_expose_ticks(ev, route()->meter_type(), _types, &meter_ticks2_area);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1141,26 +1147,26 @@ GainMeter::meter_configuration_changed (ChanCount c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_audio_track = _route && std::dynamic_pointer_cast<AudioTrack>(_route) != 0;
|
bool is_audio_track = route() && std::dynamic_pointer_cast<AudioTrack>(route()) != 0;
|
||||||
bool is_midi_track = _route && std::dynamic_pointer_cast<MidiTrack>(_route) != 0;
|
bool is_midi_track = route() && std::dynamic_pointer_cast<MidiTrack>(route()) != 0;
|
||||||
|
|
||||||
if (!is_audio_track && (is_midi_track || /* MIDI Bus */ (type == (1 << DataType::MIDI)))) {
|
if (!is_audio_track && (is_midi_track || /* MIDI Bus */ (type == (1 << DataType::MIDI)))) {
|
||||||
if (!_route || _route->active()) {
|
if (!route() || route()->active()) {
|
||||||
set_meter_strip_name ("MidiTrackMetrics");
|
set_meter_strip_name ("MidiTrackMetrics");
|
||||||
} else {
|
} else {
|
||||||
set_meter_strip_name ("MidiTrackMetricsInactive");
|
set_meter_strip_name ("MidiTrackMetricsInactive");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (_route && (!is_audio_track && !is_midi_track)) {
|
else if (route() && (!is_audio_track && !is_midi_track)) {
|
||||||
/* Bus */
|
/* Bus */
|
||||||
if (_route->active()) {
|
if (route()->active()) {
|
||||||
set_meter_strip_name ("AudioBusMetrics");
|
set_meter_strip_name ("AudioBusMetrics");
|
||||||
} else {
|
} else {
|
||||||
set_meter_strip_name ("AudioBusMetricsInactive");
|
set_meter_strip_name ("AudioBusMetricsInactive");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!_route || _route->active()) {
|
if (!route() || route()->active()) {
|
||||||
set_meter_strip_name ("AudioTrackMetrics");
|
set_meter_strip_name ("AudioTrackMetrics");
|
||||||
} else {
|
} else {
|
||||||
set_meter_strip_name ("AudioTrackMetricsInactive");
|
set_meter_strip_name ("AudioTrackMetricsInactive");
|
||||||
|
@ -1185,3 +1191,4 @@ GainMeter::redraw_metrics ()
|
||||||
{
|
{
|
||||||
GainMeterBase::redraw_metrics ();
|
GainMeterBase::redraw_metrics ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,7 @@ namespace ARDOUR {
|
||||||
class ControlGroup;
|
class ControlGroup;
|
||||||
class GainControl;
|
class GainControl;
|
||||||
class Session;
|
class Session;
|
||||||
|
class Stripable;
|
||||||
class Route;
|
class Route;
|
||||||
class RouteGroup;
|
class RouteGroup;
|
||||||
class PeakMeter;
|
class PeakMeter;
|
||||||
|
@ -81,7 +82,7 @@ public:
|
||||||
GainMeterBase (ARDOUR::Session*, bool horizontal, int, int);
|
GainMeterBase (ARDOUR::Session*, bool horizontal, int, int);
|
||||||
virtual ~GainMeterBase ();
|
virtual ~GainMeterBase ();
|
||||||
|
|
||||||
virtual void set_controls (std::shared_ptr<ARDOUR::Route> route,
|
virtual void set_controls (std::shared_ptr<ARDOUR::Stripable> stripable,
|
||||||
std::shared_ptr<ARDOUR::PeakMeter> meter,
|
std::shared_ptr<ARDOUR::PeakMeter> meter,
|
||||||
std::shared_ptr<ARDOUR::Amp> amp,
|
std::shared_ptr<ARDOUR::Amp> amp,
|
||||||
std::shared_ptr<ARDOUR::GainControl> control);
|
std::shared_ptr<ARDOUR::GainControl> control);
|
||||||
|
@ -123,7 +124,7 @@ protected:
|
||||||
friend class MeterStrip;
|
friend class MeterStrip;
|
||||||
friend class RouteTimeAxisView;
|
friend class RouteTimeAxisView;
|
||||||
friend class VCAMasterStrip;
|
friend class VCAMasterStrip;
|
||||||
std::shared_ptr<ARDOUR::Route> _route;
|
std::shared_ptr<ARDOUR::Stripable> _stripable;
|
||||||
std::shared_ptr<ARDOUR::PeakMeter> _meter;
|
std::shared_ptr<ARDOUR::PeakMeter> _meter;
|
||||||
std::shared_ptr<ARDOUR::Amp> _amp;
|
std::shared_ptr<ARDOUR::Amp> _amp;
|
||||||
std::shared_ptr<ARDOUR::GainControl> _control;
|
std::shared_ptr<ARDOUR::GainControl> _control;
|
||||||
|
@ -211,6 +212,8 @@ protected:
|
||||||
ARDOUR::DataType _data_type;
|
ARDOUR::DataType _data_type;
|
||||||
ARDOUR::ChanCount _previous_amp_output_streams;
|
ARDOUR::ChanCount _previous_amp_output_streams;
|
||||||
|
|
||||||
|
std::shared_ptr<ARDOUR::Route> route();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool level_meter_button_press (GdkEventButton *);
|
bool level_meter_button_press (GdkEventButton *);
|
||||||
|
@ -226,7 +229,7 @@ class GainMeter : public GainMeterBase, public Gtk::VBox
|
||||||
GainMeter (ARDOUR::Session*, int);
|
GainMeter (ARDOUR::Session*, int);
|
||||||
virtual ~GainMeter ();
|
virtual ~GainMeter ();
|
||||||
|
|
||||||
virtual void set_controls (std::shared_ptr<ARDOUR::Route> route,
|
virtual void set_controls (std::shared_ptr<ARDOUR::Stripable> stripable,
|
||||||
std::shared_ptr<ARDOUR::PeakMeter> meter,
|
std::shared_ptr<ARDOUR::PeakMeter> meter,
|
||||||
std::shared_ptr<ARDOUR::Amp> amp,
|
std::shared_ptr<ARDOUR::Amp> amp,
|
||||||
std::shared_ptr<ARDOUR::GainControl> control);
|
std::shared_ptr<ARDOUR::GainControl> control);
|
||||||
|
|
|
@ -40,7 +40,7 @@ ReturnUI::ReturnUI (Gtk::Window* parent, std::shared_ptr<Return> r, Session* ses
|
||||||
:_return (r)
|
:_return (r)
|
||||||
, _gpm (session, 250)
|
, _gpm (session, 250)
|
||||||
{
|
{
|
||||||
_gpm.set_controls (std::shared_ptr<Route>(), r->meter(), r->amp(), r->gain_control());
|
_gpm.set_controls (std::shared_ptr<Stripable>(), r->meter(), r->amp(), r->gain_control());
|
||||||
|
|
||||||
_hbox.pack_start (_gpm, true, true);
|
_hbox.pack_start (_gpm, true, true);
|
||||||
set_name (X_("ReturnUIFrame"));
|
set_name (X_("ReturnUIFrame"));
|
||||||
|
|
|
@ -170,7 +170,7 @@ VCATimeAxisView::set_vca (std::shared_ptr<VCA> v)
|
||||||
StripableTimeAxisView::set_stripable (v);
|
StripableTimeAxisView::set_stripable (v);
|
||||||
_vca = v;
|
_vca = v;
|
||||||
|
|
||||||
gain_meter.set_controls (std::shared_ptr<Route>(),
|
gain_meter.set_controls (v,
|
||||||
std::shared_ptr<PeakMeter>(),
|
std::shared_ptr<PeakMeter>(),
|
||||||
std::shared_ptr<Amp>(),
|
std::shared_ptr<Amp>(),
|
||||||
_vca->gain_control());
|
_vca->gain_control());
|
||||||
|
|
Loading…
Reference in New Issue