diff options
-rw-r--r-- | gtk2_ardour/meter_strip.cc | 39 | ||||
-rw-r--r-- | gtk2_ardour/meter_strip.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/meterbridge.cc | 29 |
3 files changed, 62 insertions, 7 deletions
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index fc092ae7cc..f1bd5bee89 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -26,6 +26,9 @@ #include "ardour/route_group.h" #include "ardour/meter.h" +#include "ardour/audio_track.h" +#include "ardour/midi_track.h" + #include <gtkmm2ext/gtk_ui.h> #include <gtkmm2ext/utils.h> @@ -55,11 +58,16 @@ MeterStrip::MeterStrip (Meterbridge& mtr, Session* sess, boost::shared_ptr<ARDOU { set_spacing(2); + int meter_width = 6; + if (_route->shared_peak_meter()->input_streams().n_total() == 1) { + meter_width = 12; + } + // add level meter level_meter = new LevelMeter(sess); level_meter->set_meter (_route->shared_peak_meter().get()); level_meter->clear_meters(); - level_meter->setup_meters (350, 6); + level_meter->setup_meters (350, meter_width, 6); level_meter->pack_start (meter_metric_area, false, false); Gtk::Alignment *meter_align = Gtk::manage (new Gtk::Alignment()); @@ -71,13 +79,17 @@ MeterStrip::MeterStrip (Meterbridge& mtr, Session* sess, boost::shared_ptr<ARDOU // * fixed-height labels (or table layout) // * print lables at angle (allow longer text) label.set_text(_route->name().c_str()); + label.set_name("MeterbridgeLabel"); +#if 0 label.set_ellipsize(Pango::ELLIPSIZE_MIDDLE); label.set_max_width_chars(7); label.set_width_chars(7); label.set_alignment(0.5, 0.5); - label.set_name("MeterbridgeLabel"); - //ellipsize & angle are incompatible :( - //label.property_angle().set_value(90.0); +#else //ellipsize & angle are incompatible :( + label.set_angle(90.0); + label.set_alignment(0.5, 0.0); +#endif + label.set_size_request(12, 36); pack_start(*meter_align, true, true); pack_start (label, false, false); @@ -132,6 +144,16 @@ MeterStrip::fast_update () } void +MeterStrip::display_metrics (bool show) +{ + if (show) { + meter_metric_area.show(); + } else { + meter_metric_area.hide(); + } +} + +void MeterStrip::on_theme_changed() { style_changed = true; @@ -150,8 +172,13 @@ MeterStrip::meter_configuration_changed (ChanCount c) } } - // TODO draw Inactive routes and busses with different styles - if (type == (1 << DataType::AUDIO)) { + // TODO draw Inactive routes or busses with different styles + if (boost::dynamic_pointer_cast<AudioTrack>(_route) == 0 + && boost::dynamic_pointer_cast<MidiTrack>(_route) == 0 + ) { + meter_metric_area.set_name ("AudioBusMetrics"); + } + else if (type == (1 << DataType::AUDIO)) { meter_metric_area.set_name ("AudioTrackMetrics"); } else if (type == (1 << DataType::MIDI)) { diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index 653e045a73..a431f6b49b 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -49,6 +49,7 @@ class MeterStrip : public Gtk::VBox ~MeterStrip (); void fast_update (); + void display_metrics (bool); boost::shared_ptr<ARDOUR::Route> route() { return _route; } static PBD::Signal1<void,MeterStrip*> CatchDeletion; diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 47f12b331f..70f0c80dba 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -38,6 +38,9 @@ #include "ardour/route_group.h" #include "ardour/session.h" +#include "ardour/audio_track.h" +#include "ardour/midi_track.h" + #include "meterbridge.h" #include "monitor_section.h" @@ -137,7 +140,7 @@ Meterbridge::Meterbridge () MeterStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Meterbridge::remove_strip, this, _1), gui_context()); - global_hpacker.set_spacing(1); + global_hpacker.set_spacing(3); scroller.add (global_hpacker); scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER); global_vpacker.pack_start (scroller, true, true); @@ -405,6 +408,17 @@ Meterbridge::add_strips (RouteList& routes) continue; } + if (route->is_master()) { + /* always show master */ + } + else + if (boost::dynamic_pointer_cast<AudioTrack>(route) == 0 + && boost::dynamic_pointer_cast<MidiTrack>(route) == 0 + ) { + // non-master bus + if (0) continue; // TODO allow to skip busses + } + strip = new MeterStrip (*this, _session, route); strips.push_back (strip); @@ -437,6 +451,19 @@ Meterbridge::sync_order_keys (RouteSortOrderKey src) int pos = 0; for (list<MeterStrip *>::iterator i = copy.begin(); i != copy.end(); ++i) { +#if 0 // TODO subscribe to route active,inactive changes + if (! (*i)->route()->active()) { + (*i)->hide(); + } else { + (*i)->show(); + } +#endif + + if (pos%8 == 0) { + (*i)->display_metrics(true); + } else { + (*i)->display_metrics(false); + } global_hpacker.reorder_child(*(*i), pos++); } } |