X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmeterbridge.h;h=1709455ae4cf735f0d418d85875d732552d31165;hb=db9fbac7b5d9eaf7be2b93e9638d719582259e20;hp=56ace71aa959ddcbb3b62c3285ea14752ba2a225;hpb=eb0f1d312370357bd798a4e1c5b2e62c09dcb659;p=ardour.git diff --git a/gtk2_ardour/meterbridge.h b/gtk2_ardour/meterbridge.h index 56ace71aa9..1709455ae4 100644 --- a/gtk2_ardour/meterbridge.h +++ b/gtk2_ardour/meterbridge.h @@ -20,6 +20,8 @@ #ifndef __ardour_meterbridge_h__ #define __ardour_meterbridge_h__ +#include + #include #include #include @@ -76,16 +78,44 @@ 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 (); - - std::list strips; + mutable Glib::Threads::Mutex _resync_mutex; + + struct MeterBridgeStrip { + MeterStrip *s; + bool visible; + + MeterBridgeStrip(MeterStrip *ss) { + s = ss; + visible = true; + } + }; + + struct MeterOrderRouteSorter { + bool operator() (struct MeterBridgeStrip ma, struct MeterBridgeStrip mb) { + boost::shared_ptr a = ma.s->route(); + boost::shared_ptr b = mb.s->route(); + if (a->is_master() || a->is_monitor()) { + /* "a" is a special route (master, monitor, etc), and comes + * last in the mixer ordering + */ + return false; + } else if (b->is_master() || b->is_monitor()) { + /* everything comes before b */ + return true; + } + return a->order_key () < b->order_key (); + } + }; + + std::list strips; MeterStrip metrics_left; MeterStrip metrics_right; + std::vector _metrics; Gtk::VBox metrics_vpacker_left; Gtk::VBox metrics_vpacker_right; @@ -116,6 +146,13 @@ class Meterbridge : void on_size_request (Gtk::Requisition*); 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