French translation update - fixes
[ardour.git] / gtk2_ardour / level_meter.cc
index d9f31303dd9d51a919b2e257a147e8e2b7f667db..70e922bdb30625fcd82cf1658e8587026453770c 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;
@@ -51,7 +51,9 @@ LevelMeterBase::LevelMeterBase (Session* s, PBD::EventLoop::InvalidationRecord*
        , max_peak (minus_infinity())
        , meter_type (MeterPeak)
        , visible_meter_type (MeterType(0))
-       , visible_meter_count (0)
+       , midi_count (0)
+       , meter_count (0)
+       , max_visible_meters (0)
        , color_changed (false)
 {
        set_session (s);
@@ -230,7 +232,18 @@ LevelMeterBase::hide_all_meters ()
                        (*i).packed = false;
                }
        }
-       visible_meter_count = 0;
+       meter_count = 0;
+}
+
+void
+LevelMeterBase::set_max_audio_meter_count (uint32_t cnt)
+{
+       if (cnt == max_visible_meters) {
+               return;
+       }
+       color_changed = true; // force re-setup
+       max_visible_meters = cnt;
+       setup_meters (meter_length, regular_meter_width, thin_meter_width);
 }
 
 void
@@ -242,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;
@@ -264,7 +277,8 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
        width = rint (width * UIConfiguration::instance().get_ui_scale());
 
        if (   meters.size() > 0
-           && nmeters == visible_meter_count
+           && nmidi == midi_count
+           && nmeters == meter_count
            && meters[0].width == width
            && meters[0].length == len
            && !color_changed
@@ -277,7 +291,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                        (meters.size() > 0) ? "yes" : "no",
                        (meters.size() > 0 &&  meters[0].width == width) ? "yes" : "no",
                        (meters.size() > 0 &&  meters[0].length == len) ? "yes" : "no",
-                       (nmeters == visible_meter_count) ? "yes" : "no",
+                       (nmeters == meter_count) ? "yes" : "no",
                        (meter_type == visible_meter_type) ? "yes" : "no",
                        !color_changed ? "yes" : "no"
                        );
@@ -299,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");
@@ -438,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;
@@ -459,13 +473,18 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
 
                //pack_end (*meters[n].meter, false, false);
                mtr_pack (*meters[n].meter);
-               meters[n].meter->show_all ();
                meters[n].packed = true;
+               if (max_visible_meters == 0 || (uint32_t) n < max_visible_meters + nmidi) {
+                       meters[n].meter->show_all ();
+               } else {
+                       meters[n].meter->hide ();
+               }
        }
        //show();
        color_changed = false;
        visible_meter_type = meter_type;
-       visible_meter_count = nmeters;
+       midi_count = nmidi;
+       meter_count = nmeters;
 }
 
 void