X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=inline;f=gtk2_ardour%2Flevel_meter.h;h=f3ff2a8550f682d37a55d234a895c615befd7bab;hb=1f6c54a2f053caa8afec70f2acffdb7f7d73f09f;hp=dfae72a5768382084b3211c5a5b54b31f21644ee;hpb=b42213bb04031b954eda4f9b39c5f183bfb96ede;p=ardour.git diff --git a/gtk2_ardour/level_meter.h b/gtk2_ardour/level_meter.h index dfae72a576..f3ff2a8550 100644 --- a/gtk2_ardour/level_meter.h +++ b/gtk2_ardour/level_meter.h @@ -21,7 +21,6 @@ #define __ardour_gtk_track_meter_h__ #include -#include #include #include @@ -31,79 +30,125 @@ #include #include -#include +#include "ardour/types.h" +#include "ardour/chan_count.h" +#include "ardour/session_handle.h" -#include -#include -#include +#include "widgets/fastmeter.h" +#include "widgets/focus_entry.h" +#include "widgets/slider_controller.h" #include "enums.h" namespace ARDOUR { - class IO; class Session; - class Route; - class RouteGroup; -} -namespace Gtkmm2ext { - class FastMeter; - class BarController; + class PeakMeter; } namespace Gtk { class Menu; } -class LevelMeter : public Gtk::HBox +class LevelMeterBase : public ARDOUR::SessionHandlePtr, virtual public sigc::trackable { - public: - LevelMeter (boost::shared_ptr, ARDOUR::Session&); - ~LevelMeter (); +public: + LevelMeterBase (ARDOUR::Session*, PBD::EventLoop::InvalidationRecord* ir, + ArdourWidgets::FastMeter::Orientation o = ArdourWidgets::FastMeter::Vertical); + virtual ~LevelMeterBase (); + + virtual void set_meter (ARDOUR::PeakMeter* meter); void update_gain_sensitive (); - void update_meters (); + 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); + void setup_meters (int len=0, int width=3, int thin=2); + void set_max_audio_meter_count (uint32_t cnt = 0); + + void set_meter_type (ARDOUR::MeterType); + ARDOUR::MeterType meter_type () { return _meter_type; } - private: + /** Emitted in the GUI thread when a button is pressed over the meter */ + PBD::Signal1 ButtonPress; + PBD::Signal1 ButtonRelease; + PBD::Signal1 MeterTypeChanged; - //friend class MixerStrip; - boost::shared_ptr _io; - ARDOUR::Session& _session; +protected: + virtual void mtr_pack(Gtk::Widget &w) = 0; + virtual void mtr_remove(Gtk::Widget &w) = 0; - Width _width; +private: + PBD::EventLoop::InvalidationRecord* parent_invalidator; + ARDOUR::PeakMeter* _meter; + ArdourWidgets::FastMeter::Orientation _meter_orientation; + + Width _width; struct MeterInfo { - Gtkmm2ext::FastMeter *meter; - gint16 width; - int length; - bool packed; - - MeterInfo() { - meter = 0; - width = 0; + ArdourWidgets::FastMeter* meter; + gint16 width; + int length; + bool packed; + float max_peak; + + MeterInfo() { + meter = 0; + width = 0; length = 0; - packed = false; - } + packed = false; + max_peak = -INFINITY; + } }; - static const guint16 regular_meter_width = 3; - static const guint16 thin_meter_width = 2; - vector meters; + guint16 regular_meter_width; + int meter_length; + guint16 thin_meter_width; + std::vector meters; + float max_peak; + ARDOUR::MeterType _meter_type; + ARDOUR::MeterType visible_meter_type; + uint32_t midi_count; + uint32_t meter_count; + uint32_t max_visible_meters; + + PBD::ScopedConnection _configuration_connection; + PBD::ScopedConnection _meter_type_connection; + PBD::ScopedConnection _parameter_connection; - //Gtk::HBox meter_packer; - void hide_all_meters (); + bool meter_button_press (GdkEventButton *); + bool meter_button_release (GdkEventButton *); - void parameter_changed (const char*); + 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; bool color_changed; 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__ */