diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-11-25 16:47:20 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-11-25 16:47:20 -0500 |
commit | d53993fd834ef6b12f9e3acab43325783fa98784 (patch) | |
tree | ab40623b5acfd0e4a9c0e46f523ad601cfaf4ee8 /libs | |
parent | 104ec39b50556435a2edcce24375e3ba4a938a2d (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.h | 3 | ||||
-rw-r--r-- | libs/surfaces/faderport/operations.cc | 21 |
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); + } } } |