prepare meter type unification
authorRobin Gareus <robin@gareus.org>
Sun, 7 Jul 2013 11:34:36 +0000 (13:34 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 10 Jul 2013 13:27:13 +0000 (15:27 +0200)
gtk2_ardour/level_meter.cc
gtk2_ardour/level_meter.h
libs/ardour/ardour/meter.h
libs/ardour/meter.cc

index 36a469f35cb3147799093fad51b49a9155d03f55..3d91b758789f547c05f55d74045ffc15167bd4b1 100644 (file)
@@ -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());
        }
 }
 
@@ -155,6 +154,13 @@ LevelMeter::configuration_changed (ChanCount /*in*/, ChanCount /*out*/)
        setup_meters (meter_length, regular_meter_width, thin_meter_width);
 }
 
+void
+LevelMeter::meter_type_changed (MeterType t)
+{
+       meter_type = t;
+       MeterTypeChanged(t);
+}
+
 void
 LevelMeter::hide_all_meters ()
 {
index 0da8ed2a8bc723cf17b4b722e7e409520514f995..ead63aa50b8f090517a8744fc7bed53a9eab1aa7 100644 (file)
@@ -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;
index 001178a226eee51e0cf6247a391429e9dd6afce4..31ebc76179800e925656f6548ee0b0b0dfc48038 100644 (file)
@@ -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;
 
index a3390f9d05e43c077d72f4870a6c6e2d35fba94b..c33214332472f2d25b64a7f4be89f7638cffb53b 100644 (file)
@@ -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&