#ifndef __ardour_meterbridge_h__
#define __ardour_meterbridge_h__
+#include <glibmm/thread.h>
+
#include <gtkmm/box.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/label.h>
static Meterbridge* _instance;
bool _visible;
+ bool _show_busses;
+ bool _show_master;
+ bool _show_midi;
Gtk::ScrolledWindow scroller;
+ Gtk::HBox meterarea;
Gtk::HBox global_hpacker;
Gtk::VBox global_vpacker;
void add_strips (ARDOUR::RouteList&);
void remove_strip (MeterStrip *);
- void parameter_changed (std::string const &);
-
void session_going_away ();
+ void sync_order_keys ();
+ void resync_order ();
+ 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<ARDOUR::Route> a = ma.s->route();
+ boost::shared_ptr<ARDOUR::Route> 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<MeterBridgeStrip> strips;
+
+ MeterStrip metrics_left;
+ MeterStrip metrics_right;
+ std::vector<MeterStrip *> _metrics;
+
+ Gtk::VBox metrics_vpacker_left;
+ Gtk::VBox metrics_vpacker_right;
+ Gtk::HBox metrics_spacer_left;
+ Gtk::HBox metrics_spacer_right;
+
+ static const int32_t default_width = 600;
+ static const int32_t default_height = 400;
+ static const int max_height = 1200; // == 1024 + 148 + 16 + 12 see meter_strip.cc
+ int cur_max_width;
- std::list<MeterStrip *> strips;
+ void update_title ();
- static const int32_t default_width = 300;
- static const int32_t default_height = 400;
// for restoring window geometry.
int m_root_x, m_root_y, m_width, m_height;
bool on_key_press_event (GdkEventKey*);
bool on_key_release_event (GdkEventKey*);
+ bool on_scroll_event (GdkEventScroll*);
+
+ void scroll_left ();
+ void scroll_right ();
+
+ void on_size_allocate (Gtk::Allocation&);
+ 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