X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgain_meter.h;h=3e025656c5109b21c7e6fd436f73ceef0f1e939f;hb=965c295451916cf7f04d33fbf41ff2beb573439b;hp=a1a91ced08756a50c3cecd16e2cd6b249f70377f;hpb=a505e1469d362cc32acb01252d192c73729fbc43;p=ardour.git diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index a1a91ced08..3e025656c5 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_gtk_gain_meter_h__ @@ -32,13 +31,14 @@ #include #include - #include -#include #include +#include +#include #include "enums.h" +#include "level_meter.h" namespace ARDOUR { class IO; @@ -49,96 +49,94 @@ namespace ARDOUR { namespace Gtkmm2ext { class FastMeter; class BarController; - class Pix; } namespace Gtk { class Menu; } -class GainMeter : public Gtk::VBox +class GainMeterBase : virtual public sigc::trackable { public: - GainMeter (ARDOUR::IO&, ARDOUR::Session&); - ~GainMeter (); + GainMeterBase ( ARDOUR::Session&, const Glib::RefPtr& pix, + bool horizontal); + virtual ~GainMeterBase (); - void update_gain_sensitive (); + virtual void set_io (boost::shared_ptr); + void update_gain_sensitive (); void update_meters (); - void update_meters_falloff (); - void effective_gain_display (); - - void set_width (Width); - void setup_meters (); - + void set_width (Width, int len=0); void set_meter_strip_name (const char * name); void set_fader_name (const char * name); - private: - ARDOUR::IO& _io; + virtual void setup_meters (int len=0); + + PBD::Controllable& get_controllable() { return _io->gain_control(); } + 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; + std::vector connections; bool ignore_toggle; + bool next_release_selects; - Gtkmm2ext::VSliderController *gain_slider; + Gtkmm2ext::SliderController *gain_slider; Gtk::Adjustment gain_adjustment; - Gtk::Frame gain_display_frame; - Gtkmm2ext::ClickBox gain_display; - Gtk::Frame peak_display_frame; - Gtk::EventBox peak_display; - Gtk::Label peak_display_label; - Gtk::Button gain_unit_button; - Gtk::Label gain_unit_label; - Gtk::HBox gain_display_box; - Gtk::HBox fader_box; + Gtkmm2ext::FocusEntry gain_display; + Gtk::Button peak_display; Gtk::DrawingArea meter_metric_area; - Gtk::Button meter_point_button; - Gtk::Label meter_point_label; - Gtk::Table top_table; - Width _width; + LevelMeter *level_meter; - static std::map > metric_pixmaps; - static Glib::RefPtr render_metrics (Gtk::Widget&); + sigc::connection gain_watching; - gint meter_metrics_expose (GdkEventExpose *); + Gtk::Button gain_automation_style_button; + Gtk::ToggleButton gain_automation_state_button; - static void _gain_printer (char buf[32], Gtk::Adjustment&, void *); - void gain_printer (char buf[32], Gtk::Adjustment&); - - struct MeterInfo { - Gtkmm2ext::FastMeter *meter; - gint16 width; - bool packed; - - MeterInfo() { - meter = 0; - width = 0; - packed = false; - } - }; - - static const guint16 regular_meter_width = 5; - static const guint16 thin_meter_width = 2; - vector meters; - float max_peak; - + Gtk::Menu gain_astate_menu; + Gtk::Menu gain_astyle_menu; + + gint gain_automation_style_button_event (GdkEventButton *); + 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(); + + 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); - Gtk::HBox hbox; - Gtk::HBox meter_packer; + Width _width; + void show_gain (); + void gain_activated (); + bool gain_focused (GdkEventFocus*); + + float max_peak; + void gain_adjusted (); void gain_changed (void *); void meter_point_clicked (); - void meter_changed (void *); void gain_unit_changed (); - void hide_all_meters (); + virtual void hide_all_meters (); gint meter_button_press (GdkEventButton*, uint32_t); - gint meter_button_release (GdkEventButton*, uint32_t); - gint peak_button_release (GdkEventButton*); + bool peak_button_release (GdkEventButton*); + bool gain_key_press (GdkEventKey*); Gtk::Menu* meter_menu; void popup_meter_menu (GdkEventButton*); @@ -153,7 +151,7 @@ class GainMeter : public Gtk::VBox bool wait_for_release; ARDOUR::MeterPoint old_meter_point; - void meter_hold_changed(); + void parameter_changed (const char*); void reset_peak_display (); void reset_group_peak_display (ARDOUR::RouteGroup*); @@ -161,8 +159,41 @@ class GainMeter : public Gtk::VBox static sigc::signal ResetAllPeakDisplays; static sigc::signal ResetGroupPeakDisplays; - static Gtkmm2ext::Pix* slider_pix; - static int setup_slider_pix (); + void on_theme_changed (); + bool style_changed; + bool dpi_changed; + bool color_changed; + void color_handler(bool); +}; + +class GainMeter : public GainMeterBase, public Gtk::VBox +{ + public: + GainMeter (ARDOUR::Session&); + ~GainMeter () {} + + void set_io (boost::shared_ptr); + + 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__ */