From 12780e4c8c144d1b80e3aa0d2de7dadf0155bea4 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 8 Jul 2013 02:07:40 +0200 Subject: [PATCH] add convenience functions to switch meter-types.. (maybe too much?!) --- gtk2_ardour/meter_patterns.cc | 2 ++ gtk2_ardour/meter_patterns.h | 2 ++ gtk2_ardour/meter_strip.cc | 51 ++++++++++++++++++++++++++++++++--- gtk2_ardour/meter_strip.h | 3 +++ gtk2_ardour/mixer_strip.cc | 25 +++++++++++++++++ 5 files changed, 79 insertions(+), 4 deletions(-) diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc index 8b0839ab28..04ddad3b1f 100644 --- a/gtk2_ardour/meter_patterns.cc +++ b/gtk2_ardour/meter_patterns.cc @@ -44,6 +44,8 @@ sigc::signal ResetRoutePeakDisplays; sigc::signal ResetGroupPeakDisplays; sigc::signal RedrawMetrics; +sigc::signal SetMeterTypeMulti; + cairo_pattern_t* meter_render_ticks (Gtk::Widget& w, vector types) { diff --git a/gtk2_ardour/meter_patterns.h b/gtk2_ardour/meter_patterns.h index b793a9cc3c..df755f7ace 100644 --- a/gtk2_ardour/meter_patterns.h +++ b/gtk2_ardour/meter_patterns.h @@ -32,6 +32,8 @@ extern sigc::signal ResetRoutePeakDisplays; extern sigc::signal ResetGroupPeakDisplays; extern sigc::signal RedrawMetrics; +extern sigc::signal SetMeterTypeMulti; + cairo_pattern_t* meter_render_ticks (Gtk::Widget& w, std::vector types); cairo_pattern_t* meter_render_metrics (Gtk::Widget& w, std::vector types); diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index 759bdef16a..e468b21b51 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -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 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 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(_route) == 0 + && boost::dynamic_pointer_cast(_route) == 0) { + /* non-master bus */ + _strip_type = 3; + } + else if (boost::dynamic_pointer_cast(_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; + } +} diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index 9f80cfee87..6a44d19d58 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -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; diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 3afa68be79..c15d3ea221 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -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(_route) == 0 + && boost::dynamic_pointer_cast(_route) == 0) { + /* non-master bus */ + _strip_type = 3; + } + else if (boost::dynamic_pointer_cast(_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; } -- 2.30.2