, gain_automation_state_button ("")
, style_changed (false)
, dpi_changed (false)
- , _is_midi (false)
+ , _data_type (DataType::AUDIO)
{
using namespace Menu_Helpers;
level_meter = new LevelMeter(_session);
+ level_meter->ButtonPress.connect_same_thread (_level_meter_connection, boost::bind (&GainMeterBase::level_meter_button_press, this, _1));
+ 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->signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeter::gain_slider_button_press));
gain_slider->signal_button_release_event().connect (sigc::mem_fun(*this, &GainMeter::gain_slider_button_release));
gain_slider->set_name ("GainFader");
gain_astate_menu.items().clear ();
- gain_astate_menu.items().push_back (MenuElem (_("Manual"),
+ gain_astate_menu.items().push_back (MenuElem (S_("Automation|Manual"),
sigc::bind (sigc::mem_fun (*(amp.get()), &Automatable::set_parameter_automation_state),
Evoral::Parameter(GainAutomation), (AutoState) Off)));
gain_astate_menu.items().push_back (MenuElem (_("Play"),
ignore_toggle = true;
if (_amp->output_streams().n_midi() == 0) {
- _is_midi = false;
+ _data_type = DataType::AUDIO;
gain_adjustment.set_lower (0.0);
gain_adjustment.set_upper (1.0);
gain_adjustment.set_step_increment (0.01);
gain_adjustment.set_page_increment (0.1);
gain_slider->set_default_value (gain_to_slider_position (1));
} else {
- _is_midi = true;
+ _data_type = DataType::MIDI;
gain_adjustment.set_lower (0.0);
gain_adjustment.set_upper (2.0);
gain_adjustment.set_step_increment (0.05);
float v = gain_adjustment.get_value();
- if (!_is_midi) {
+ switch (_data_type) {
+ case DataType::AUDIO:
if (v == 0.0) {
strcpy (buf, _("-inf"));
} else {
snprintf (buf, sizeof (buf), "%.1f", accurate_coefficient_to_dB (slider_position_to_gain_with_max (v, Config->get_max_gain())));
}
- } else {
+ break;
+ case DataType::MIDI:
snprintf (buf, sizeof (buf), "%.1f", v);
+ break;
}
gain_display.set_text (buf);
void
GainMeterBase::gain_adjusted ()
{
+ gain_t value = 0;
+
+ switch (_data_type) {
+ case DataType::AUDIO:
+ value = slider_position_to_gain_with_max (gain_adjustment.get_value(), Config->get_max_gain());
+ break;
+ case DataType::MIDI:
+ value = gain_adjustment.get_value ();
+ break;
+ }
+
if (!ignore_toggle) {
if (_route && _route->amp() == _amp) {
- if (_is_midi) {
- _route->set_gain (gain_adjustment.get_value(), this);
- } else {
- _route->set_gain (slider_position_to_gain_with_max (gain_adjustment.get_value(), Config->get_max_gain()), this);
- }
+ _route->set_gain (value, this);
} else {
- _amp->set_gain (slider_position_to_gain_with_max (gain_adjustment.get_value(), Config->get_max_gain()), this);
+ _amp->set_gain (value, this);
}
}
void
GainMeterBase::effective_gain_display ()
{
- float value;
+ float value = 0.0;
- if (!_is_midi) {
+ switch (_data_type) {
+ case DataType::AUDIO:
value = gain_to_slider_position_with_max (_amp->gain(), Config->get_max_gain());
- } else {
+ break;
+ case DataType::MIDI:
value = _amp->gain ();
+ break;
}
if (gain_adjustment.get_value() != value) {
}
bool
-GainMeterBase::gain_slider_button_release (GdkEventButton* ev)
+GainMeterBase::gain_slider_button_release (GdkEventButton*)
{
_amp->gain_control()->stop_touch (false, _amp->session().transport_frame());
return true;
}
}
+bool
+GainMeterBase::level_meter_button_press (GdkEventButton* ev)
+{
+ return LevelMeterButtonPress (ev); /* EMIT SIGNAL */
+}
+
void
GainMeter::meter_configuration_changed (ChanCount c)
{
style_changed = true;
meter_metric_area.queue_draw ();
}
+