summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-08 02:07:40 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:13 +0200
commit12780e4c8c144d1b80e3aa0d2de7dadf0155bea4 (patch)
treeb893482930c11f2214873eff8bf76b3c64a0ee1f
parentffbc1c7a8b7f6b0a7ef434bd6e14f8a01e2cbd28 (diff)
add convenience functions to switch meter-types.. (maybe too much?!)
-rw-r--r--gtk2_ardour/meter_patterns.cc2
-rw-r--r--gtk2_ardour/meter_patterns.h2
-rw-r--r--gtk2_ardour/meter_strip.cc51
-rw-r--r--gtk2_ardour/meter_strip.h3
-rw-r--r--gtk2_ardour/mixer_strip.cc25
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<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)
{
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<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);
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<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;
+ }
+}
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<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;
}