From 6bebe1d886820c5eb18914507a2c90f3e6c2d555 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 14 Jan 2014 23:08:34 +0100 Subject: [PATCH] update panGUI connections (panner-shell vs pannable vs panner) --- gtk2_ardour/mono_panner.cc | 17 ++++++++++++++--- gtk2_ardour/mono_panner.h | 4 +++- gtk2_ardour/panner2d.cc | 23 +++++++++++++++++------ gtk2_ardour/panner2d.h | 8 +++++--- gtk2_ardour/stereo_panner.cc | 21 ++++++++++++++++++--- gtk2_ardour/stereo_panner.h | 4 +++- 6 files changed, 60 insertions(+), 17 deletions(-) diff --git a/gtk2_ardour/mono_panner.cc b/gtk2_ardour/mono_panner.cc index 1559aacd99..d82d236b32 100644 --- a/gtk2_ardour/mono_panner.cc +++ b/gtk2_ardour/mono_panner.cc @@ -89,9 +89,10 @@ MonoPanner::MonoPanner (boost::shared_ptr p) have_font = true; } - position_control->Changed.connect (connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context()); + position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context()); - _panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&MonoPanner::bypass_handler, this), gui_context()); + _panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&MonoPanner::bypass_handler, this), gui_context()); + _panner_shell->PannableChanged.connect (panshell_connections, invalidator (*this), boost::bind (&MonoPanner::pannable_handler, this), gui_context()); ColorsChanged.connect (sigc::mem_fun (*this, &MonoPanner::color_handler)); set_tooltip (); @@ -505,7 +506,17 @@ MonoPanner::bypass_handler () queue_draw (); } - PannerEditor* +void +MonoPanner::pannable_handler () +{ + panvalue_connections.drop_connections(); + position_control = _panner->pannable()->pan_azimuth_control; + position_binder.set_controllable(position_control); + position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context()); + queue_draw (); +} + +PannerEditor* MonoPanner::editor () { return new MonoPannerEditor (this); diff --git a/gtk2_ardour/mono_panner.h b/gtk2_ardour/mono_panner.h index b79038bab7..4d5f1ffec0 100644 --- a/gtk2_ardour/mono_panner.h +++ b/gtk2_ardour/mono_panner.h @@ -60,7 +60,8 @@ class MonoPanner : public PannerInterface boost::shared_ptr _panner_shell; boost::shared_ptr position_control; - PBD::ScopedConnectionList connections; + PBD::ScopedConnectionList panvalue_connections; + PBD::ScopedConnectionList panshell_connections; int drag_start_x; int last_drag_x; double accumulated_delta; @@ -89,6 +90,7 @@ class MonoPanner : public PannerInterface static bool have_colors; void color_handler (); void bypass_handler (); + void pannable_handler (); }; #endif /* __gtk_ardour_mono_panner_h__ */ diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc index 826b86fc89..0f8b46aa56 100644 --- a/gtk2_ardour/panner2d.cc +++ b/gtk2_ardour/panner2d.cc @@ -76,9 +76,9 @@ Panner2d::Panner2d (boost::shared_ptr p, int32_t h) , last_width (0) , have_elevation (false) { - panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context()); + panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context()); - panner_shell->panner()->SignalPositionChanged.connect (panconnect, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context()); + panner_shell->panner()->SignalPositionChanged.connect (panner_connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context()); drag_target = 0; set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK); @@ -200,12 +200,12 @@ Panner2d::add_speaker (const AngularVector& a) void Panner2d::handle_state_change () { - panconnect.drop_connections(); + panner_connections.drop_connections(); if (!panner_shell->panner()) { return; } - panner_shell->panner()->SignalPositionChanged.connect (panconnect, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context()); + panner_shell->panner()->SignalPositionChanged.connect (panner_connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context()); set params = panner_shell->panner()->what_can_be_automated(); set::iterator p = params.find(PanElevationAutomation); @@ -833,8 +833,11 @@ Panner2dWindow::Panner2dWindow (boost::shared_ptr p, int32_t h, uin bypass_button.signal_toggled().connect (sigc::mem_fun (*this, &Panner2dWindow::bypass_toggled)); width_spinner.signal_changed().connect (sigc::mem_fun (*this, &Panner2dWindow::width_changed)); - p->pannable()->pan_width_control->Changed.connect (connections, invalidator(*this), boost::bind (&Panner2dWindow::set_width, this), gui_context()); - p->Changed.connect (connections, invalidator (*this), boost::bind (&Panner2dWindow::set_bypassed, this), gui_context()); + p->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&Panner2dWindow::set_bypassed, this), gui_context()); + /* needed for the width-spinbox in the main window */ + p->PannableChanged.connect (panshell_connections, invalidator (*this), boost::bind (&Panner2dWindow::pannable_handler, this), gui_context()); + p->pannable()->pan_width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&Panner2dWindow::set_width, this), gui_context()); + button_box.set_spacing (6); button_box.pack_start (bypass_button, false, false); @@ -896,6 +899,14 @@ Panner2dWindow::width_changed () } } +void +Panner2dWindow::pannable_handler () +{ + panvalue_connections.drop_connections(); + widget.get_panner_shell()->pannable()->pan_width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&Panner2dWindow::set_width, this), gui_context()); + set_width(); +} + void Panner2dWindow::set_bypassed () { diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h index 60534d04c6..fdd4748f8f 100644 --- a/gtk2_ardour/panner2d.h +++ b/gtk2_ardour/panner2d.h @@ -127,8 +127,8 @@ class Panner2d : public Gtk::DrawingArea void handle_position_change (); void label_signals (); - PBD::ScopedConnectionList connections; - PBD::ScopedConnectionList panconnect; + PBD::ScopedConnectionList panshell_connections; + PBD::ScopedConnectionList panner_connections; /* cartesian coordinates in GTK units ; adjust to same but on a circle of radius 1.0 and centered in the middle of our area @@ -156,10 +156,12 @@ class Panner2dWindow : public ArdourWindow Gtk::Adjustment width_adjustment; Gtk::SpinButton width_spinner; - PBD::ScopedConnectionList connections; + PBD::ScopedConnectionList panshell_connections; + PBD::ScopedConnectionList panvalue_connections; void set_bypassed(); void set_width(); + void pannable_handler (); void bypass_toggled (); void width_changed (); bool on_key_press_event (GdkEventKey*); diff --git a/gtk2_ardour/stereo_panner.cc b/gtk2_ardour/stereo_panner.cc index 36d25cba9d..d480c60529 100644 --- a/gtk2_ardour/stereo_panner.cc +++ b/gtk2_ardour/stereo_panner.cc @@ -95,9 +95,10 @@ StereoPanner::StereoPanner (boost::shared_ptr p) have_font = true; } - position_control->Changed.connect (connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context()); - width_control->Changed.connect (connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context()); - _panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&StereoPanner::bypass_handler, this), gui_context()); + position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context()); + width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context()); + + _panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&StereoPanner::bypass_handler, this), gui_context()); ColorsChanged.connect (sigc::mem_fun (*this, &StereoPanner::color_handler)); @@ -693,6 +694,20 @@ StereoPanner::bypass_handler () queue_draw (); } +void +StereoPanner::pannable_handler () +{ + panvalue_connections.drop_connections(); + position_control = _panner->pannable()->pan_azimuth_control; + width_control = _panner->pannable()->pan_width_control; + position_binder.set_controllable(position_control); + width_binder.set_controllable(width_control); + + position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context()); + width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context()); + queue_draw (); +} + PannerEditor* StereoPanner::editor () { diff --git a/gtk2_ardour/stereo_panner.h b/gtk2_ardour/stereo_panner.h index 5ecf343ab1..8bab160d60 100644 --- a/gtk2_ardour/stereo_panner.h +++ b/gtk2_ardour/stereo_panner.h @@ -64,7 +64,8 @@ class StereoPanner : public PannerInterface boost::shared_ptr position_control; boost::shared_ptr width_control; - PBD::ScopedConnectionList connections; + PBD::ScopedConnectionList panvalue_connections; + PBD::ScopedConnectionList panshell_connections; bool dragging; bool dragging_position; bool dragging_left; @@ -103,6 +104,7 @@ class StereoPanner : public PannerInterface static bool have_colors; void color_handler (); void bypass_handler (); + void pannable_handler (); }; #endif /* __gtk_ardour_stereo_panner_h__ */ -- 2.30.2