X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fpanner_ui.h;h=e8a9eac414ef115f2bc0403c46840ecb224034d4;hb=4336bb25d739cd007811ccd0298a15acc5e20787;hp=e13be3684f2d95b8467a217115d3f9cc44675fd5;hpb=1a3a77607768721f6834ddae09f532cdb6aec4a6;p=ardour.git diff --git a/gtk2_ardour/panner_ui.h b/gtk2_ardour/panner_ui.h index e13be3684f..e8a9eac414 100644 --- a/gtk2_ardour/panner_ui.h +++ b/gtk2_ardour/panner_ui.h @@ -15,37 +15,58 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_gtk_panner_ui_h__ #define __ardour_gtk_panner_ui_h__ #include -#include -#include + +#include +#include +#include +#include +#include +#include +#include + #include +#include + +#include "ardour/session_handle.h" #include "enums.h" class Panner2d; +class PannerBar; +class Panner2dWindow; +class StereoPanner; namespace ARDOUR { - class IO; class Session; + class Panner; + class Delivery; + class AutomationControl; } + namespace Gtkmm2ext { class FastMeter; - class BarController; } -class PannerUI : public Gtk::HBox +namespace Gtk { + class Menu; + class Menuitem; +} + +class PannerUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr { public: - PannerUI (ARDOUR::IO&, ARDOUR::Session&); + PannerUI (ARDOUR::Session*); ~PannerUI (); - void pan_changed (void *); + virtual void set_panner (boost::shared_ptr); + + void panner_changed (void *); void update_pan_sensitive (); void update_gain_sensitive (); @@ -55,16 +76,30 @@ class PannerUI : public Gtk::HBox void effective_pan_display (); - void set_meter_strip_name (string name); + void set_meter_strip_name (std::string name); + boost::shared_ptr get_controllable(); + + void set_mono (bool); + void on_size_allocate (Gtk::Allocation &); + + static void setup_slider_pix (); private: - ARDOUR::IO& _io; - ARDOUR::Session& _session; + friend class MixerStrip; + + boost::shared_ptr _panner; + PBD::ScopedConnectionList connections; + PBD::ScopedConnectionList _pan_control_connections; bool ignore_toggle; bool in_pan_update; + int _current_nouts; + int _current_npans; - Panner2d* panner; + static const int pan_bar_height; + + Panner2d* twod_panner; ///< 2D panner, or 0 + Panner2dWindow* big_window; Gtk::VBox pan_bar_packer; Gtk::Adjustment hAdjustment; @@ -75,31 +110,43 @@ class PannerUI : public Gtk::HBox Gtk::EventBox panning_down; Gtk::Arrow panning_down_arrow; Gtk::VBox pan_vbox; + Gtk::VBox poswidth_box; Width _width; - gint panning_scroll_button_press_event (GdkEventButton*, int32_t dir); - gint panning_scroll_button_release_event (GdkEventButton*, int32_t dir); - + StereoPanner* _stereo_panner; + bool _ignore_width_change; + bool _ignore_position_change; + void width_adjusted (); + void show_width (); + void position_adjusted (); + void show_position (); + Gtk::ToggleButton panning_link_button; Gtk::Button panning_link_direction_button; Gtk::HBox panning_link_box; - gint panning_link_button_press (GdkEventButton*); - gint panning_link_button_release (GdkEventButton*); + bool panning_link_button_press (GdkEventButton*); + bool panning_link_button_release (GdkEventButton*); + + Gtk::Menu* pan_astate_menu; + Gtk::Menu* pan_astyle_menu; + + Gtk::Button pan_automation_style_button; + Gtk::ToggleButton pan_automation_state_button; + void panning_link_direction_clicked (); - vector pan_adjustments; - vector pan_bars; + std::vector pan_adjustments; + std::vector pan_bars; void pan_adjustment_changed (uint32_t which); void pan_value_changed (uint32_t which); - void pan_printer (char* buf, uint32_t, Gtk::Adjustment*); void update_pan_bars (bool only_if_aplay); void update_pan_linkage (); void update_pan_state (); + void build_astate_menu (); + void build_astyle_menu (); - void panner_changed (); - void hide_pans (); void panner_moved (int which); @@ -108,15 +155,38 @@ class PannerUI : public Gtk::HBox gint start_pan_touch (GdkEventButton*); gint end_pan_touch (GdkEventButton*); - gint entry_focus_event (GdkEventFocus* ev); + bool pan_button_event (GdkEventButton*, uint32_t which); + + void connect_to_pan_control (uint32_t); - gint pan_button_event (GdkEventButton*, uint32_t which); Gtk::Menu* pan_menu; Gtk::CheckMenuItem* bypass_menu_item; void build_pan_menu (uint32_t which); void pan_mute (uint32_t which); - void pan_reset (); + void pan_reset (uint32_t); + void pan_reset_all (); void pan_bypass_toggle (); + + void pan_automation_state_changed(); + void pan_automation_style_changed(); + gint pan_automation_style_button_event (GdkEventButton *); + gint pan_automation_state_button_event (GdkEventButton *); + sigc::connection pan_watching; + + 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); + + void start_touch (boost::weak_ptr); + void stop_touch (boost::weak_ptr); + + void bar_spinner_activate (bool); + /** true if any of our PannerBars are currently using a SpinButton to modify value */ + bool _bar_spinner_active; }; #endif /* __ardour_gtk_panner_ui_h__ */