From c206cad638275a7bfc166d0a07d211d4f6e3e4e1 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 20 Oct 2009 21:58:46 +0000 Subject: [PATCH] Ensure that the loop/punch ruler is always visible when punch in/out is enabled; closes mantis 1294. git-svn-id: svn://localhost/ardour2/branches/3.0@5828 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.h | 2 + gtk2_ardour/ardour_ui_options.cc | 77 +++++++++++++++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index c71a4d7e67..50bb96257b 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -239,6 +239,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI bool ignore_dual_punch; void toggle_punch_in (); void toggle_punch_out (); + void show_loop_punch_ruler_and_disallow_hide (); + void reenable_hide_loop_punch_ruler_if_appropriate (); void toggle_auto_return (); void toggle_click (); diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index bade3906a4..29c7c3cc6c 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -172,13 +172,86 @@ ARDOUR_UI::toggle_punch () void ARDOUR_UI::toggle_punch_in () { - ActionManager::toggle_config_state_foo ("Transport", "TogglePunchIn", mem_fun (session->config, &SessionConfiguration::set_punch_in), mem_fun (session->config, &SessionConfiguration::get_punch_in)); + Glib::RefPtr act = ActionManager::get_action (X_("Transport"), X_("TogglePunchIn")); + if (!act) { + return; + } + + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + if (!tact) { + return; + } + + if (tact->get_active() != session->config.get_punch_in()) { + session->config.set_punch_in (tact->get_active ()); + } + + if (tact->get_active()) { + /* if punch-in is turned on, make sure the loop/punch ruler is visible, and stop it being hidden, + to avoid confusing the user */ + show_loop_punch_ruler_and_disallow_hide (); + } + + reenable_hide_loop_punch_ruler_if_appropriate (); } void ARDOUR_UI::toggle_punch_out () { - ActionManager::toggle_config_state_foo ("Transport", "TogglePunchOut", mem_fun (session->config, &SessionConfiguration::set_punch_out), mem_fun (session->config, &SessionConfiguration::get_punch_out)); + Glib::RefPtr act = ActionManager::get_action (X_("Transport"), X_("TogglePunchOut")); + if (!act) { + return; + } + + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + if (!tact) { + return; + } + + if (tact->get_active() != session->config.get_punch_out()) { + session->config.set_punch_out (tact->get_active ()); + } + + if (tact->get_active()) { + /* if punch-out is turned on, make sure the loop/punch ruler is visible, and stop it being hidden, + to avoid confusing the user */ + show_loop_punch_ruler_and_disallow_hide (); + } + + reenable_hide_loop_punch_ruler_if_appropriate (); +} + +void +ARDOUR_UI::show_loop_punch_ruler_and_disallow_hide () +{ + Glib::RefPtr act = ActionManager::get_action (X_("Rulers"), "toggle-loop-punch-ruler"); + if (!act) { + return; + } + + act->set_sensitive (false); + + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + if (!tact) { + return; + } + + if (!tact->get_active()) { + tact->set_active (); + } +} + +/* This is a bit of a silly name for a method */ +void +ARDOUR_UI::reenable_hide_loop_punch_ruler_if_appropriate () +{ + if (!session->config.get_punch_in() && !session->config.get_punch_out()) { + /* if punch in/out are now both off, reallow hiding of the loop/punch ruler */ + Glib::RefPtr act = ActionManager::get_action (X_("Rulers"), "toggle-loop-punch-ruler"); + if (act) { + act->set_sensitive (true); + } + } } void -- 2.30.2