diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 12b2955d54..2abd9d3642 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -184,7 +184,8 @@ GainMeterBase::~GainMeterBase () void GainMeterBase::set_controls (boost::shared_ptr r, boost::shared_ptr pm, - boost::shared_ptr amp) + boost::shared_ptr amp, + boost::shared_ptr control) { connections.clear (); model_connections.drop_connections (); @@ -201,9 +202,12 @@ GainMeterBase::set_controls (boost::shared_ptr r, _meter = pm; _amp = amp; _route = r; + _control = control; + + assert (_control); level_meter->set_meter (pm.get()); - gain_slider->set_controllable (amp->gain_control()); + gain_slider->set_controllable (_control); if (amp) { amp->ConfigurationChanged.connect ( @@ -235,15 +239,13 @@ GainMeterBase::set_controls (boost::shared_ptr 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_state_button.signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeterBase::gain_automation_state_button_event), false)); - boost::shared_ptr gc = amp->gain_control(); - - 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()); + _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()); 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 (); show_gain (); @@ -470,10 +472,10 @@ GainMeterBase::gain_activated () /* clamp to displayable values */ if (_data_type == DataType::AUDIO) { 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 { 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()) { @@ -534,7 +536,7 @@ GainMeterBase::gain_adjusted () if (_route && _route->amp() == _amp) { _route->set_gain (value, Controllable::UseGroup); } 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) { 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; case DataType::MIDI: - value = _amp->gain (); + value = _control->get_value (); break; } @@ -588,7 +590,7 @@ GainMeterBase::set_fader_name (const char * name) void GainMeterBase::update_gain_sensitive () { - bool x = !(_amp->gain_control()->alist()->automation_state() & Play); + bool x = !(_control->alist()->automation_state() & Play); static_cast(gain_slider)->set_sensitive (x); } @@ -729,13 +731,13 @@ GainMeterBase::meter_point_clicked () void GainMeterBase::amp_start_touch () { - _amp->gain_control()->start_touch (_amp->session().transport_frame()); + _control->start_touch (_amp->session().transport_frame()); } void GainMeterBase::amp_stop_touch () { - _amp->gain_control()->stop_touch (false, _amp->session().transport_frame()); + _control->stop_touch (false, _amp->session().transport_frame()); } gint @@ -837,10 +839,10 @@ GainMeterBase::gain_automation_style_changed () { switch (_width) { 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; 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; } } @@ -850,18 +852,16 @@ 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) { 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; 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; } - 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) { ignore_toggle = true; @@ -1010,7 +1010,8 @@ GainMeter::~GainMeter () { } void GainMeter::set_controls (boost::shared_ptr r, boost::shared_ptr meter, - boost::shared_ptr amp) + boost::shared_ptr amp, + boost::shared_ptr control) { if (meter_hbox.get_parent()) { hbox.remove (meter_hbox); @@ -1020,7 +1021,7 @@ GainMeter::set_controls (boost::shared_ptr r, // fader_vbox->remove (gain_automation_state_button); // } - GainMeterBase::set_controls (r, meter, amp); + GainMeterBase::set_controls (r, meter, amp, control); if (_meter) { _meter->ConfigurationChanged.connect ( @@ -1113,7 +1114,7 @@ boost::shared_ptr GainMeterBase::get_controllable() { if (_amp) { - return _amp->gain_control(); + return _control; } else { return boost::shared_ptr(); } diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index 0125c66b11..7cf3410241 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -49,6 +49,7 @@ namespace ARDOUR { class IO; + class GainControl; class Session; class Route; class RouteGroup; @@ -71,7 +72,8 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr virtual void set_controls (boost::shared_ptr route, boost::shared_ptr meter, - boost::shared_ptr amp); + boost::shared_ptr amp, + boost::shared_ptr control); void update_gain_sensitive (); void update_meters (); @@ -104,6 +106,7 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr boost::shared_ptr _route; boost::shared_ptr _meter; boost::shared_ptr _amp; + boost::shared_ptr _control; std::vector connections; PBD::ScopedConnectionList model_connections; @@ -206,7 +209,8 @@ class GainMeter : public GainMeterBase, public Gtk::VBox virtual void set_controls (boost::shared_ptr route, boost::shared_ptr meter, - boost::shared_ptr amp); + boost::shared_ptr amp, + boost::shared_ptr control); int get_gm_width (); void setup_meters (int len=0); diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 64b4494bac..553f44a10d 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -2038,7 +2038,7 @@ MixerStrip::show_send (boost::shared_ptr send) send->set_metering (true); _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 (); uint32_t const in = _current_delivery->pans_required(); @@ -2077,7 +2077,7 @@ MixerStrip::revert_to_default_display () 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 (); panner_ui().set_panner (_route->main_outs()->panner_shell(), _route->main_outs()->panner()); diff --git a/gtk2_ardour/return_ui.cc b/gtk2_ardour/return_ui.cc index b6412bbe7a..301ecdab31 100644 --- a/gtk2_ardour/return_ui.cc +++ b/gtk2_ardour/return_ui.cc @@ -38,7 +38,7 @@ ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr r, Session* s :_return (r) , _gpm (session, 250) { - _gpm.set_controls (boost::shared_ptr(), r->meter(), r->amp()); + _gpm.set_controls (boost::shared_ptr(), r->meter(), r->amp(), r->gain_control()); _hbox.pack_start (_gpm, true, true); set_name (X_("ReturnUIFrame")); diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 33baf3a511..4db19bd753 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -139,7 +139,7 @@ RouteTimeAxisView::set_route (boost::shared_ptr rt) if (_route && _route->shared_peak_meter()->input_streams().n_total() == 1) { 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().setup_meters(50, meter_width); gm.update_gain_sensitive (); diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc index af23518c3a..7f87f2dea8 100644 --- a/gtk2_ardour/send_ui.cc +++ b/gtk2_ardour/send_ui.cc @@ -43,7 +43,7 @@ SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr s, Session* session assert (_send); _panners.set_panner (s->panner_shell(), s->panner()); - _gpm.set_controls (boost::shared_ptr(), s->meter(), s->amp()); + _gpm.set_controls (boost::shared_ptr(), s->meter(), s->amp(), s->gain_control()); _hbox.pack_start (_gpm, true, true); set_name (X_("SendUIFrame")); diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 4c96172f16..104d0912b7 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -832,7 +832,7 @@ SoundFileBrowser::add_gain_meter () boost::shared_ptr 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")); meter_packer.set_border_width (12);