X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgain_meter.h;h=38b89bb8a5a06df2ebe427f4f3edb2afe65a408a;hb=026c71331e87c1c4a1aaef6ad7ddc1cd0919c660;hp=0c4e52b7c52cd771ba74ed49a5e913c5fdeb46ea;hpb=aaa91db6d9592684258267981e619b44cc2b7c40;p=ardour.git diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index 0c4e52b7c5..38b89bb8a5 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -32,11 +32,17 @@ #include #include -#include +#include "pbd/signals.h" -#include -#include -#include +#include "ardour/chan_count.h" +#include "ardour/types.h" +#include "ardour/session_handle.h" + +#include "ardour_button.h" + +#include "gtkmm2ext/click_box.h" +#include "gtkmm2ext/focus_entry.h" +#include "gtkmm2ext/slider_controller.h" #include "enums.h" #include "level_meter.h" @@ -46,23 +52,26 @@ namespace ARDOUR { class Session; class Route; class RouteGroup; + class PeakMeter; + class Amp; + class Automatable; } namespace Gtkmm2ext { class FastMeter; - class BarController; } namespace Gtk { class Menu; } -class GainMeterBase : virtual public sigc::trackable +class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr { public: - GainMeterBase ( ARDOUR::Session&, const Glib::RefPtr& pix, - bool horizontal); + GainMeterBase (ARDOUR::Session*, bool horizontal, int, int); virtual ~GainMeterBase (); - virtual void set_io (boost::shared_ptr); + virtual void set_controls (boost::shared_ptr route, + boost::shared_ptr meter, + boost::shared_ptr amp); void update_gain_sensitive (); void update_meters (); @@ -73,18 +82,28 @@ class GainMeterBase : virtual public sigc::trackable void set_fader_name (const char * name); virtual void setup_meters (int len=0); + virtual void set_type (ARDOUR::MeterType); boost::shared_ptr get_controllable(); - LevelMeter& get_level_meter() const { return *level_meter; } + LevelMeterHBox& get_level_meter() const { return *level_meter; } Gtkmm2ext::SliderController& get_gain_slider() const { return *gain_slider; } + /** Emitted in the GUI thread when a button is pressed over the level meter; + * return true if the event is handled. + */ + PBD::Signal1 LevelMeterButtonPress; + protected: friend class MixerStrip; - boost::shared_ptr _io; - ARDOUR::Session& _session; + friend class MeterStrip; + friend class RouteTimeAxisView; + 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; @@ -92,14 +111,17 @@ class GainMeterBase : virtual public sigc::trackable Gtkmm2ext::SliderController *gain_slider; Gtk::Adjustment gain_adjustment; Gtkmm2ext::FocusEntry gain_display; - Gtk::Button peak_display; + Gtkmm2ext::FocusEntry peak_display; +// Gtk::Button peak_display; Gtk::DrawingArea meter_metric_area; - LevelMeter *level_meter; + Gtk::DrawingArea meter_ticks1_area; + Gtk::DrawingArea meter_ticks2_area; + LevelMeterHBox *level_meter; sigc::connection gain_watching; - Gtk::Button gain_automation_style_button; - Gtk::ToggleButton gain_automation_state_button; + ArdourButton gain_automation_style_button; + ArdourButton gain_automation_state_button; Gtk::Menu gain_astate_menu; Gtk::Menu gain_astyle_menu; @@ -112,6 +134,8 @@ class GainMeterBase : virtual public sigc::trackable void gain_automation_state_changed(); void gain_automation_style_changed(); + void setup_gain_adjustment (); + std::string astate_string (ARDOUR::AutoState); std::string short_astate_string (ARDOUR::AutoState); std::string _astate_string (ARDOUR::AutoState, bool); @@ -126,28 +150,28 @@ class GainMeterBase : virtual public sigc::trackable void gain_activated (); bool gain_focused (GdkEventFocus*); - float max_peak; - + float max_peak; + void gain_adjusted (); void gain_changed (); - + void meter_point_clicked (); void gain_unit_changed (); - + 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*); - gint start_gain_touch (GdkEventButton*); - gint end_gain_touch (GdkEventButton*); + bool gain_slider_button_press (GdkEventButton *); + bool gain_slider_button_release (GdkEventButton *); - void set_mix_group_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); + void set_route_group_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); void set_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); gint meter_release (GdkEventButton*); gint meter_press (GdkEventButton*); @@ -157,46 +181,57 @@ class GainMeterBase : virtual public sigc::trackable void parameter_changed (const char*); void reset_peak_display (); + void reset_route_peak_display (ARDOUR::Route*); void reset_group_peak_display (ARDOUR::RouteGroup*); - static sigc::signal ResetAllPeakDisplays; - static sigc::signal ResetGroupPeakDisplays; - + void redraw_metrics (); void on_theme_changed (); - bool style_changed; - bool dpi_changed; - bool color_changed; void color_handler(bool); + ARDOUR::DataType _data_type; + ARDOUR::ChanCount _previous_amp_output_streams; + +private: + + bool level_meter_button_press (GdkEventButton *); + PBD::ScopedConnection _level_meter_connection; }; class GainMeter : public GainMeterBase, public Gtk::VBox { public: - GainMeter (ARDOUR::Session&); - ~GainMeter () {} + GainMeter (ARDOUR::Session*, int); + virtual ~GainMeter (); - void set_io (boost::shared_ptr); + 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 (); + void set_type (ARDOUR::MeterType); + void route_active_changed (); protected: void hide_all_meters (); gint meter_metrics_expose (GdkEventExpose *); - - static std::map > metric_pixmaps; - static Glib::RefPtr render_metrics (Gtk::Widget&); + gint meter_ticks1_expose (GdkEventExpose *); + gint meter_ticks2_expose (GdkEventExpose *); + void on_style_changed (const Glib::RefPtr&); private: + + void meter_configuration_changed (ARDOUR::ChanCount); + void meter_type_changed (ARDOUR::MeterType); + Gtk::HBox gain_display_box; Gtk::HBox fader_box; Gtk::VBox* fader_vbox; Gtk::HBox hbox; - - static Glib::RefPtr slider; + Gtk::HBox meter_hbox; + Gtk::Alignment fader_alignment; + Gtk::Alignment meter_alignment; + std::vector _types; }; #endif /* __ardour_gtk_gain_meter_h__ */