auditioner always runs at normal speed, independent of transport speed
[ardour.git] / gtk2_ardour / gain_meter.cc
index 4a17d4f640a0441aef221f84388ca7c7c9aa639b..02c3967f1614495a937e59b1dc25f4cb6011894f 100644 (file)
 
 #include <limits.h>
 
+#include <pangomm.h>
+
+#include <gtkmm/alignment.h>
+#include <gdkmm/color.h>
+#include <gtkmm/style.h>
+
 #include "ardour/amp.h"
 #include "ardour/logmeter.h"
 #include "ardour/route_group.h"
 #include "ardour/dB.h"
 #include "ardour/utils.h"
 
-#include <pangomm.h>
-
-#include "gtkmm/style.h"
-#include "gdkmm/color.h"
 #include "gtkmm2ext/utils.h"
-#include "gtkmm2ext/fastmeter.h"
 #include "gtkmm2ext/gtk_ui.h"
 
 #include "widgets/tooltips.h"
@@ -122,7 +123,7 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int
        meter_metric_area.signal_button_press_event().connect (sigc::mem_fun (*this, &GainMeterBase::level_meter_button_press));
        meter_metric_area.add_events (Gdk::BUTTON_PRESS_MASK);
 
-       gain_slider->set_tweaks (PixFader::Tweaks(PixFader::NoButtonForward | PixFader::NoVerticalScroll));
+       gain_slider->set_tweaks (ArdourFader::Tweaks(ArdourFader::NoButtonForward | ArdourFader::NoVerticalScroll));
        gain_slider->StartGesture.connect (sigc::mem_fun (*this, &GainMeter::amp_start_touch));
        gain_slider->StopGesture.connect (sigc::mem_fun (*this, &GainMeter::amp_stop_touch));
        gain_slider->set_name ("GainFader");
@@ -261,6 +262,8 @@ GainMeterBase::set_controls (boost::shared_ptr<Route> r,
                                                              sigc::bind (sigc::mem_fun (*this, &GainMeterBase::set_gain_astate), (AutoState) ARDOUR::Write)));
                gain_astate_menu.items().push_back (MenuElem (_("Touch"),
                                                              sigc::bind (sigc::mem_fun (*this, &GainMeterBase::set_gain_astate), (AutoState) ARDOUR::Touch)));
+               gain_astate_menu.items().push_back (MenuElem (_("Latch"),
+                                                             sigc::bind (sigc::mem_fun (*this, &GainMeterBase::set_gain_astate), (AutoState) ARDOUR::Latch)));
 
                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 (ChangeGainAutomationState.connect (sigc::mem_fun(*this, &GainMeterBase::set_gain_astate)));
@@ -291,7 +294,12 @@ GainMeterBase::set_gain_astate (AutoState as)
                ChangeGainAutomationState (as);
                return;
        }
-       _amp->set_parameter_automation_state (Evoral::Parameter (GainAutomation), as);
+       if (_amp) {
+               _amp->set_parameter_automation_state (Evoral::Parameter (GainAutomation), as);
+       } else if (_control) {
+               _control->set_automation_state (as);
+               _session->set_dirty ();
+       }
 }
 
 void
@@ -645,7 +653,7 @@ void
 GainMeterBase::update_gain_sensitive ()
 {
        bool x = !(_control->alist()->automation_state() & Play);
-       static_cast<Gtkmm2ext::SliderController*>(gain_slider)->set_sensitive (x);
+       static_cast<ArdourWidgets::SliderController*>(gain_slider)->set_sensitive (x);
 }
 
 gint
@@ -731,7 +739,7 @@ GainMeterBase::amp_start_touch ()
 void
 GainMeterBase::amp_stop_touch ()
 {
-       _control->stop_touch (false, _control->session().transport_frame());
+       _control->stop_touch (_control->session().transport_frame());
        effective_gain_display ();
 }
 
@@ -776,16 +784,19 @@ GainMeterBase::_astate_string (AutoState state, bool shrt)
 
        switch (state) {
        case ARDOUR::Off:
-               sstr = (shrt ? "M" : _("M"));
+               sstr = (shrt ? "M" : S_("Manual|M"));
                break;
        case Play:
-               sstr = (shrt ? "P" : _("P"));
+               sstr = (shrt ? "P" : S_("Play|P"));
                break;
        case Touch:
-               sstr = (shrt ? "T" : _("T"));
+               sstr = (shrt ? "T" : S_("Trim|T"));
+               break;
+       case Latch:
+               sstr = (shrt ? "L" : S_("Latch|L"));
                break;
        case Write:
-               sstr = (shrt ? "W" : _("W"));
+               sstr = (shrt ? "W" : S_("Write|W"));
                break;
        }