#include <gtkmm2ext/fastmeter.h>
#include <gtkmm2ext/barcontroller.h>
#include <gtkmm2ext/gtk_ui.h>
-#include "midi++/manager.h"
#include "pbd/fastlog.h"
#include "pbd/stacktrace.h"
gain_slider = manage (new VSliderController (&gain_adjustment, fader_length, fader_girth, false));
}
- level_meter = new LevelMeter(_session);
+ level_meter = new LevelMeterHBox(_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));
switch (_width) {
case Wide:
+ meter_ticks1_area.show();
+ meter_ticks2_area.show();
+ meter_metric_area.show();
if (_route && _route->shared_peak_meter()->input_streams().n_total() == 1) {
meter_width = 10;
}
break;
case Narrow:
- meter_width = 2;
+ meter_ticks1_area.hide();
+ meter_ticks2_area.hide();
+ meter_metric_area.hide();
break;
}
level_meter->setup_meters(len, meter_width);
void
GainMeterBase::set_meter_strip_name (const char * name)
{
+ char tmp[256];
meter_metric_area.set_name (name);
- meter_ticks1_area.set_name (name);
- meter_ticks2_area.set_name (name);
+ sprintf(tmp, "Mark%sLeft", name);
+ meter_ticks1_area.set_name (tmp);
+ sprintf(tmp, "Mark%sRight", name);
+ meter_ticks2_area.set_name (tmp);
}
void
}
}
-void GainMeterBase::color_handler(bool dpi)
+void GainMeterBase::color_handler(bool /*dpi*/)
{
setup_meters();
}
meter_ticks2_area.signal_expose_event().connect (
sigc::mem_fun(*this, &GainMeter::meter_ticks2_expose));
- meter_hbox.pack_start (meter_metric_area, false, false);
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,
}
+ if (_route) {
+ _route->active_changed.connect (model_connections, invalidator (*this), boost::bind (&GainMeter::route_active_changed, this), gui_context ());
+ }
+
/*
if we have a non-hidden route (ie. we're not the click or the auditioner),
pack some route-dependent stuff.
if (_width == Wide)
return max(sz.width * 2, min_w * 2) + 6;
else
- return sz.width + min_w + 12;
+ return sz.width + min_w + 6;
}
gint
GainMeter::meter_metrics_expose (GdkEventExpose *ev)
{
- return meter_expose_metrics(ev, _types, &meter_metric_area);
+ if (!_route) {
+ if (_types.empty()) { _types.push_back(DataType::AUDIO); }
+ return meter_expose_metrics(ev, MeterPeak, _types, &meter_metric_area);
+ }
+ return meter_expose_metrics(ev, _route->meter_type(), _types, &meter_metric_area);
}
gint
GainMeter::meter_ticks1_expose (GdkEventExpose *ev)
{
- return meter_expose_ticks(ev, _types, &meter_ticks1_area);
+ if (!_route) {
+ if (_types.empty()) { _types.push_back(DataType::AUDIO); }
+ return meter_expose_ticks(ev, MeterPeak, _types, &meter_ticks1_area);
+ }
+ return meter_expose_ticks(ev, _route->meter_type(), _types, &meter_ticks1_area);
}
gint
GainMeter::meter_ticks2_expose (GdkEventExpose *ev)
{
- return meter_expose_ticks(ev, _types, &meter_ticks2_area);
+ if (!_route) {
+ if (_types.empty()) { _types.push_back(DataType::AUDIO); }
+ return meter_expose_ticks(ev, MeterPeak, _types, &meter_ticks2_area);
+ }
+ return meter_expose_ticks(ev, _route->meter_type(), _types, &meter_ticks2_area);
}
boost::shared_ptr<PBD::Controllable>
set_meter_strip_name ("AudioBusMetricsInactive");
}
}
- else if (type == (1 << DataType::AUDIO)) {
+ else if (
+ (type == (1 << DataType::MIDI))
+ || (_route && boost::dynamic_pointer_cast<MidiTrack>(_route))
+ ) {
if (!_route || _route->active()) {
- set_meter_strip_name ("AudioTrackMetrics");
+ set_meter_strip_name ("MidiTrackMetrics");
} else {
- set_meter_strip_name ("AudioTrackMetricsInactive");
+ set_meter_strip_name ("MidiTrackMetricsInactive");
}
}
- else if (type == (1 << DataType::MIDI)) {
+ else if (type == (1 << DataType::AUDIO)) {
if (!_route || _route->active()) {
- set_meter_strip_name ("MidiTrackMetrics");
+ set_meter_strip_name ("AudioTrackMetrics");
} else {
- set_meter_strip_name ("MidiTrackMetricsInactive");
+ set_meter_strip_name ("AudioTrackMetricsInactive");
}
} else {
if (!_route || _route->active()) {
set_meter_strip_name ("AudioMidiTrackMetricsInactive");
}
}
+
+ setup_meters();
meter_clear_pattern_cache(4);
}
+void
+GainMeter::route_active_changed ()
+{
+ if (_meter) {
+ meter_configuration_changed (_meter->input_streams ());
+ }
+}
+
void
GainMeter::meter_type_changed (MeterType t)
{
_route->set_meter_type(t);
+ RedrawMetrics();
}