X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Flevel_meter.h;h=a355d7d28540fedc065e19afc74bc97b2e25173d;hb=c123829c0a8d483f4c53c2231e04c51e41e604df;hp=6b3c33cac514ff113c6889e25801824a527f0195;hpb=f0748535a5023d132eff03999a705a3e56c516db;p=ardour.git diff --git a/gtk2_ardour/level_meter.h b/gtk2_ardour/level_meter.h index 6b3c33cac5..a355d7d285 100644 --- a/gtk2_ardour/level_meter.h +++ b/gtk2_ardour/level_meter.h @@ -37,6 +37,7 @@ #include #include #include +#include #include "enums.h" @@ -44,18 +45,16 @@ namespace ARDOUR { class Session; class PeakMeter; } -namespace Gtkmm2ext { - class FastMeter; -} namespace Gtk { class Menu; } -class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr +class LevelMeterBase : public ARDOUR::SessionHandlePtr { public: - LevelMeter (ARDOUR::Session*); - ~LevelMeter (); + LevelMeterBase (ARDOUR::Session*, PBD::EventLoop::InvalidationRecord* ir, + Gtkmm2ext::FastMeter::Orientation o = Gtkmm2ext::FastMeter::Vertical); + virtual ~LevelMeterBase (); virtual void set_meter (ARDOUR::PeakMeter* meter); @@ -63,13 +62,27 @@ class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr float update_meters (); void update_meters_falloff (); - void clear_meters (); + void clear_meters (bool reset_highlight = true); void hide_meters (); - void setup_meters (int len=0, int width=3); + void setup_meters (int len=0, int width=3, int thin=2); + + void set_type (ARDOUR::MeterType); + ARDOUR::MeterType get_type () { return meter_type; } + + /** Emitted in the GUI thread when a button is pressed over the meter */ + PBD::Signal1 ButtonPress; + PBD::Signal1 ButtonRelease; + PBD::Signal1 MeterTypeChanged; + + protected: + virtual void mtr_pack(Gtk::Widget &w) = 0; + virtual void mtr_remove(Gtk::Widget &w) = 0; private: + PBD::EventLoop::InvalidationRecord* parent_invalidator; ARDOUR::PeakMeter* _meter; - + Gtkmm2ext::FastMeter::Orientation _meter_orientation; + Width _width; struct MeterInfo { @@ -77,29 +90,36 @@ class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr gint16 width; int length; bool packed; + float max_peak; MeterInfo() { meter = 0; width = 0; length = 0; packed = false; + max_peak = -INFINITY; } }; guint16 regular_meter_width; int meter_length; - static const guint16 thin_meter_width = 2; + guint16 thin_meter_width; std::vector meters; float max_peak; + ARDOUR::MeterType meter_type; + ARDOUR::MeterType visible_meter_type; PBD::ScopedConnection _configuration_connection; + PBD::ScopedConnection _meter_type_connection; PBD::ScopedConnection _parameter_connection; void hide_all_meters (); - gint meter_button_release (GdkEventButton*, uint32_t); + bool meter_button_press (GdkEventButton *); + bool meter_button_release (GdkEventButton *); void parameter_changed (std::string); void configuration_changed (ARDOUR::ChanCount in, ARDOUR::ChanCount out); + void meter_type_changed (ARDOUR::MeterType); void on_theme_changed (); bool style_changed; @@ -107,5 +127,27 @@ class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr void color_handler (); }; +class LevelMeterHBox : public LevelMeterBase, public Gtk::HBox +{ + public: + LevelMeterHBox (ARDOUR::Session*); + ~LevelMeterHBox(); + + protected: + void mtr_pack(Gtk::Widget &w); + void mtr_remove(Gtk::Widget &w); +}; + +class LevelMeterVBox : public LevelMeterBase, public Gtk::VBox +{ + public: + LevelMeterVBox (ARDOUR::Session*); + ~LevelMeterVBox(); + + protected: + void mtr_pack(Gtk::Widget &w); + void mtr_remove(Gtk::Widget &w); +}; + #endif /* __ardour_gtk_track_meter_h__ */