summaryrefslogtreecommitdiff
path: root/gtk2_ardour/mixer_strip.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-02-29 21:26:45 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:38 -0400
commitacaaa98bd0a21494ae912dbbc37fbbc33cbbf61d (patch)
tree905a1f5929cf6427087c3f9ae7d3d3cff202d83e /gtk2_ardour/mixer_strip.cc
parent984f4487e0c66e1ae4d3c732e48e00d4470cad8b (diff)
start shaping up VCA assign process
Diffstat (limited to 'gtk2_ardour/mixer_strip.cc')
-rw-r--r--gtk2_ardour/mixer_strip.cc51
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);