From 7abd6d2366c5204470ff261eba5bb0214455be02 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 5 Oct 2008 19:06:20 +0000 Subject: [PATCH] changes to support making RouteUI and its children and relations able to switch the Route/IO object they refer to (significant architectural changes) git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3870 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/gtkmm2ext/barcontroller.cc | 2 +- libs/gtkmm2ext/binding_proxy.cc | 24 ++++++++++++++++---- libs/gtkmm2ext/gtkmm2ext/bindable_button.h | 11 +++++---- libs/gtkmm2ext/gtkmm2ext/binding_proxy.h | 8 ++++--- libs/gtkmm2ext/gtkmm2ext/slider_controller.h | 8 ++++--- libs/gtkmm2ext/slider_controller.cc | 6 ++--- 6 files changed, 41 insertions(+), 18 deletions(-) diff --git a/libs/gtkmm2ext/barcontroller.cc b/libs/gtkmm2ext/barcontroller.cc index 4389d8cab1..4318b1df28 100644 --- a/libs/gtkmm2ext/barcontroller.cc +++ b/libs/gtkmm2ext/barcontroller.cc @@ -40,7 +40,7 @@ BarController::BarController (Gtk::Adjustment& adj, sigc::slot lc) : adjustment (adj), - binding_proxy (mc), + binding_proxy (&mc), label_callback (lc), spinner (adjustment) diff --git a/libs/gtkmm2ext/binding_proxy.cc b/libs/gtkmm2ext/binding_proxy.cc index 90f95f82ef..f75b6ee5c6 100644 --- a/libs/gtkmm2ext/binding_proxy.cc +++ b/libs/gtkmm2ext/binding_proxy.cc @@ -31,7 +31,7 @@ using namespace Gtkmm2ext; using namespace std; using namespace PBD; -BindingProxy::BindingProxy (Controllable& c) +BindingProxy::BindingProxy (Controllable* c) : prompter (0), controllable (c), bind_button (2), @@ -40,6 +40,15 @@ BindingProxy::BindingProxy (Controllable& c) { } +BindingProxy::BindingProxy (Controllable& c) + : prompter (0), + controllable (&c), + bind_button (2), + bind_statemask (Gdk::CONTROL_MASK) + +{ +} + BindingProxy::~BindingProxy () { if (prompter) { @@ -47,6 +56,13 @@ BindingProxy::~BindingProxy () } } +void +BindingProxy::set_controllable (Controllable* c) +{ + learning_finished (); + controllable = c; +} + void BindingProxy::set_bind_button_state (guint button, guint statemask) { @@ -65,7 +81,7 @@ bool BindingProxy::button_press_handler (GdkEventButton *ev) { if ((ev->state & bind_statemask) && ev->button == bind_button) { - if (Controllable::StartLearning (&controllable)) { + if (Controllable::StartLearning (controllable)) { string prompt = _("operate controller now"); if (prompter == 0) { prompter = new PopUp (Gtk::WIN_POS_MOUSE, 30000, false); @@ -73,7 +89,7 @@ BindingProxy::button_press_handler (GdkEventButton *ev) } prompter->set_text (prompt); prompter->touch (); // shows popup - learning_connection = controllable.LearningFinished.connect (mem_fun (*this, &BindingProxy::learning_finished)); + learning_connection = controllable->LearningFinished.connect (mem_fun (*this, &BindingProxy::learning_finished)); } return true; } @@ -95,7 +111,7 @@ bool BindingProxy::prompter_hiding (GdkEventAny *ev) { learning_connection.disconnect (); - Controllable::StopLearning (&controllable); + Controllable::StopLearning (controllable); return false; } diff --git a/libs/gtkmm2ext/gtkmm2ext/bindable_button.h b/libs/gtkmm2ext/gtkmm2ext/bindable_button.h index 1cde32c5ba..746d71676e 100644 --- a/libs/gtkmm2ext/gtkmm2ext/bindable_button.h +++ b/libs/gtkmm2ext/gtkmm2ext/bindable_button.h @@ -32,9 +32,9 @@ namespace PBD { class BindableToggleButton : public Gtkmm2ext::StatefulToggleButton { public: - BindableToggleButton (PBD::Controllable& c) : binding_proxy (c) {} + BindableToggleButton (PBD::Controllable* c) : binding_proxy (c) {} - explicit BindableToggleButton (PBD::Controllable& c, const std::string &label) + explicit BindableToggleButton (PBD::Controllable* c, const std::string &label) : Gtkmm2ext::StatefulToggleButton (label), binding_proxy (c) {} virtual ~BindableToggleButton() {} @@ -49,6 +49,8 @@ class BindableToggleButton : public Gtkmm2ext::StatefulToggleButton } PBD::Controllable* get_controllable() { return binding_proxy.get_controllable(); } + void set_controllable (PBD::Controllable*c) { binding_proxy.set_controllable (c); } + private: BindingProxy binding_proxy; }; @@ -56,9 +58,9 @@ class BindableToggleButton : public Gtkmm2ext::StatefulToggleButton class BindableButton : public Gtkmm2ext::StatefulButton { public: - BindableButton (PBD::Controllable& c) : binding_proxy (c) {} + BindableButton (PBD::Controllable* c) : binding_proxy (c) {} - explicit BindableButton (PBD::Controllable& c, const std::string &label) + explicit BindableButton (PBD::Controllable* c, const std::string &label) : Gtkmm2ext::StatefulButton (label), binding_proxy (c) {} ~BindableButton() {} @@ -73,6 +75,7 @@ class BindableButton : public Gtkmm2ext::StatefulButton } PBD::Controllable* get_controllable() { return binding_proxy.get_controllable(); } + void set_controllable (PBD::Controllable*c) { binding_proxy.set_controllable (c); } private: BindingProxy binding_proxy; diff --git a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h index dd9b94319d..b80be92477 100644 --- a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h +++ b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h @@ -32,6 +32,7 @@ namespace PBD { class BindingProxy : public sigc::trackable { public: + BindingProxy (PBD::Controllable*); BindingProxy (PBD::Controllable&); virtual ~BindingProxy(); @@ -40,11 +41,12 @@ class BindingProxy : public sigc::trackable bool button_press_handler (GdkEventButton *); - PBD::Controllable* get_controllable() { return &controllable; } - protected: + PBD::Controllable* get_controllable() { return controllable; } + void set_controllable (PBD::Controllable*); + protected: Gtkmm2ext::PopUp* prompter; - PBD::Controllable& controllable; + PBD::Controllable* controllable; guint bind_button; guint bind_statemask; sigc::connection learning_connection; diff --git a/libs/gtkmm2ext/gtkmm2ext/slider_controller.h b/libs/gtkmm2ext/gtkmm2ext/slider_controller.h index 60c8eef660..9919093eae 100644 --- a/libs/gtkmm2ext/gtkmm2ext/slider_controller.h +++ b/libs/gtkmm2ext/gtkmm2ext/slider_controller.h @@ -39,7 +39,7 @@ class SliderController : public Gtkmm2ext::PixFader public: SliderController (Glib::RefPtr image, Gtk::Adjustment* adj, int orientation, - PBD::Controllable&, + PBD::Controllable*, bool with_numeric = true); virtual ~SliderController () {} @@ -50,6 +50,8 @@ class SliderController : public Gtkmm2ext::PixFader bool on_button_press_event (GdkEventButton *ev); + void set_controllable (PBD::Controllable* c) { binding_proxy.set_controllable (c); } + protected: BindingProxy binding_proxy; Glib::RefPtr slider; @@ -64,7 +66,7 @@ class VSliderController : public SliderController public: VSliderController (Glib::RefPtr image, Gtk::Adjustment *adj, - PBD::Controllable&, + PBD::Controllable*, bool with_numeric = true); }; @@ -73,7 +75,7 @@ class HSliderController : public SliderController public: HSliderController (Glib::RefPtr image, Gtk::Adjustment *adj, - PBD::Controllable&, + PBD::Controllable*, bool with_numeric = true); }; diff --git a/libs/gtkmm2ext/slider_controller.cc b/libs/gtkmm2ext/slider_controller.cc index 93dfb27ae2..6ec882c79c 100644 --- a/libs/gtkmm2ext/slider_controller.cc +++ b/libs/gtkmm2ext/slider_controller.cc @@ -30,7 +30,7 @@ using namespace PBD; SliderController::SliderController (Glib::RefPtr image, Gtk::Adjustment *adj, int orientation, - Controllable& c, + Controllable* c, bool with_numeric) : PixFader (image, *adj, orientation), @@ -60,7 +60,7 @@ SliderController::on_button_press_event (GdkEventButton *ev) VSliderController::VSliderController (Glib::RefPtr image, Gtk::Adjustment *adj, - Controllable& control, + Controllable* control, bool with_numeric) : SliderController (image, adj, VERT, control, with_numeric) @@ -76,7 +76,7 @@ VSliderController::VSliderController (Glib::RefPtr image, HSliderController::HSliderController (Glib::RefPtr image, Gtk::Adjustment *adj, - Controllable& control, + Controllable* control, bool with_numeric) : SliderController (image, adj, HORIZ, control, with_numeric) -- 2.30.2