summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-11-25 16:47:20 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2015-11-25 16:47:20 -0500
commitd53993fd834ef6b12f9e3acab43325783fa98784 (patch)
treeab40623b5acfd0e4a9c0e46f523ad601cfaf4ee8 /libs
parent104ec39b50556435a2edcce24375e3ba4a938a2d (diff)
faderport: output button is a toggle between master (or monitor) and currently used route
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/faderport/faderport.h3
-rw-r--r--libs/surfaces/faderport/operations.cc21
2 files changed, 22 insertions, 2 deletions
diff --git a/libs/surfaces/faderport/faderport.h b/libs/surfaces/faderport/faderport.h
index 5fe657c704..d733012ea7 100644
--- a/libs/surfaces/faderport/faderport.h
+++ b/libs/surfaces/faderport/faderport.h
@@ -103,6 +103,9 @@ class FaderPort : public ARDOUR::ControlProtocol, public AbstractUI<FaderPortReq
private:
boost::shared_ptr<ARDOUR::Route> _current_route;
+ boost::weak_ptr<ARDOUR::Route> pre_master_route;
+ boost::weak_ptr<ARDOUR::Route> pre_monitor_route;
+
boost::shared_ptr<ARDOUR::AsyncMIDIPort> _input_port;
boost::shared_ptr<ARDOUR::AsyncMIDIPort> _output_port;
diff --git a/libs/surfaces/faderport/operations.cc b/libs/surfaces/faderport/operations.cc
index 01b555f575..1fb2810b3a 100644
--- a/libs/surfaces/faderport/operations.cc
+++ b/libs/surfaces/faderport/operations.cc
@@ -17,6 +17,7 @@
*/
+#include "ardour/async_midi_port.h"
#include "ardour/rc_configuration.h"
#include "ardour/session.h"
#include "ardour/track.h"
@@ -91,7 +92,15 @@ FaderPort::use_master ()
{
boost::shared_ptr<Route> r = session->master_out();
if (r) {
- set_current_route (r);
+ if (_current_route == r) {
+ r = pre_master_route.lock();
+ set_current_route (r);
+ button_info(Output).set_led_state (_output_port, false);
+ } else {
+ pre_master_route = boost::weak_ptr<Route> (_current_route);
+ set_current_route (r);
+ button_info(Output).set_led_state (_output_port, true);
+ }
}
}
@@ -100,6 +109,14 @@ FaderPort::use_monitor ()
{
boost::shared_ptr<Route> r = session->monitor_out();
if (r) {
- set_current_route (r);
+ if (_current_route == r) {
+ r = pre_monitor_route.lock();
+ set_current_route (r);
+ button_info(Output).set_led_state (_output_port, false);
+ } else {
+ pre_monitor_route = boost::weak_ptr<Route> (_current_route);
+ set_current_route (r);
+ button_info(Output).set_led_state (_output_port, true);
+ }
}
}