From 407eba04cf080166fd3adf319424300567e3e755 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 11 Jan 2014 23:30:13 +0100 Subject: add spinbox to control width in VBAP GUI,.. --- gtk2_ardour/panner2d.cc | 70 ++++++++++++++++++++++++++++++++++++++----------- gtk2_ardour/panner2d.h | 11 +++++--- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc index 59e70acd03..d1bf858173 100644 --- a/gtk2_ardour/panner2d.cc +++ b/gtk2_ardour/panner2d.cc @@ -804,6 +804,8 @@ Panner2dWindow::Panner2dWindow (boost::shared_ptr p, int32_t h, uin : ArdourWindow (_("Panner (2D)")) , widget (p, h) , bypass_button (_("Bypass")) + , width_adjustment (0, -100, 100, 1, 5, 0) + , width_spinner (width_adjustment) { widget.set_name ("MixerPanZone"); @@ -811,18 +813,29 @@ Panner2dWindow::Panner2dWindow (boost::shared_ptr p, int32_t h, uin widget.set_size_request (h, h); 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()); button_box.set_spacing (6); button_box.pack_start (bypass_button, false, false); - spinner_box.set_spacing (6); left_side.set_spacing (6); left_side.pack_start (button_box, false, false); + + Gtk::Label* l = manage (new Label ( + p->panner()->describe_parameter(PanWidthAutomation), + Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false)); + spinner_box.pack_start (*l, false, false); + spinner_box.pack_start (width_spinner, false, false); left_side.pack_start (spinner_box, false, false); + l->show (); bypass_button.show (); button_box.show (); + width_spinner.show (); spinner_box.show (); left_side.show (); @@ -834,6 +847,8 @@ Panner2dWindow::Panner2dWindow (boost::shared_ptr p, int32_t h, uin add (hpacker); reset (inputs); + set_width(); + set_bypassed(); widget.show (); } @@ -841,21 +856,6 @@ void Panner2dWindow::reset (uint32_t n_inputs) { widget.reset (n_inputs); - -#if 0 - while (spinners.size() < n_inputs) { - // spinners.push_back (new Gtk::SpinButton (widget.azimuth (spinners.size()))); - //spinner_box.pack_start (*spinners.back(), false, false); - //spinners.back()->set_digits (4); - spinners.back()->show (); - } - - while (spinners.size() > n_inputs) { - spinner_box.remove (*spinners.back()); - delete spinners.back(); - spinners.erase (--spinners.end()); - } -#endif } void @@ -868,6 +868,44 @@ Panner2dWindow::bypass_toggled () widget.get_panner_shell()->set_bypassed (view); } } +void +Panner2dWindow::width_changed () +{ + float model = widget.get_panner_shell()->pannable()->pan_width_control->get_value(); + float view = width_spinner.get_value() / 100.0; + if (model != view) { + widget.get_panner_shell()->panner()->set_width (view); + } +} + +void +Panner2dWindow::set_bypassed () +{ + bool view = bypass_button.get_active (); + bool model = widget.get_panner_shell()->bypassed (); + if (model != view) { + bypass_button.set_active(model); + } + + set params = widget.get_panner_shell()->panner()->what_can_be_automated(); + set::iterator p = params.find(PanWidthAutomation); + if (p == params.end()) { + spinner_box.set_sensitive(false); + } else { + spinner_box.set_sensitive(true); + } +} + +void +Panner2dWindow::set_width () +{ + // rounding of spinbox is different from slider -- TODO use slider + float model = (widget.get_panner_shell()->pannable()->pan_width_control->get_value() * 100.0); + float view = (width_spinner.get_value()); + if (model != view) { + width_spinner.set_value (model); + } +} bool Panner2dWindow::on_key_press_event (GdkEventKey* event) diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h index 9df0355518..033b5711bc 100644 --- a/gtk2_ardour/panner2d.h +++ b/gtk2_ardour/panner2d.h @@ -66,9 +66,6 @@ class Panner2d : public Gtk::DrawingArea boost::shared_ptr get_panner_shell() const { return panner_shell; } - sigc::signal PuckMoved; - sigc::signal TargetMoved; - void cart_to_gtk (PBD::CartesianVector&) const; void gtk_to_cart (PBD::CartesianVector&) const; @@ -161,9 +158,15 @@ class Panner2dWindow : public ArdourWindow Gtk::VBox spinner_box; Gtk::VBox left_side; - std::vector spinners; + Gtk::Adjustment width_adjustment; + Gtk::SpinButton width_spinner; + + PBD::ScopedConnectionList connections; + void set_bypassed(); + void set_width(); void bypass_toggled (); + void width_changed (); bool on_key_press_event (GdkEventKey*); bool on_key_release_event (GdkEventKey*); }; -- cgit v1.2.3