Only show user-presets in favorite sidebar
[ardour.git] / gtk2_ardour / level_meter.cc
index 114c28c708756e27d152edf060fb60fa4e776523..3b73f4c37c0f6f5dcb8a8b8216c925870ea56dae 100644 (file)
 #include <limits.h>
 
 #include "ardour/meter.h"
+#include "ardour/logmeter.h"
 
 #include <gtkmm2ext/utils.h>
 #include "pbd/fastlog.h"
 
 #include "level_meter.h"
 #include "utils.h"
-#include "logmeter.h"
 #include "gui_thread.h"
 #include "keyboard.h"
 #include "public_editor.h"
 #include "ui_config.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
-using namespace Gtkmm2ext;
+using namespace ArdourWidgets;
 using namespace Gtk;
 using namespace std;
 
@@ -49,8 +49,9 @@ LevelMeterBase::LevelMeterBase (Session* s, PBD::EventLoop::InvalidationRecord*
        , meter_length (0)
        , thin_meter_width(2)
        , max_peak (minus_infinity())
-       , meter_type (MeterPeak)
+       , _meter_type (MeterPeak)
        , visible_meter_type (MeterType(0))
+       , midi_count (0)
        , meter_count (0)
        , max_visible_meters (0)
        , color_changed (false)
@@ -149,24 +150,24 @@ LevelMeterBase::update_meters ()
                        if (n < nmidi) {
                                (*i).meter->set (_meter->meter_level (n, MeterPeak));
                        } else {
-                               const float peak = _meter->meter_level (n, meter_type);
-                               if (meter_type == MeterPeak) {
+                               const float peak = _meter->meter_level (n, _meter_type);
+                               if (_meter_type == MeterPeak) {
                                        (*i).meter->set (log_meter (peak));
-                               } else if (meter_type == MeterPeak0dB) {
+                               } else if (_meter_type == MeterPeak0dB) {
                                        (*i).meter->set (log_meter0dB (peak));
-                               } else if (meter_type == MeterIEC1NOR) {
+                               } else if (_meter_type == MeterIEC1NOR) {
                                        (*i).meter->set (meter_deflect_nordic (peak + meter_lineup(0)));
-                               } else if (meter_type == MeterIEC1DIN) {
+                               } else if (_meter_type == MeterIEC1DIN) {
                                        (*i).meter->set (meter_deflect_din (peak + meter_lineup_cfg(UIConfiguration::instance().get_meter_line_up_din(), 3.0)));
-                               } else if (meter_type == MeterIEC2BBC || meter_type == MeterIEC2EBU) {
+                               } else if (_meter_type == MeterIEC2BBC || _meter_type == MeterIEC2EBU) {
                                        (*i).meter->set (meter_deflect_ppm (peak + meter_lineup(0)));
-                               } else if (meter_type == MeterVU) {
+                               } else if (_meter_type == MeterVU) {
                                        (*i).meter->set (meter_deflect_vu (peak + vu_standard() + meter_lineup(0)));
-                               } else if (meter_type == MeterK12) {
+                               } else if (_meter_type == MeterK12) {
                                        (*i).meter->set (meter_deflect_k (peak, 12), meter_deflect_k(_meter->meter_level(n, MeterPeak), 12));
-                               } else if (meter_type == MeterK14) {
+                               } else if (_meter_type == MeterK14) {
                                        (*i).meter->set (meter_deflect_k (peak, 14), meter_deflect_k(_meter->meter_level(n, MeterPeak), 14));
-                               } else if (meter_type == MeterK20) {
+                               } else if (_meter_type == MeterK20) {
                                        (*i).meter->set (meter_deflect_k (peak, 20), meter_deflect_k(_meter->meter_level(n, MeterPeak), 20));
                                } else { // RMS
                                        (*i).meter->set (log_meter (peak), log_meter(_meter->meter_level(n, MeterPeak)));
@@ -217,7 +218,7 @@ LevelMeterBase::configuration_changed (ChanCount /*in*/, ChanCount /*out*/)
 void
 LevelMeterBase::meter_type_changed (MeterType t)
 {
-       meter_type = t;
+       _meter_type = t;
        setup_meters (meter_length, regular_meter_width, thin_meter_width);
        MeterTypeChanged(t);
 }
@@ -254,7 +255,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                return; /* do it later or never */
        }
 
-       int32_t nmidi = _meter->input_streams().n_midi();
+       uint32_t nmidi = _meter->input_streams().n_midi();
        uint32_t nmeters = _meter->input_streams().n_total();
        regular_meter_width = initial_width;
        thin_meter_width = thin_width;
@@ -276,11 +277,12 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
        width = rint (width * UIConfiguration::instance().get_ui_scale());
 
        if (   meters.size() > 0
+           && nmidi == midi_count
            && nmeters == meter_count
            && meters[0].width == width
            && meters[0].length == len
            && !color_changed
-           && meter_type == visible_meter_type) {
+           && _meter_type == visible_meter_type) {
                return;
        }
 
@@ -290,7 +292,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                        (meters.size() > 0 &&  meters[0].width == width) ? "yes" : "no",
                        (meters.size() > 0 &&  meters[0].length == len) ? "yes" : "no",
                        (nmeters == meter_count) ? "yes" : "no",
-                       (meter_type == visible_meter_type) ? "yes" : "no",
+                       (_meter_type == visible_meter_type) ? "yes" : "no",
                        !color_changed ? "yes" : "no"
                        );
 #endif
@@ -311,7 +313,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                b[1] = UIConfiguration::instance().color ("meter background top");
                b[2] = 0x991122ff; // red highlight gradient Bot
                b[3] = 0x551111ff; // red highlight gradient Top
-               if (n < nmidi) {
+               if ((uint32_t) n < nmidi) {
                        c[0] = UIConfiguration::instance().color ("midi meter color0");
                        c[1] = UIConfiguration::instance().color ("midi meter color1");
                        c[2] = UIConfiguration::instance().color ("midi meter color2");
@@ -338,7 +340,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                        c[8] = UIConfiguration::instance().color ("meter color8");
                        c[9] = UIConfiguration::instance().color ("meter color9");
 
-                       switch (meter_type) {
+                       switch (_meter_type) {
                                case MeterK20:
                                        stp[0] = 115.0 * meter_deflect_k(-40, 20);  //-20
                                        stp[1] = 115.0 * meter_deflect_k(-20, 20);  //  0
@@ -450,7 +452,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                                }
                        }
                }
-               if (meters[n].width != width || meters[n].length != len || color_changed || meter_type != visible_meter_type) {
+               if (meters[n].width != width || meters[n].length != len || color_changed || _meter_type != visible_meter_type || nmidi != midi_count) {
                        bool hl = meters[n].meter ? meters[n].meter->get_highlight() : false;
                        meters[n].packed = false;
                        delete meters[n].meter;
@@ -480,14 +482,15 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
        }
        //show();
        color_changed = false;
-       visible_meter_type = meter_type;
+       visible_meter_type = _meter_type;
+       midi_count = nmidi;
        meter_count = nmeters;
 }
 
 void
-LevelMeterBase::set_type(MeterType t)
+LevelMeterBase::set_meter_type(MeterType t)
 {
-       meter_type = t;
+       _meter_type = t;
        _meter->set_type(t);
 }