+ gain_watching = ARDOUR_UI::RapidScreenUpdate.connect (sigc::mem_fun (*this, &GainMeterBase::effective_gain_display));
+ }
+}
+
+void
+GainMeterBase::update_meters()
+{
+ char buf[32];
+ float mpeak = level_meter->update_meters();
+
+ if (mpeak > max_peak) {
+ max_peak = mpeak;
+ if (mpeak <= -200.0f) {
+ peak_display.set_label (_("-inf"));
+ } else {
+ snprintf (buf, sizeof(buf), "%.1f", mpeak);
+ peak_display.set_label (buf);
+ }
+ }
+ if (mpeak >= Config->get_meter_peak()) {
+ peak_display.set_name ("MixerStripPeakDisplayPeak");
+ }
+}
+
+void GainMeterBase::color_handler(bool /*dpi*/)
+{
+ setup_meters();
+}
+
+void
+GainMeterBase::set_width (Width w, int len)
+{
+ _width = w;
+ int meter_width = 5;
+ if (_width == Wide && _route && _route->shared_peak_meter()->input_streams().n_total() == 1) {
+ meter_width = 10;
+ }
+ level_meter->setup_meters(len, meter_width);
+}
+
+
+void
+GainMeterBase::on_theme_changed()
+{
+}
+
+void
+GainMeterBase::redraw_metrics()
+{
+ meter_metric_area.queue_draw ();
+ meter_ticks1_area.queue_draw ();
+ meter_ticks2_area.queue_draw ();
+}
+
+GainMeter::GainMeter (Session* s, int fader_length)
+ : GainMeterBase (s, false, fader_length, 24)
+ , gain_display_box(true, 0)
+ , hbox(true, 2)
+{
+ if (gain_display.get_parent()) {
+ gain_display.get_parent()->remove (gain_display);
+ }
+ gain_display_box.pack_start (gain_display, true, true);
+
+ meter_metric_area.set_name ("AudioTrackMetrics");
+ meter_metric_area.set_size_request(24, -1);
+
+ gain_automation_style_button.set_name ("mixer strip button");
+ gain_automation_state_button.set_name ("mixer strip button");
+
+ ARDOUR_UI::instance()->set_tip (gain_automation_state_button, _("Fader automation mode"));
+ ARDOUR_UI::instance()->set_tip (gain_automation_style_button, _("Fader automation type"));
+
+ gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
+ gain_automation_state_button.unset_flags (Gtk::CAN_FOCUS);
+
+ gain_automation_state_button.set_size_request(15, 15);
+ gain_automation_style_button.set_size_request(15, 15);
+
+ fader_vbox = manage (new Gtk::VBox());
+ fader_vbox->set_spacing (0);
+ fader_vbox->pack_start (*gain_slider, true, true);
+
+ fader_alignment.set (0.5, 0.5, 0.0, 1.0);
+ fader_alignment.add (*fader_vbox);
+
+ hbox.pack_start (fader_alignment, true, true);
+
+ set_spacing (2);
+
+ pack_start (gain_display_box, Gtk::PACK_SHRINK);
+ pack_start (hbox, Gtk::PACK_SHRINK);
+
+ meter_alignment.set (0.5, 0.5, 0.0, 1.0);
+ meter_alignment.add (*level_meter);
+
+ meter_metric_area.signal_expose_event().connect (
+ sigc::mem_fun(*this, &GainMeter::meter_metrics_expose));
+
+ meter_ticks1_area.set_size_request(3,-1);
+ meter_ticks2_area.set_size_request(3,-1);
+
+ meter_ticks1_area.signal_expose_event().connect (
+ sigc::mem_fun(*this, &GainMeter::meter_ticks1_expose));
+ meter_ticks2_area.signal_expose_event().connect (
+ sigc::mem_fun(*this, &GainMeter::meter_ticks2_expose));
+
+ meter_hbox.pack_start (meter_ticks1_area, false, false);
+ meter_hbox.pack_start (meter_alignment, false, false);
+ meter_hbox.pack_start (meter_ticks2_area, false, false);
+ meter_hbox.pack_start (meter_metric_area, false, false);
+}
+
+GainMeter::~GainMeter () { }
+
+void
+GainMeter::set_controls (boost::shared_ptr<Route> r,
+ boost::shared_ptr<PeakMeter> meter,
+ boost::shared_ptr<Amp> amp)
+{
+ if (meter_hbox.get_parent()) {
+ hbox.remove (meter_hbox);