+ }
+
+ return TRUE;
+}
+
+gint
+GainMeterBase::gain_automation_style_button_event (GdkEventButton *ev)
+{
+ if (ev->type == GDK_BUTTON_RELEASE) {
+ return TRUE;
+ }
+
+ switch (ev->button) {
+ case 1:
+ gain_astyle_menu.popup (1, ev->time);
+ break;
+ default:
+ break;
+ }
+ return TRUE;
+}
+
+string
+GainMeterBase::astate_string (AutoState state)
+{
+ return _astate_string (state, false);
+}
+
+string
+GainMeterBase::short_astate_string (AutoState state)
+{
+ return _astate_string (state, true);
+}
+
+string
+GainMeterBase::_astate_string (AutoState state, bool shrt)
+{
+ string sstr;
+
+ switch (state) {
+ case Off:
+ sstr = (shrt ? "M" : _("M"));
+ break;
+ case Play:
+ sstr = (shrt ? "P" : _("P"));
+ break;
+ case Touch:
+ sstr = (shrt ? "T" : _("T"));
+ break;
+ case Write:
+ sstr = (shrt ? "W" : _("W"));
+ break;
+ }
+
+ return sstr;
+}
+
+string
+GainMeterBase::astyle_string (AutoStyle style)
+{
+ return _astyle_string (style, false);
+}
+
+string
+GainMeterBase::short_astyle_string (AutoStyle style)
+{
+ return _astyle_string (style, true);
+}
+
+string
+GainMeterBase::_astyle_string (AutoStyle style, bool shrt)
+{
+ if (style & Trim) {
+ return _("Trim");
+ } else {
+ /* XXX it might different in different languages */
+
+ return (shrt ? _("Abs") : _("Abs"));
+ }
+}
+
+void
+GainMeterBase::gain_automation_style_changed ()
+{
+ switch (_width) {
+ case Wide:
+ gain_automation_style_button.set_label (astyle_string(_io->gain_control()->alist()->automation_style()));
+ break;
+ case Narrow:
+ gain_automation_style_button.set_label (short_astyle_string(_io->gain_control()->alist()->automation_style()));
+ break;
+ }
+}
+
+void
+GainMeterBase::gain_automation_state_changed ()
+{
+ ENSURE_GUI_THREAD(mem_fun(*this, &GainMeterBase::gain_automation_state_changed));
+
+ bool x;
+
+ switch (_width) {
+ case Wide:
+ gain_automation_state_button.set_label (astate_string(_io->gain_control()->alist()->automation_state()));
+ break;
+ case Narrow:
+ gain_automation_state_button.set_label (short_astate_string(_io->gain_control()->alist()->automation_state()));
+ break;
+ }
+
+ x = (_io->gain_control()->alist()->automation_state() != Off);
+
+ if (gain_automation_state_button.get_active() != x) {
+ ignore_toggle = true;
+ gain_automation_state_button.set_active (x);
+ ignore_toggle = false;
+ }
+
+ update_gain_sensitive ();
+
+ /* start watching automation so that things move */
+
+ gain_watching.disconnect();
+
+ if (x) {
+ gain_watching = ARDOUR_UI::RapidScreenUpdate.connect (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);