X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgain_meter.h;h=7d089e2ef12244e3321f069d1fdb3bd599c74547;hb=cf32bf81b81b79250ade5cdae9f79dda6c0eee41;hp=cd8e74d59d8335bc1bfbd57eaef646ded9f44ab5;hpb=cb413146428ce5db5e281d70f2b3b7df27c1aaab;p=ardour.git diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index cd8e74d59d..7d089e2ef1 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -32,11 +32,14 @@ #include #include -#include +#include "pbd/signals.h" -#include -#include -#include +#include "ardour/types.h" +#include "ardour/session_handle.h" + +#include "gtkmm2ext/click_box.h" +#include "gtkmm2ext/focus_entry.h" +#include "gtkmm2ext/slider_controller.h" #include "enums.h" #include "level_meter.h" @@ -46,6 +49,9 @@ namespace ARDOUR { class Session; class Route; class RouteGroup; + class PeakMeter; + class Amp; + class Automatable; } namespace Gtkmm2ext { class FastMeter; @@ -55,49 +61,50 @@ namespace Gtk { class Menu; } -class GainMeter : public Gtk::VBox +class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr { public: - GainMeter (boost::shared_ptr, ARDOUR::Session&); - ~GainMeter (); + GainMeterBase (ARDOUR::Session*, const Glib::RefPtr& pix, + bool horizontal, int); + virtual ~GainMeterBase (); - void update_gain_sensitive (); + virtual void set_controls (boost::shared_ptr route, + boost::shared_ptr meter, + boost::shared_ptr amp); + void update_gain_sensitive (); void update_meters (); void effective_gain_display (); - void set_width (Width, int len=0); - void setup_meters (int len=0); - - int get_gm_width (); - void set_meter_strip_name (const char * name); void set_fader_name (const char * name); - /* should probably switch to using the shared_ptr that underlies - all this stuff - */ + virtual void setup_meters (int len=0); - PBD::Controllable* get_controllable() { return _io->gain_control().get(); } + boost::shared_ptr get_controllable(); - private: + LevelMeter& get_level_meter() const { return *level_meter; } + Gtkmm2ext::SliderController& get_gain_slider() const { return *gain_slider; } + + protected: friend class MixerStrip; - boost::shared_ptr _io; - ARDOUR::Session& _session; + boost::shared_ptr _route; + boost::shared_ptr _meter; + boost::shared_ptr _amp; + std::vector connections; + PBD::ScopedConnectionList model_connections; bool ignore_toggle; bool next_release_selects; - Gtkmm2ext::VSliderController *gain_slider; + Gtkmm2ext::SliderController *gain_slider; Gtk::Adjustment gain_adjustment; Gtkmm2ext::FocusEntry gain_display; Gtk::Button peak_display; - Gtk::HBox gain_display_box; - Gtk::HBox fader_box; Gtk::DrawingArea meter_metric_area; - LevelMeter *level_meter; + LevelMeter *level_meter; sigc::connection gain_watching; @@ -125,33 +132,25 @@ class GainMeter : public Gtk::VBox Width _width; - static std::map > metric_pixmaps; - static Glib::RefPtr render_metrics (Gtk::Widget&); - - gint meter_metrics_expose (GdkEventExpose *); - void show_gain (); void gain_activated (); bool gain_focused (GdkEventFocus*); - float max_peak; - - Gtk::VBox* fader_vbox; - Gtk::HBox hbox; + float max_peak; void gain_adjusted (); void gain_changed (); - + void meter_point_clicked (); void gain_unit_changed (); - - void hide_all_meters (); + + virtual void hide_all_meters (); gint meter_button_press (GdkEventButton*, uint32_t); bool peak_button_release (GdkEventButton*); bool gain_key_press (GdkEventKey*); - + Gtk::Menu* meter_menu; void popup_meter_menu (GdkEventButton*); @@ -173,15 +172,44 @@ class GainMeter : public Gtk::VBox static sigc::signal ResetAllPeakDisplays; static sigc::signal ResetGroupPeakDisplays; - static Glib::RefPtr slider; - static Glib::RefPtr rail; - static int setup_slider_pix (); - void on_theme_changed (); bool style_changed; bool dpi_changed; bool color_changed; void color_handler(bool); + bool _is_midi; +}; + +class GainMeter : public GainMeterBase, public Gtk::VBox +{ + public: + GainMeter (ARDOUR::Session*, int); + ~GainMeter () {} + + virtual void set_controls (boost::shared_ptr route, + boost::shared_ptr meter, + boost::shared_ptr amp); + + int get_gm_width (); + void setup_meters (int len=0); + + static void setup_slider_pix (); + + protected: + void hide_all_meters (); + + gint meter_metrics_expose (GdkEventExpose *); + + static std::map > metric_pixmaps; + static Glib::RefPtr render_metrics (Gtk::Widget&); + + private: + Gtk::HBox gain_display_box; + Gtk::HBox fader_box; + Gtk::VBox* fader_vbox; + Gtk::HBox hbox; + + static Glib::RefPtr slider; }; #endif /* __ardour_gtk_gain_meter_h__ */