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
This commit is contained in:
Carl Hetherington
2009-10-20 21:58:46 +00:00
parent 960efd79a3
commit c206cad638
2 changed files with 77 additions and 2 deletions

View File

@@ -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 ();

View File

@@ -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<Action> act = ActionManager::get_action (X_("Transport"), X_("TogglePunchIn"));
if (!act) {
return;
}
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::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<Action> act = ActionManager::get_action (X_("Transport"), X_("TogglePunchOut"));
if (!act) {
return;
}
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::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<Action> act = ActionManager::get_action (X_("Rulers"), "toggle-loop-punch-ruler");
if (!act) {
return;
}
act->set_sensitive (false);
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::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<Action> act = ActionManager::get_action (X_("Rulers"), "toggle-loop-punch-ruler");
if (act) {
act->set_sensitive (true);
}
}
}
void