From 1a49bb9556312c2d11365907aec5ff6f8b948e7f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 11 Feb 2011 18:04:09 +0000 Subject: [PATCH] use volume controller widget for monitor section, drop some now-unused code git-svn-id: svn://localhost/ardour2/branches/3.0@8828 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/monitor_section.cc | 16 +++++----- gtk2_ardour/monitor_section.h | 10 ++++--- gtk2_ardour/utils.cc | 36 ----------------------- gtk2_ardour/utils.h | 2 -- gtk2_ardour/wscript | 1 + libs/gtkmm2ext/gtkmm2ext/binding_proxy.h | 2 +- libs/gtkmm2ext/gtkmm2ext/motionfeedback.h | 5 ++-- libs/gtkmm2ext/motionfeedback.cc | 13 ++++++++ 8 files changed, 32 insertions(+), 53 deletions(-) diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc index 1830933048..170f4568b4 100644 --- a/gtk2_ardour/monitor_section.cc +++ b/gtk2_ardour/monitor_section.cc @@ -17,6 +17,7 @@ #include "gui_thread.h" #include "monitor_section.h" #include "public_editor.h" +#include "volume_controller.h" #include "utils.h" #include "i18n.h" @@ -73,7 +74,7 @@ MonitorSection::MonitorSection (Session* s) /* Dim */ - dim_control = new MotionFeedback (little_knob_pixbuf, MotionFeedback::Rotary, "", &dim_adjustment, false, 30, 30); + dim_control = new VolumeController (little_knob_pixbuf, &dim_adjustment, false, 30, 30); HBox* dim_packer = manage (new HBox); dim_packer->show (); @@ -137,7 +138,7 @@ MonitorSection::MonitorSection (Session* s) /* Solo Boost */ - solo_boost_control = new MotionFeedback (little_knob_pixbuf, MotionFeedback::Rotary, "", &solo_boost_adjustment, false, 30, 30); + solo_boost_control = new VolumeController (little_knob_pixbuf, &solo_boost_adjustment, false, 30, 30); HBox* solo_packer = manage (new HBox); solo_packer->set_spacing (12); @@ -154,7 +155,7 @@ MonitorSection::MonitorSection (Session* s) /* Solo (SiP) cut */ - solo_cut_control = new MotionFeedback (little_knob_pixbuf, MotionFeedback::Rotary, "", &solo_cut_adjustment, false, 30, 30); + solo_cut_control = new VolumeController (little_knob_pixbuf, &solo_cut_adjustment, false, 30, 30); spin_label = manage (new Label (_("SiP Cut"))); spin_packer = manage (new VBox); @@ -237,7 +238,7 @@ MonitorSection::MonitorSection (Session* s) /* Gain */ - gain_control = new MotionFeedback (big_knob_pixbuf, MotionFeedback::Rotary, "", &gain_adjustment, false, 80, 80); + gain_control = new VolumeController (big_knob_pixbuf, &gain_adjustment, false, 80, 80); spin_label = manage (new Label (_("Gain"))); spin_packer = manage (new VBox); @@ -1012,14 +1013,15 @@ MonitorSection::assign_controllables () } if (_session) { - solo_cut_control->set_controllable (_session->solo_cut_control()); + boost::shared_ptr c = _session->solo_cut_control(); + solo_cut_control->set_controllable (c); + solo_cut_control->get_adjustment()->set_value (c->get_value()); } else { solo_cut_control->set_controllable (none); } if (_route) { gain_control->set_controllable (_route->gain_control()); - control_link (control_connections, _route->gain_control(), gain_adjustment); } else { gain_control->set_controllable (none); } @@ -1038,13 +1040,11 @@ MonitorSection::assign_controllables () dim_control->set_controllable (c); dim_adjustment.set_lower (c->lower()); dim_adjustment.set_upper (c->upper()); - control_link (control_connections, c, dim_adjustment); c = _monitor->solo_boost_control (); solo_boost_control->set_controllable (c); solo_boost_adjustment.set_lower (c->lower()); solo_boost_adjustment.set_upper (c->upper()); - control_link (control_connections, c, solo_boost_adjustment); } else { diff --git a/gtk2_ardour/monitor_section.h b/gtk2_ardour/monitor_section.h index 462cdbc80b..fcd452f061 100644 --- a/gtk2_ardour/monitor_section.h +++ b/gtk2_ardour/monitor_section.h @@ -31,6 +31,8 @@ namespace Gtkmm2ext { class MotionFeedback; } +class VolumeController; + class MonitorSection : public RouteUI { public: @@ -63,13 +65,13 @@ class MonitorSection : public RouteUI ChannelButtons _channel_buttons; Gtk::Adjustment gain_adjustment; - Gtkmm2ext::MotionFeedback* gain_control; + VolumeController* gain_control; Gtk::Adjustment dim_adjustment; - Gtkmm2ext::MotionFeedback* dim_control; + VolumeController* dim_control; Gtk::Adjustment solo_boost_adjustment; - Gtkmm2ext::MotionFeedback* solo_boost_control; + VolumeController* solo_boost_control; Gtk::Adjustment solo_cut_adjustment; - Gtkmm2ext::MotionFeedback* solo_cut_control; + VolumeController* solo_cut_control; void populate_buttons (); void set_button_names (); diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index fe0235f6d5..6d0c0a2103 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -952,40 +952,4 @@ escape_underscores (string const & s) return o; } -static void -adjustment_to_controllable (Gtk::Adjustment* adj, boost::weak_ptr wcont) -{ - boost::shared_ptr cont = wcont.lock(); - - if (cont) { - double val = adj->get_value(); - if (val != cont->get_value()) { - cont->set_value (val); - } - } -} - -static void -controllable_to_adjustment (Gtk::Adjustment* adj, boost::weak_ptr wcont) -{ - boost::shared_ptr cont = wcont.lock(); - - if (cont) { - float val = cont->get_value(); - - if (val != adj->get_value()) { - adj->set_value (val); - } - } -} - -void -control_link (ScopedConnectionList& scl, boost::shared_ptr c, Gtk::Adjustment& a) -{ - boost::weak_ptr wc (c); - - a.signal_value_changed().connect (sigc::bind (sigc::ptr_fun (adjustment_to_controllable), &a, wc)); - c->Changed.connect (scl, MISSING_INVALIDATOR, boost::bind (controllable_to_adjustment, &a, wc), - gui_context()); -} diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h index 2dce61e908..b42371f4a2 100644 --- a/gtk2_ardour/utils.h +++ b/gtk2_ardour/utils.h @@ -91,6 +91,4 @@ void resize_window_to_proportion_of_monitor (Gtk::Window*, int, int); std::string escape_underscores (std::string const &); -void control_link (PBD::ScopedConnectionList& scl, boost::shared_ptr c, Gtk::Adjustment& a); - #endif /* __ardour_gtk_utils_h__ */ diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 503dca9bcc..b50521ec76 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -221,6 +221,7 @@ gtk2_ardour_sources = [ 'ui_config.cc', 'utils.cc', 'version.cc', + 'volume_controller.cc', 'waveview.cc', 'window_proxy.cc' ] diff --git a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h index 348f9f2649..69d1ebdaad 100644 --- a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h +++ b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h @@ -42,7 +42,7 @@ class BindingProxy : public sigc::trackable bool button_press_handler (GdkEventButton *); - boost::shared_ptr get_controllable() { return controllable; } + boost::shared_ptr get_controllable() const { return controllable; } void set_controllable (boost::shared_ptr); protected: diff --git a/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h b/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h index ba70e30a07..84b2ae7154 100644 --- a/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h +++ b/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h @@ -61,8 +61,9 @@ class MotionFeedback : public Gtk::VBox gfloat lower () { return _lower; } gfloat upper () { return _upper; } gfloat range () { return _range; } - - void set_controllable (boost::shared_ptr c) { binding_proxy.set_controllable (c); } + + boost::shared_ptr controllable() const; + virtual void set_controllable (boost::shared_ptr c); void set_lamp_color (const Gdk::Color&); static Glib::RefPtr render_pixbuf (int size); diff --git a/libs/gtkmm2ext/motionfeedback.cc b/libs/gtkmm2ext/motionfeedback.cc index 2637ae7a2e..43c8531b8e 100644 --- a/libs/gtkmm2ext/motionfeedback.cc +++ b/libs/gtkmm2ext/motionfeedback.cc @@ -704,3 +704,16 @@ MotionFeedback::render_pixbuf (int size) return pixbuf; } + +void +MotionFeedback::set_controllable (boost::shared_ptr c) +{ + binding_proxy.set_controllable (c); +} + +boost::shared_ptr +MotionFeedback::controllable () const +{ + return binding_proxy.get_controllable (); +} +