add convenience functions to switch meter-types.. (maybe too much?!)

This commit is contained in:
Robin Gareus 2013-07-08 02:07:40 +02:00
parent ffbc1c7a8b
commit 12780e4c8c
5 changed files with 79 additions and 4 deletions

View File

@ -44,6 +44,8 @@ sigc::signal<void,ARDOUR::Route*> ResetRoutePeakDisplays;
sigc::signal<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
sigc::signal<void> RedrawMetrics;
sigc::signal<void, int, ARDOUR::RouteGroup*, ARDOUR::MeterType> SetMeterTypeMulti;
cairo_pattern_t*
meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
{

View File

@ -32,6 +32,8 @@ extern sigc::signal<void,ARDOUR::Route*> ResetRoutePeakDisplays;
extern sigc::signal<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
extern sigc::signal<void> RedrawMetrics;
extern sigc::signal<void, int, ARDOUR::RouteGroup*, ARDOUR::MeterType> SetMeterTypeMulti;
cairo_pattern_t* meter_render_ticks (Gtk::Widget& w, std::vector<ARDOUR::DataType> types);
cairo_pattern_t* meter_render_metrics (Gtk::Widget& w, std::vector<ARDOUR::DataType> types);

View File

@ -61,6 +61,7 @@ MeterStrip::MeterStrip (int metricmode)
, RouteUI(0)
{
level_meter = 0;
_strip_type = 0;
set_spacing(2);
peakbx.set_size_request(-1, 14);
btnbox.set_size_request(-1, 16);
@ -179,6 +180,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
ResetRoutePeakDisplays.connect (sigc::mem_fun(*this, &MeterStrip::reset_route_peak_display));
ResetGroupPeakDisplays.connect (sigc::mem_fun(*this, &MeterStrip::reset_group_peak_display));
RedrawMetrics.connect (sigc::mem_fun(*this, &MeterStrip::redraw_metrics));
SetMeterTypeMulti.connect (sigc::mem_fun(*this, &MeterStrip::set_meter_type_multi));
meter_configuration_changed (_route->shared_peak_meter()->input_streams ());
@ -196,6 +198,21 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
ColorsChanged.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed));
DPIReset.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed));
Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MeterStrip::parameter_changed, this, _1), gui_context());
if (_route->is_master()) {
_strip_type = 4;
}
else if (boost::dynamic_pointer_cast<AudioTrack>(_route) == 0
&& boost::dynamic_pointer_cast<MidiTrack>(_route) == 0) {
/* non-master bus */
_strip_type = 3;
}
else if (boost::dynamic_pointer_cast<MidiTrack>(_route)) {
_strip_type = 2;
}
else {
_strip_type = 1;
}
}
MeterStrip::~MeterStrip ()
@ -456,6 +473,14 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
add_level_meter_item (items, group, _("Peak"), MeterPeak);
add_level_meter_item (items, group, _("RMS + Peak"), MeterKrms);
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Change all in Group to Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterPeak)));
items.push_back (MenuElem (_("Change all in Group to RMS + Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterKrms)));
items.push_back (MenuElem (_("Change all to Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterPeak)));
items.push_back (MenuElem (_("Change all to RMS + Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterKrms)));
items.push_back (MenuElem (_("Change same track-type to Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterPeak)));
items.push_back (MenuElem (_("Change same track-type to RMS + Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterKrms)));
m->popup (ev->button, ev->time);
_suspend_menu_callbacks = false;
}
@ -471,15 +496,33 @@ MeterStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::
}
void
MeterStrip::set_meter_type (MeterType m)
MeterStrip::set_meter_type (MeterType type)
{
if (_suspend_menu_callbacks) return;
level_meter->set_type (m);
level_meter->set_type (type);
}
void
MeterStrip::meter_type_changed (MeterType t)
MeterStrip::meter_type_changed (MeterType type)
{
_route->set_meter_type(t);
_route->set_meter_type(type);
}
void
MeterStrip::set_meter_type_multi (int what, RouteGroup* group, MeterType type)
{
switch (what) {
case -1:
if (_route && group == _route->route_group()) {
level_meter->set_type (type);
}
break;
case 0:
level_meter->set_type (type);
default:
if (what == _strip_type) {
level_meter->set_type (type);
}
break;
}
}

View File

@ -60,6 +60,8 @@ class MeterStrip : public Gtk::VBox, public RouteUI
void reset_route_peak_display (ARDOUR::Route*);
void reset_group_peak_display (ARDOUR::RouteGroup*);
void set_meter_type_multi (int, ARDOUR::RouteGroup*, ARDOUR::MeterType);
void set_metric_mode (int);
bool has_midi() { return _has_midi; }
@ -101,6 +103,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI
float max_peak;
bool _has_midi;
int _strip_type;
LevelMeter *level_meter;

View File

@ -62,6 +62,7 @@
#include "utils.h"
#include "gui_thread.h"
#include "route_group_menu.h"
#include "meter_patterns.h"
#include "i18n.h"
@ -2138,6 +2139,30 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev)
add_level_meter_item_type (items, tgroup, _("Peak"), MeterPeak);
add_level_meter_item_type (items, tgroup, _("RMS + Peak"), MeterKrms);
int _strip_type;
if (_route->is_master()) {
_strip_type = 4;
}
else if (boost::dynamic_pointer_cast<AudioTrack>(_route) == 0
&& boost::dynamic_pointer_cast<MidiTrack>(_route) == 0) {
/* non-master bus */
_strip_type = 3;
}
else if (boost::dynamic_pointer_cast<MidiTrack>(_route)) {
_strip_type = 2;
}
else {
_strip_type = 1;
}
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Change all in Group to Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterPeak)));
items.push_back (MenuElem (_("Change all in Group to RMS + Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterKrms)));
items.push_back (MenuElem (_("Change all to Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterPeak)));
items.push_back (MenuElem (_("Change all to RMS + Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterKrms)));
items.push_back (MenuElem (_("Change same track-type to Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterPeak)));
items.push_back (MenuElem (_("Change same track-type to RMS + Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterKrms)));
m->popup (ev->button, ev->time);
_suspend_menu_callbacks = false;
}