diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-03-04 14:53:13 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:39 -0400 |
commit | dc9f579a8b29203df1ab25691451cad1071d52a2 (patch) | |
tree | 6d4069d5a4b73fd6790407f5c4770926730a20c6 /gtk2_ardour | |
parent | 9339a7b9979863537401100762e39c231fd8bc53 (diff) |
add GUI support for slaving VCAs to other VCAs
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/vca_master_strip.cc | 70 | ||||
-rw-r--r-- | gtk2_ardour/vca_master_strip.h | 5 |
3 files changed, 75 insertions, 1 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 9963737188..87e0aa74c1 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -2579,7 +2579,6 @@ MixerStrip::vca_button_release (GdkEventButton* ev) items.push_back (CheckMenuElem ((*v)->name())); CheckMenuItem* item = dynamic_cast<CheckMenuItem*> (&items.back()); if (_route->slaved_to (*v)) { - cerr << "Yes, slaved to " << (*v)->name() << " aka " << (*v)->number() << endl; item->set_active (true); } item->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &MixerStrip::vca_menu_toggle), item, (*v)->number())); diff --git a/gtk2_ardour/vca_master_strip.cc b/gtk2_ardour/vca_master_strip.cc index 220673c294..1e61aa14e9 100644 --- a/gtk2_ardour/vca_master_strip.cc +++ b/gtk2_ardour/vca_master_strip.cc @@ -19,7 +19,9 @@ #include "pbd/convert.h" #include "ardour/rc_configuration.h" +#include "ardour/session.h" #include "ardour/vca.h" +#include "ardour/vca_manager.h" #include "tooltips.h" #include "vca_master_strip.h" @@ -30,6 +32,7 @@ using namespace ARDOUR; using namespace ARDOUR_UI_UTILS; using namespace Gtkmm2ext; +using namespace Gtk; using std::string; VCAMasterStrip::VCAMasterStrip (Session* s, boost::shared_ptr<VCA> v) @@ -59,6 +62,7 @@ VCAMasterStrip::VCAMasterStrip (Session* s, boost::shared_ptr<VCA> v) assign_button.set_text (_("-vca-")); set_tooltip (assign_button, _("Click to assign a VCA Master to this VCA")); + assign_button.signal_button_release_event().connect (sigc::mem_fun (*this, &VCAMasterStrip::vca_button_release), false); width_button.signal_button_press_event().connect (sigc::mem_fun(*this, &VCAMasterStrip::width_button_pressed), false); hide_button.signal_clicked.connect (sigc::mem_fun(*this, &VCAMasterStrip::hide_clicked)); @@ -239,3 +243,69 @@ VCAMasterStrip::solo_changed () solo_button.set_active_state (Gtkmm2ext::Off); } } + +void +VCAMasterStrip::vca_menu_toggle (CheckMenuItem* menuitem, uint32_t n) +{ + boost::shared_ptr<VCA> vca = _session->vca_manager().vca_by_number (n); + + if (!menuitem->get_active()) { + if (!vca) { + /* null VCA means drop all VCA assignments */ + vca_unassign (); + } else { + _vca->control()->remove_master (vca); + } + } else { + if (vca) { + _vca->control()->add_master (vca); + } + } +} + +void +VCAMasterStrip::vca_unassign () +{ + _vca->control()->clear_masters (); +} + +bool +VCAMasterStrip::vca_button_release (GdkEventButton* ev) +{ + using namespace Gtk::Menu_Helpers; + + if (!_session) { + return false; + } + + /* primary click only */ + + if (ev->button != 1) { + return false; + } + + VCAList vcas (_session->vca_manager().vcas()); + + if (vcas.empty()) { + /* XXX should probably show a message saying "No VCA masters" */ + return true; + } + + Menu* menu = new Menu; + MenuList& items = menu->items(); + + items.push_back (MenuElem (_("Unassign"), sigc::mem_fun (*this, &VCAMasterStrip::vca_unassign))); + + for (VCAList::iterator v = vcas.begin(); v != vcas.end(); ++v) { + items.push_back (CheckMenuElem ((*v)->name())); + CheckMenuItem* item = dynamic_cast<CheckMenuItem*> (&items.back()); + if (_vca->control()->slaved_to (*v)) { + item->set_active (true); + } + item->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &VCAMasterStrip::vca_menu_toggle), item, (*v)->number())); + } + + menu->popup (1, ev->time); + + return true; +} diff --git a/gtk2_ardour/vca_master_strip.h b/gtk2_ardour/vca_master_strip.h index b65aef0c4a..a058f45824 100644 --- a/gtk2_ardour/vca_master_strip.h +++ b/gtk2_ardour/vca_master_strip.h @@ -22,6 +22,7 @@ #include <boost/shared_ptr.hpp> #include <gtkmm/box.h> +#include <gtkmm/menuitem.h> #include "ardour_button.h" #include "axis_view.h" @@ -73,6 +74,10 @@ class VCAMasterStrip : public AxisView, public Gtk::EventBox void set_solo_text (); void solo_changed (); void mute_changed (); + void vca_menu_toggle (Gtk::CheckMenuItem* menuitem, uint32_t n); + void vca_unassign (); + bool vca_button_release (GdkEventButton*); + }; |