summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-07 13:34:36 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:13 +0200
commit58b325de319ab1d807511783f55a7fe3748e8614 (patch)
tree29c90d2a0242ebfd51b46093ec88890cb668db4e
parent2277da6e6c83c2933f4452239a78910967ecba4e (diff)
prepare meter type unification
-rw-r--r--gtk2_ardour/level_meter.cc14
-rw-r--r--gtk2_ardour/level_meter.h3
-rw-r--r--libs/ardour/ardour/meter.h10
-rw-r--r--libs/ardour/meter.cc7
4 files changed, 21 insertions, 13 deletions
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc
index 36a469f35c..3d91b75878 100644
--- a/gtk2_ardour/level_meter.cc
+++ b/gtk2_ardour/level_meter.cc
@@ -44,10 +44,6 @@ using namespace Gtkmm2ext;
using namespace Gtk;
using namespace std;
-//sigc::signal<void> LevelMeter::ResetAllPeakDisplays;
-//sigc::signal<void,RouteGroup*> LevelMeter::ResetGroupPeakDisplays;
-
-
LevelMeter::LevelMeter (Session* s)
: _meter (0)
, meter_length (0)
@@ -79,10 +75,13 @@ void
LevelMeter::set_meter (PeakMeter* meter)
{
_configuration_connection.disconnect();
+ _meter_type_connection.disconnect();
+
_meter = meter;
if (_meter) {
_meter->ConfigurationChanged.connect (_configuration_connection, invalidator (*this), boost::bind (&LevelMeter::configuration_changed, this, _1, _2), gui_context());
+ _meter->TypeChanged.connect (_meter_type_connection, invalidator (*this), boost::bind (&LevelMeter::meter_type_changed, this, _1), gui_context());
}
}
@@ -156,6 +155,13 @@ LevelMeter::configuration_changed (ChanCount /*in*/, ChanCount /*out*/)
}
void
+LevelMeter::meter_type_changed (MeterType t)
+{
+ meter_type = t;
+ MeterTypeChanged(t);
+}
+
+void
LevelMeter::hide_all_meters ()
{
for (vector<MeterInfo>::iterator i = meters.begin(); i != meters.end(); ++i) {
diff --git a/gtk2_ardour/level_meter.h b/gtk2_ardour/level_meter.h
index 0da8ed2a8b..ead63aa50b 100644
--- a/gtk2_ardour/level_meter.h
+++ b/gtk2_ardour/level_meter.h
@@ -72,6 +72,7 @@ class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr
/** Emitted in the GUI thread when a button is pressed over the meter */
PBD::Signal1<bool, GdkEventButton *> ButtonPress;
+ PBD::Signal1<void, ARDOUR::MeterType> MeterTypeChanged;
private:
ARDOUR::PeakMeter* _meter;
@@ -102,6 +103,7 @@ class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr
ARDOUR::MeterType meter_type;
PBD::ScopedConnection _configuration_connection;
+ PBD::ScopedConnection _meter_type_connection;
PBD::ScopedConnection _parameter_connection;
void hide_all_meters ();
@@ -110,6 +112,7 @@ class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr
void parameter_changed (std::string);
void configuration_changed (ARDOUR::ChanCount in, ARDOUR::ChanCount out);
+ void meter_type_changed (ARDOUR::MeterType);
void on_theme_changed ();
bool style_changed;
diff --git a/libs/ardour/ardour/meter.h b/libs/ardour/ardour/meter.h
index 001178a226..31ebc76179 100644
--- a/libs/ardour/ardour/meter.h
+++ b/libs/ardour/ardour/meter.h
@@ -82,14 +82,6 @@ public:
}
}
- float max_peak_power (uint32_t n) {
- if (n < _max_peak_power.size()) {
- return _max_peak_power[n];
- } else {
- return minus_infinity();
- }
- }
-
float meter_level (uint32_t n, MeterType type);
void set_type(MeterType t);
@@ -97,6 +89,8 @@ public:
XMLNode& state (bool full);
+ PBD::Signal1<void, MeterType> TypeChanged;
+
private:
friend class IO;
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index a3390f9d05..c332143324 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -297,7 +297,11 @@ PeakMeter::meter_level(uint32_t n, MeterType type) {
}
default:
case MeterMaxPeak:
- return max_peak_power(n);
+ if (n < _max_peak_power.size()) {
+ return _max_peak_power[n];
+ } else {
+ return minus_infinity();
+ }
}
}
void
@@ -311,6 +315,7 @@ PeakMeter::set_type(MeterType t)
_kmeter[n]->reset();
}
}
+ TypeChanged(t);
}
XMLNode&