a-fluidsynth: implement LV2_BANKPATCH__notify
[ardour.git] / gtk2_ardour / meterbridge.h
index e8ab97d93bbec10f984fd2ea91fa87bd5c94322f..b741f6fd74f9f67c31cc9c55fb503ee25ecdfd72 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef __ardour_meterbridge_h__
 #define __ardour_meterbridge_h__
 
+#include <glibmm/thread.h>
+
 #include <gtkmm/box.h>
 #include <gtkmm/scrolledwindow.h>
 #include <gtkmm/label.h>
@@ -42,7 +44,7 @@ class Meterbridge :
        public ARDOUR::SessionHandlePtr,
        public Gtkmm2ext::VisibilityTracker
 {
-  public:
+public:
        static Meterbridge* instance();
        ~Meterbridge();
 
@@ -54,7 +56,7 @@ class Meterbridge :
        void show_window ();
        bool hide_window (GdkEventAny *ev);
 
-  private:
+private:
        Meterbridge ();
        static Meterbridge* _instance;
 
@@ -76,11 +78,11 @@ class Meterbridge :
 
        void add_strips (ARDOUR::RouteList&);
        void remove_strip (MeterStrip *);
-       void update_metrics ();
 
        void session_going_away ();
-       void sync_order_keys (ARDOUR::RouteSortOrderKey src);
+       void sync_order_keys ();
        void resync_order ();
+       mutable Glib::Threads::Mutex _resync_mutex;
 
        struct MeterBridgeStrip {
                MeterStrip *s;
@@ -92,7 +94,8 @@ class Meterbridge :
                }
        };
 
-       struct MeterOrderRouteSorter {
+       struct MeterOrderRouteSorter
+       {
                bool operator() (struct MeterBridgeStrip ma, struct MeterBridgeStrip mb) {
                        boost::shared_ptr<ARDOUR::Route> a = ma.s->route();
                        boost::shared_ptr<ARDOUR::Route> b = mb.s->route();
@@ -105,7 +108,7 @@ class Meterbridge :
                                /* everything comes before b */
                                return true;
                        }
-                       return a->order_key (ARDOUR::MixerSort) < b->order_key (ARDOUR::MixerSort);
+                       return ARDOUR::Stripable::Sorter (true) (a, b);
                }
        };
 
@@ -113,6 +116,7 @@ class Meterbridge :
 
        MeterStrip metrics_left;
        MeterStrip metrics_right;
+       std::vector<MeterStrip *> _metrics;
 
        Gtk::VBox metrics_vpacker_left;
        Gtk::VBox metrics_vpacker_right;
@@ -144,6 +148,12 @@ class Meterbridge :
 
        void parameter_changed (std::string const & p);
        void on_theme_changed ();
+
+       void on_scroll ();
+       sigc::connection scroll_connection;
+
+       int _mm_left, _mm_right;
+       ARDOUR::MeterType _mt_left, _mt_right;
 };
 
 #endif