diff options
author | Robin Gareus <robin@gareus.org> | 2017-01-16 19:54:20 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-01-16 19:54:42 +0100 |
commit | cf5a0de709489dd3a8735da89a49f9f468bf98e9 (patch) | |
tree | 07ae4faf3a7a09cc0d399255cf6c78ee09886f7b /gtk2_ardour/ardour_ui_options.cc | |
parent | 88d797bd6424f9cdbf48a26e0913965a6f102363 (diff) |
Add initial GUI support for global monitor states
Diffstat (limited to 'gtk2_ardour/ardour_ui_options.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui_options.cc | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 318a2bfe60..a596ef548d 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -23,6 +23,7 @@ #include "pbd/convert.h" #include "pbd/stacktrace.h" +#include "pbd/unwind.h" #include <gtkmm2ext/utils.h> @@ -129,6 +130,64 @@ ARDOUR_UI::toggle_click () } void +ARDOUR_UI::toggle_session_monitoring_in () +{ + if (ignore_session_monitoring) { + return; + } + Glib::RefPtr<Action> act = ActionManager::get_action (X_("Transport"), X_("SessionMonitorIn")); + if (!act) { + return; + } + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act); + if (!tact) { + return; + } + if (tact->get_active()) { + Glib::RefPtr<Action> dact = ActionManager::get_action (X_("Transport"), X_("SessionMonitorDisk")); + if (dact) { + Glib::RefPtr<ToggleAction> tdact = Glib::RefPtr<ToggleAction>::cast_dynamic(dact); + if (tdact) { + PBD::Unwinder<bool> (ignore_session_monitoring, true); + tdact->set_active (false); + } + } + _session->config.set_session_monitoring (MonitorInput); + } else { + _session->config.set_session_monitoring (MonitorAuto); + } +} + +void +ARDOUR_UI::toggle_session_monitoring_disk () +{ + if (ignore_session_monitoring) { + return; + } + Glib::RefPtr<Action> act = ActionManager::get_action (X_("Transport"), X_("SessionMonitorDisk")); + if (!act) { + return; + } + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act); + if (!tact) { + return; + } + if (tact->get_active()) { + Glib::RefPtr<Action> iact = ActionManager::get_action (X_("Transport"), X_("SessionMonitorIn")); + if (iact) { + Glib::RefPtr<ToggleAction> tiact = Glib::RefPtr<ToggleAction>::cast_dynamic(iact); + if (tiact) { + PBD::Unwinder<bool> (ignore_session_monitoring, true); + tiact->set_active (false); + } + } + _session->config.set_session_monitoring (MonitorDisk); + } else { + _session->config.set_session_monitoring (MonitorAuto); + } +} + +void ARDOUR_UI::unset_dual_punch () { Glib::RefPtr<Action> action = ActionManager::get_action ("Transport", "TogglePunch"); @@ -340,6 +399,27 @@ ARDOUR_UI::parameter_changed (std::string p) ActionManager::map_some_state ("Transport", "ToggleAutoReturn", sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_return)); } else if (p == "auto-input") { ActionManager::map_some_state ("Transport", "ToggleAutoInput", sigc::mem_fun (_session->config, &SessionConfiguration::get_auto_input)); + } else if (p == "session-monitoring") { + Glib::RefPtr<Action> iact = ActionManager::get_action (X_("Transport"), X_("SessionMonitorIn")); + Glib::RefPtr<Action> dact = ActionManager::get_action (X_("Transport"), X_("SessionMonitorDisk")); + if (iact && dact) { + Glib::RefPtr<ToggleAction> tdact = Glib::RefPtr<ToggleAction>::cast_dynamic(dact); + Glib::RefPtr<ToggleAction> tiact = Glib::RefPtr<ToggleAction>::cast_dynamic(iact); + if (tdact && tiact) { + switch (_session->config.get_session_monitoring ()) { + case MonitorDisk: + tdact->set_active (true); + break; + case MonitorInput: + tiact->set_active (true); + break; + default: + tdact->set_active (false); + tiact->set_active (false); + break; + } + } + } } else if (p == "punch-out") { ActionManager::map_some_state ("Transport", "TogglePunchOut", sigc::mem_fun (_session->config, &SessionConfiguration::get_punch_out)); if (!_session->config.get_punch_out()) { |