summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-11-25 17:20:00 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2015-11-25 17:20:00 -0500
commite1ea14f10ada28fbf48019fef96de78c8f8df393 (patch)
tree34fb023e4db7ba2660b1c8484dcbddb667dadb0e /libs
parent9cbab4070f06de3c95f9e36baa771717d43e88d3 (diff)
faderport: handle mute for monitor out by using monitor processor ops; try to blink mute button when cut-all is in effect.
Still some logic bugs when switching between master, monitor and other
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/faderport/faderport.cc28
-rw-r--r--libs/surfaces/faderport/faderport.h1
-rw-r--r--libs/surfaces/faderport/operations.cc11
3 files changed, 37 insertions, 3 deletions
diff --git a/libs/surfaces/faderport/faderport.cc b/libs/surfaces/faderport/faderport.cc
index e8e68475ff..381f893174 100644
--- a/libs/surfaces/faderport/faderport.cc
+++ b/libs/surfaces/faderport/faderport.cc
@@ -43,6 +43,7 @@
#include "ardour/filesystem_paths.h"
#include "ardour/midi_port.h"
#include "ardour/midiport_manager.h"
+#include "ardour/monitor_processor.h"
#include "ardour/rc_configuration.h"
#include "ardour/route.h"
#include "ardour/session.h"
@@ -784,12 +785,35 @@ FaderPort::set_current_route (boost::shared_ptr<Route> r)
if (control) {
control->Changed.connect (route_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort::map_gain, this), this);
}
+
+ boost::shared_ptr<MonitorProcessor> mp = _current_route->monitor_control();
+ if (mp) {
+ mp->cut_control()->Changed.connect (route_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort::map_cut, this), this);
+ }
}
map_route_state ();
}
void
+FaderPort::map_cut ()
+{
+ boost::shared_ptr<MonitorProcessor> mp = _current_route->monitor_control();
+
+ if (mp) {
+ bool yn = mp->cut_all ();
+ button_info (Mute).set_led_state (_output_port, yn);
+ if (yn) {
+ blinkers.push_back (Mute);
+ } else {
+ blinkers.remove (Mute);
+ }
+ } else {
+ blinkers.remove (Mute);
+ }
+}
+
+void
FaderPort::map_mute (void*)
{
button_info (Mute).set_led_state (_output_port, _current_route->muted());
@@ -875,12 +899,14 @@ FaderPort::map_route_state ()
button_info (Mute).set_led_state (_output_port, false);
button_info (Solo).set_led_state (_output_port, false);
button_info (Rec).set_led_state (_output_port, false);
+ blinkers.remove (Mute);
+ blinkers.remove (Solo);
} else {
/* arguments to these map_*() methods are all ignored */
map_mute (0);
map_solo (false, 0, false);
map_recenable ();
-
map_gain ();
+ map_cut ();
}
}
diff --git a/libs/surfaces/faderport/faderport.h b/libs/surfaces/faderport/faderport.h
index d733012ea7..cec673c743 100644
--- a/libs/surfaces/faderport/faderport.h
+++ b/libs/surfaces/faderport/faderport.h
@@ -260,6 +260,7 @@ class FaderPort : public ARDOUR::ControlProtocol, public AbstractUI<FaderPortReq
void map_mute (void*);
void map_recenable ();
void map_gain ();
+ void map_cut ();
/* operations (defined in operations.cc) */
diff --git a/libs/surfaces/faderport/operations.cc b/libs/surfaces/faderport/operations.cc
index 61acbeccad..b25e449f56 100644
--- a/libs/surfaces/faderport/operations.cc
+++ b/libs/surfaces/faderport/operations.cc
@@ -102,15 +102,18 @@ FaderPort::use_master ()
if (_current_route == r) {
r = pre_master_route.lock();
set_current_route (r);
- if (r == session->monitor_out() || r == session->master_out()) {
+ if (r == session->monitor_out()) {
button_info(Output).set_led_state (_output_port, true);
+ blinkers.push_back (Output);
} else {
button_info(Output).set_led_state (_output_port, false);
+ blinkers.remove (Output);
}
} else {
pre_master_route = boost::weak_ptr<Route> (_current_route);
set_current_route (r);
button_info(Output).set_led_state (_output_port, true);
+ blinkers.remove (Output);
}
}
}
@@ -119,19 +122,23 @@ void
FaderPort::use_monitor ()
{
boost::shared_ptr<Route> r = session->monitor_out();
+
if (r) {
if (_current_route == r) {
r = pre_monitor_route.lock();
set_current_route (r);
- if (r == session->monitor_out() || r == session->master_out()) {
+ if (r == session->master_out()) {
button_info(Output).set_led_state (_output_port, true);
} else {
button_info(Output).set_led_state (_output_port, false);
}
+ blinkers.remove (Output);
} else {
pre_monitor_route = boost::weak_ptr<Route> (_current_route);
set_current_route (r);
button_info(Output).set_led_state (_output_port, true);
+ blinkers.push_back (Output);
}
+ } else {
}
}