X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgain_meter.h;h=cd8c1b552f380e6a18b0be1e959e27ca483a8390;hb=5981b7f1b8bc85444d66ab0ffac2dee412dd21ea;hp=8286cbeb954893b8cd6abc73ca36e58277433439;hpb=616f2a0370a10dcc7372a95f6bca9f5a45698980;p=ardour.git diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index 8286cbeb95..cd8c1b552f 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -23,14 +23,16 @@ #include #include -#include #include -#include -#include +#include +#include #include -#include #include -#include +#include +#include +#include + +//#include #include "pbd/signals.h" @@ -38,17 +40,16 @@ #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 "widgets/ardour_button.h" +#include "widgets/focus_entry.h" +#include "widgets/slider_controller.h" #include "enums.h" #include "level_meter.h" namespace ARDOUR { class IO; + class GainControl; class Session; class Route; class RouteGroup; @@ -56,95 +57,100 @@ namespace ARDOUR { class Amp; class Automatable; } -namespace Gtkmm2ext { - class FastMeter; - class BarController; -} + namespace Gtk { class Menu; } +enum MeterPointChangeTarget { + MeterPointChangeAll, + MeterPointChangeGroup, + MeterPointChangeSingle +}; + class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr { - public: - GainMeterBase (ARDOUR::Session*, bool horizontal, int, int); +public: + GainMeterBase (ARDOUR::Session*, bool horizontal, int, int); virtual ~GainMeterBase (); virtual void set_controls (boost::shared_ptr route, - boost::shared_ptr meter, - boost::shared_ptr amp); + boost::shared_ptr meter, + boost::shared_ptr amp, + boost::shared_ptr control); void update_gain_sensitive (); void update_meters (); + const ARDOUR::ChanCount meter_channels () const; + void effective_gain_display (); void set_width (Width, int len=0); void set_meter_strip_name (const char * name); void set_fader_name (const char * name); - void set_flat_buttons (); - virtual void setup_meters (int len=0); virtual void set_type (ARDOUR::MeterType); boost::shared_ptr get_controllable(); LevelMeterHBox& get_level_meter() const { return *level_meter; } - Gtkmm2ext::SliderController& get_gain_slider() const { return *gain_slider; } + ArdourWidgets::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: + static std::string astate_string (ARDOUR::AutoState); + static std::string short_astate_string (ARDOUR::AutoState); + static std::string _astate_string (ARDOUR::AutoState, bool); + +protected: friend class MixerStrip; friend class MeterStrip; + friend class RouteTimeAxisView; + friend class VCAMasterStrip; boost::shared_ptr _route; boost::shared_ptr _meter; boost::shared_ptr _amp; + boost::shared_ptr _control; std::vector connections; PBD::ScopedConnectionList model_connections; bool ignore_toggle; bool next_release_selects; - Gtkmm2ext::SliderController *gain_slider; - Gtk::Adjustment gain_adjustment; - Gtkmm2ext::FocusEntry gain_display; - Gtk::Button peak_display; - Gtk::DrawingArea meter_metric_area; - Gtk::DrawingArea meter_ticks1_area; - Gtk::DrawingArea meter_ticks2_area; - LevelMeterHBox *level_meter; + ArdourWidgets::SliderController* gain_slider; + Gtk::Adjustment gain_adjustment; + ArdourWidgets::FocusEntry gain_display; + ArdourWidgets::FocusEntry peak_display; + Gtk::DrawingArea meter_metric_area; + Gtk::DrawingArea meter_ticks1_area; + Gtk::DrawingArea meter_ticks2_area; + LevelMeterHBox* level_meter; sigc::connection gain_watching; - ArdourButton gain_automation_style_button; - ArdourButton gain_automation_state_button; + ArdourWidgets::ArdourButton gain_automation_state_button; Gtk::Menu gain_astate_menu; - Gtk::Menu gain_astyle_menu; - gint gain_automation_style_button_event (GdkEventButton *); + ArdourWidgets::ArdourButton meter_point_button; + + Gtk::Menu meter_point_menu; + + void set_gain_astate (ARDOUR::AutoState); + bool gain_astate_propagate; + static sigc::signal ChangeGainAutomationState; + gint gain_automation_state_button_event (GdkEventButton *); - gint pan_automation_style_button_event (GdkEventButton *); gint pan_automation_state_button_event (GdkEventButton *); 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); - - std::string astyle_string (ARDOUR::AutoStyle); - std::string short_astyle_string (ARDOUR::AutoStyle); - std::string _astyle_string (ARDOUR::AutoStyle, bool); - Width _width; void show_gain (); @@ -153,32 +159,33 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr float max_peak; - void gain_adjusted (); + void fader_moved (); void gain_changed (); - void meter_point_clicked (); + void meter_point_clicked (ARDOUR::MeterPoint); void gain_unit_changed (); virtual void hide_all_meters (); gint meter_button_press (GdkEventButton*, uint32_t); + bool peak_button_press (GdkEventButton*); bool peak_button_release (GdkEventButton*); bool gain_key_press (GdkEventKey*); Gtk::Menu* meter_menu; void popup_meter_menu (GdkEventButton*); - bool gain_slider_button_press (GdkEventButton *); - bool gain_slider_button_release (GdkEventButton *); + void amp_stop_touch (); + void amp_start_touch (); 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*); - bool wait_for_release; ARDOUR::MeterPoint old_meter_point; + MeterPointChangeTarget meter_point_change_target; + void parameter_changed (const char*); void reset_peak_display (); @@ -204,8 +211,9 @@ class GainMeter : public GainMeterBase, public Gtk::VBox virtual ~GainMeter (); virtual void set_controls (boost::shared_ptr route, - boost::shared_ptr meter, - boost::shared_ptr amp); + boost::shared_ptr meter, + boost::shared_ptr amp, + boost::shared_ptr control); int get_gm_width (); void setup_meters (int len=0); @@ -218,6 +226,7 @@ class GainMeter : public GainMeterBase, public Gtk::VBox gint meter_metrics_expose (GdkEventExpose *); gint meter_ticks1_expose (GdkEventExpose *); gint meter_ticks2_expose (GdkEventExpose *); + void on_style_changed (const Glib::RefPtr&); private: @@ -226,7 +235,7 @@ class GainMeter : public GainMeterBase, public Gtk::VBox Gtk::HBox gain_display_box; Gtk::HBox fader_box; - Gtk::VBox* fader_vbox; + Gtk::VBox fader_vbox; Gtk::HBox hbox; Gtk::HBox meter_hbox; Gtk::Alignment fader_alignment;