overhaul meterbridge:
* rotate labels, fix size * identical total width for mono + stereo meters * show metric area only every 8th meter * ...
This commit is contained in:
parent
446aed52f3
commit
bc2ff6a554
|
@ -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);
|
||||
|
@ -131,6 +143,16 @@ MeterStrip::fast_update ()
|
|||
// TODO peak indicator if mpeak > 0
|
||||
}
|
||||
|
||||
void
|
||||
MeterStrip::display_metrics (bool show)
|
||||
{
|
||||
if (show) {
|
||||
meter_metric_area.show();
|
||||
} else {
|
||||
meter_metric_area.hide();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MeterStrip::on_theme_changed()
|
||||
{
|
||||
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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++);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue