summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui_options.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-01-16 19:54:20 +0100
committerRobin Gareus <robin@gareus.org>2017-01-16 19:54:42 +0100
commitcf5a0de709489dd3a8735da89a49f9f468bf98e9 (patch)
tree07ae4faf3a7a09cc0d399255cf6c78ee09886f7b /gtk2_ardour/ardour_ui_options.cc
parent88d797bd6424f9cdbf48a26e0913965a6f102363 (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.cc80
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()) {