GainMeter(Base) now has an explicit gain control given to it

This commit is contained in:
Paul Davis 2016-01-25 11:47:44 -05:00
parent 22a20c7333
commit dd32c05cda
7 changed files with 38 additions and 33 deletions

View file

@ -184,7 +184,8 @@ GainMeterBase::~GainMeterBase ()
void void
GainMeterBase::set_controls (boost::shared_ptr<Route> r, GainMeterBase::set_controls (boost::shared_ptr<Route> r,
boost::shared_ptr<PeakMeter> pm, boost::shared_ptr<PeakMeter> pm,
boost::shared_ptr<Amp> amp) boost::shared_ptr<Amp> amp,
boost::shared_ptr<GainControl> control)
{ {
connections.clear (); connections.clear ();
model_connections.drop_connections (); model_connections.drop_connections ();
@ -201,9 +202,12 @@ GainMeterBase::set_controls (boost::shared_ptr<Route> r,
_meter = pm; _meter = pm;
_amp = amp; _amp = amp;
_route = r; _route = r;
_control = control;
assert (_control);
level_meter->set_meter (pm.get()); level_meter->set_meter (pm.get());
gain_slider->set_controllable (amp->gain_control()); gain_slider->set_controllable (_control);
if (amp) { if (amp) {
amp->ConfigurationChanged.connect ( amp->ConfigurationChanged.connect (
@ -235,15 +239,13 @@ GainMeterBase::set_controls (boost::shared_ptr<Route> r,
connections.push_back (gain_automation_style_button.signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeterBase::gain_automation_style_button_event), false)); connections.push_back (gain_automation_style_button.signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeterBase::gain_automation_style_button_event), false));
connections.push_back (gain_automation_state_button.signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeterBase::gain_automation_state_button_event), false)); connections.push_back (gain_automation_state_button.signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeterBase::gain_automation_state_button_event), false));
boost::shared_ptr<AutomationControl> gc = amp->gain_control(); _control->alist()->automation_state_changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeter::gain_automation_state_changed, this), gui_context());
_control->alist()->automation_style_changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeter::gain_automation_style_changed, this), gui_context());
gc->alist()->automation_state_changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeter::gain_automation_state_changed, this), gui_context());
gc->alist()->automation_style_changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeter::gain_automation_style_changed, this), gui_context());
gain_automation_state_changed (); gain_automation_state_changed ();
} }
amp->gain_control()->Changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeterBase::gain_changed, this), gui_context()); _control->Changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeterBase::gain_changed, this), gui_context());
gain_changed (); gain_changed ();
show_gain (); show_gain ();
@ -470,10 +472,10 @@ GainMeterBase::gain_activated ()
/* clamp to displayable values */ /* clamp to displayable values */
if (_data_type == DataType::AUDIO) { if (_data_type == DataType::AUDIO) {
f = min (f, 6.0f); f = min (f, 6.0f);
_amp->gain_control()->set_value (dB_to_coefficient(f), Controllable::NoGroup); _control->set_value (dB_to_coefficient(f), Controllable::NoGroup);
} else { } else {
f = min (fabs (f), 2.0f); f = min (fabs (f), 2.0f);
_amp->gain_control()->set_value (f, Controllable::NoGroup); _control->set_value (f, Controllable::NoGroup);
} }
if (gain_display.has_focus()) { if (gain_display.has_focus()) {
@ -534,7 +536,7 @@ GainMeterBase::gain_adjusted ()
if (_route && _route->amp() == _amp) { if (_route && _route->amp() == _amp) {
_route->set_gain (value, Controllable::UseGroup); _route->set_gain (value, Controllable::UseGroup);
} else { } else {
_amp->gain_control()->set_value (value, Controllable::NoGroup); _control->set_value (value, Controllable::NoGroup);
} }
} }
@ -548,10 +550,10 @@ GainMeterBase::effective_gain_display ()
switch (_data_type) { switch (_data_type) {
case DataType::AUDIO: case DataType::AUDIO:
value = gain_to_slider_position_with_max (_amp->gain(), Config->get_max_gain()); value = gain_to_slider_position_with_max (_control->get_value(), Config->get_max_gain());
break; break;
case DataType::MIDI: case DataType::MIDI:
value = _amp->gain (); value = _control->get_value ();
break; break;
} }
@ -588,7 +590,7 @@ GainMeterBase::set_fader_name (const char * name)
void void
GainMeterBase::update_gain_sensitive () GainMeterBase::update_gain_sensitive ()
{ {
bool x = !(_amp->gain_control()->alist()->automation_state() & Play); bool x = !(_control->alist()->automation_state() & Play);
static_cast<Gtkmm2ext::SliderController*>(gain_slider)->set_sensitive (x); static_cast<Gtkmm2ext::SliderController*>(gain_slider)->set_sensitive (x);
} }
@ -729,13 +731,13 @@ GainMeterBase::meter_point_clicked ()
void void
GainMeterBase::amp_start_touch () GainMeterBase::amp_start_touch ()
{ {
_amp->gain_control()->start_touch (_amp->session().transport_frame()); _control->start_touch (_amp->session().transport_frame());
} }
void void
GainMeterBase::amp_stop_touch () GainMeterBase::amp_stop_touch ()
{ {
_amp->gain_control()->stop_touch (false, _amp->session().transport_frame()); _control->stop_touch (false, _amp->session().transport_frame());
} }
gint gint
@ -837,10 +839,10 @@ GainMeterBase::gain_automation_style_changed ()
{ {
switch (_width) { switch (_width) {
case Wide: case Wide:
gain_automation_style_button.set_text (astyle_string(_amp->gain_control()->alist()->automation_style())); gain_automation_style_button.set_text (astyle_string(_control->alist()->automation_style()));
break; break;
case Narrow: case Narrow:
gain_automation_style_button.set_text (short_astyle_string(_amp->gain_control()->alist()->automation_style())); gain_automation_style_button.set_text (short_astyle_string(_control->alist()->automation_style()));
break; break;
} }
} }
@ -850,18 +852,16 @@ GainMeterBase::gain_automation_state_changed ()
{ {
ENSURE_GUI_THREAD (*this, &GainMeterBase::gain_automation_state_changed); ENSURE_GUI_THREAD (*this, &GainMeterBase::gain_automation_state_changed);
cerr << "GMB:autostate change to " << _amp->gain_control()->alist()->automation_state() << endl;
switch (_width) { switch (_width) {
case Wide: case Wide:
gain_automation_state_button.set_text (astate_string(_amp->gain_control()->alist()->automation_state())); gain_automation_state_button.set_text (astate_string(_control->alist()->automation_state()));
break; break;
case Narrow: case Narrow:
gain_automation_state_button.set_text (short_astate_string(_amp->gain_control()->alist()->automation_state())); gain_automation_state_button.set_text (short_astate_string(_control->alist()->automation_state()));
break; break;
} }
const bool automation_watch_required = (_amp->gain_control()->alist()->automation_state() != ARDOUR::Off); const bool automation_watch_required = (_control->alist()->automation_state() != ARDOUR::Off);
if (gain_automation_state_button.get_active() != automation_watch_required) { if (gain_automation_state_button.get_active() != automation_watch_required) {
ignore_toggle = true; ignore_toggle = true;
@ -1010,7 +1010,8 @@ GainMeter::~GainMeter () { }
void void
GainMeter::set_controls (boost::shared_ptr<Route> r, GainMeter::set_controls (boost::shared_ptr<Route> r,
boost::shared_ptr<PeakMeter> meter, boost::shared_ptr<PeakMeter> meter,
boost::shared_ptr<Amp> amp) boost::shared_ptr<Amp> amp,
boost::shared_ptr<GainControl> control)
{ {
if (meter_hbox.get_parent()) { if (meter_hbox.get_parent()) {
hbox.remove (meter_hbox); hbox.remove (meter_hbox);
@ -1020,7 +1021,7 @@ GainMeter::set_controls (boost::shared_ptr<Route> r,
// fader_vbox->remove (gain_automation_state_button); // fader_vbox->remove (gain_automation_state_button);
// } // }
GainMeterBase::set_controls (r, meter, amp); GainMeterBase::set_controls (r, meter, amp, control);
if (_meter) { if (_meter) {
_meter->ConfigurationChanged.connect ( _meter->ConfigurationChanged.connect (
@ -1113,7 +1114,7 @@ boost::shared_ptr<PBD::Controllable>
GainMeterBase::get_controllable() GainMeterBase::get_controllable()
{ {
if (_amp) { if (_amp) {
return _amp->gain_control(); return _control;
} else { } else {
return boost::shared_ptr<PBD::Controllable>(); return boost::shared_ptr<PBD::Controllable>();
} }

View file

@ -49,6 +49,7 @@
namespace ARDOUR { namespace ARDOUR {
class IO; class IO;
class GainControl;
class Session; class Session;
class Route; class Route;
class RouteGroup; class RouteGroup;
@ -71,7 +72,8 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr
virtual void set_controls (boost::shared_ptr<ARDOUR::Route> route, virtual void set_controls (boost::shared_ptr<ARDOUR::Route> route,
boost::shared_ptr<ARDOUR::PeakMeter> meter, boost::shared_ptr<ARDOUR::PeakMeter> meter,
boost::shared_ptr<ARDOUR::Amp> amp); boost::shared_ptr<ARDOUR::Amp> amp,
boost::shared_ptr<ARDOUR::GainControl> control);
void update_gain_sensitive (); void update_gain_sensitive ();
void update_meters (); void update_meters ();
@ -104,6 +106,7 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr
boost::shared_ptr<ARDOUR::Route> _route; boost::shared_ptr<ARDOUR::Route> _route;
boost::shared_ptr<ARDOUR::PeakMeter> _meter; boost::shared_ptr<ARDOUR::PeakMeter> _meter;
boost::shared_ptr<ARDOUR::Amp> _amp; boost::shared_ptr<ARDOUR::Amp> _amp;
boost::shared_ptr<ARDOUR::GainControl> _control;
std::vector<sigc::connection> connections; std::vector<sigc::connection> connections;
PBD::ScopedConnectionList model_connections; PBD::ScopedConnectionList model_connections;
@ -206,7 +209,8 @@ class GainMeter : public GainMeterBase, public Gtk::VBox
virtual void set_controls (boost::shared_ptr<ARDOUR::Route> route, virtual void set_controls (boost::shared_ptr<ARDOUR::Route> route,
boost::shared_ptr<ARDOUR::PeakMeter> meter, boost::shared_ptr<ARDOUR::PeakMeter> meter,
boost::shared_ptr<ARDOUR::Amp> amp); boost::shared_ptr<ARDOUR::Amp> amp,
boost::shared_ptr<ARDOUR::GainControl> control);
int get_gm_width (); int get_gm_width ();
void setup_meters (int len=0); void setup_meters (int len=0);

View file

@ -2038,7 +2038,7 @@ MixerStrip::show_send (boost::shared_ptr<Send> send)
send->set_metering (true); send->set_metering (true);
_current_delivery->DropReferences.connect (send_gone_connection, invalidator (*this), boost::bind (&MixerStrip::revert_to_default_display, this), gui_context()); _current_delivery->DropReferences.connect (send_gone_connection, invalidator (*this), boost::bind (&MixerStrip::revert_to_default_display, this), gui_context());
gain_meter().set_controls (_route, send->meter(), send->amp()); gain_meter().set_controls (_route, send->meter(), send->amp(), send->gain_control());
gain_meter().setup_meters (); gain_meter().setup_meters ();
uint32_t const in = _current_delivery->pans_required(); uint32_t const in = _current_delivery->pans_required();
@ -2077,7 +2077,7 @@ MixerStrip::revert_to_default_display ()
set_current_delivery (_route->main_outs ()); set_current_delivery (_route->main_outs ());
gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp()); gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp(), _route->gain_control());
gain_meter().setup_meters (); gain_meter().setup_meters ();
panner_ui().set_panner (_route->main_outs()->panner_shell(), _route->main_outs()->panner()); panner_ui().set_panner (_route->main_outs()->panner_shell(), _route->main_outs()->panner());

View file

@ -38,7 +38,7 @@ ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr<Return> r, Session* s
:_return (r) :_return (r)
, _gpm (session, 250) , _gpm (session, 250)
{ {
_gpm.set_controls (boost::shared_ptr<Route>(), r->meter(), r->amp()); _gpm.set_controls (boost::shared_ptr<Route>(), 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"));

View file

@ -139,7 +139,7 @@ RouteTimeAxisView::set_route (boost::shared_ptr<Route> rt)
if (_route && _route->shared_peak_meter()->input_streams().n_total() == 1) { if (_route && _route->shared_peak_meter()->input_streams().n_total() == 1) {
meter_width = 6; meter_width = 6;
} }
gm.set_controls (_route, _route->shared_peak_meter(), _route->amp()); gm.set_controls (_route, _route->shared_peak_meter(), _route->amp(), _route->gain_control());
gm.get_level_meter().set_no_show_all(); gm.get_level_meter().set_no_show_all();
gm.get_level_meter().setup_meters(50, meter_width); gm.get_level_meter().setup_meters(50, meter_width);
gm.update_gain_sensitive (); gm.update_gain_sensitive ();

View file

@ -43,7 +43,7 @@ SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr<Send> s, Session* session
assert (_send); assert (_send);
_panners.set_panner (s->panner_shell(), s->panner()); _panners.set_panner (s->panner_shell(), s->panner());
_gpm.set_controls (boost::shared_ptr<Route>(), s->meter(), s->amp()); _gpm.set_controls (boost::shared_ptr<Route>(), s->meter(), s->amp(), s->gain_control());
_hbox.pack_start (_gpm, true, true); _hbox.pack_start (_gpm, true, true);
set_name (X_("SendUIFrame")); set_name (X_("SendUIFrame"));

View file

@ -832,7 +832,7 @@ SoundFileBrowser::add_gain_meter ()
boost::shared_ptr<Route> r = _session->the_auditioner (); boost::shared_ptr<Route> r = _session->the_auditioner ();
gm->set_controls (r, r->shared_peak_meter(), r->amp()); gm->set_controls (r, r->shared_peak_meter(), r->amp(), r->gain_control());
gm->set_fader_name (X_("GainFader")); gm->set_fader_name (X_("GainFader"));
meter_packer.set_border_width (12); meter_packer.set_border_width (12);