diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-02-29 21:26:45 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:38 -0400 |
commit | acaaa98bd0a21494ae912dbbc37fbbc33cbbf61d (patch) | |
tree | 905a1f5929cf6427087c3f9ae7d3d3cff202d83e /gtk2_ardour/mixer_strip.cc | |
parent | 984f4487e0c66e1ae4d3c732e48e00d4470cad8b (diff) |
start shaping up VCA assign process
Diffstat (limited to 'gtk2_ardour/mixer_strip.cc')
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 673bce61d1..d080e79c38 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -2492,7 +2492,7 @@ MixerStrip::set_meter_type (MeterType t) } void -MixerStrip::vca_menu_toggle (uint32_t n) +MixerStrip::vca_menu_toggle (MenuItem* m, uint32_t n) { if (!_route) { return; @@ -2504,9 +2504,44 @@ MixerStrip::vca_menu_toggle (uint32_t n) return; } + RadioMenuItem* ri = dynamic_cast<RadioMenuItem*> (m); + + if (!ri) { + return; + } + + if (!ri->get_active()) { + _mixer.do_vca_unassign (vca); + return; + } + + /* Now invoke a global method to apply this all relevant strips/routes */ + + _mixer.do_vca_assign (vca); +} + +void +MixerStrip::vca_assign (boost::shared_ptr<VCA> vca) +{ + if (!vca || !_route) { + return; + } + vca->add (_route); } +void +MixerStrip::vca_unassign (boost::shared_ptr<VCA> vca) +{ + if (!_route) { + return; + } + + if (!vca) { + /* null VCA means drop all VCA assignments */ + } +} + bool MixerStrip::vca_button_release (GdkEventButton* ev, uint32_t which) { @@ -2516,6 +2551,11 @@ MixerStrip::vca_button_release (GdkEventButton* ev, uint32_t which) return false; } + if (!_route) { + /* no route - nothing to do */ + return false; + } + VCAList vcas (_session->vca_manager().vcas()); if (vcas.empty()) { @@ -2527,8 +2567,15 @@ MixerStrip::vca_button_release (GdkEventButton* ev, uint32_t which) MenuList& items = menu->items(); RadioMenuItem::Group group; + items.push_back (MenuElem (_("Unassign"), sigc::bind (sigc::mem_fun (_mixer, &Mixer_UI::do_vca_unassign), boost::shared_ptr<VCA>()))); + for (VCAList::iterator v = vcas.begin(); v != vcas.end(); ++v) { - items.push_back (RadioMenuElem (group, (*v)->name(), sigc::bind (sigc::mem_fun (*this, &MixerStrip::vca_menu_toggle), (*v)->number()))); + items.push_back (RadioMenuElem (group, (*v)->name())); + RadioMenuItem* item = dynamic_cast<RadioMenuItem*> (&items.back()); + if (_route->slaved_to (*v)) { + item->set_active (true); + } + item->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &MixerStrip::vca_menu_toggle), item, (*v)->number())); } menu->popup (1, ev->time); |