diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-02-27 15:11:24 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-02-27 15:11:24 +0000 |
commit | f6f9c8975d90fb1c783cae972688bfd130955a02 (patch) | |
tree | b0f37fd5a4d300fe2a564dac8df83beee42044d8 /gtk2_ardour/ardour_ui_options.cc | |
parent | b6776d1102d06a1119f0d3445549cf2f97b59db3 (diff) |
fix up dual punch action logic
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3128 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_ui_options.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui_options.cc | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 4fd45e327f..fcce64ec39 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -388,13 +388,48 @@ ARDOUR_UI::toggle_session_auto_loop () } void +ARDOUR_UI::unset_dual_punch () +{ + Glib::RefPtr<Action> action = ActionManager::get_action ("Transport", "TogglePunch"); + + if (action) { + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(action); + if (tact) { + ignore_dual_punch = true; + tact->set_active (false); + ignore_dual_punch = false; + } + } +} + +void ARDOUR_UI::toggle_punch () { - Glib::RefPtr<Action> act = ActionManager::get_action ("Transport", "TogglePunchIn"); - if (act) { - Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act); - Config->set_punch_in (tact->get_active()); - Config->set_punch_out (tact->get_active()); + if (ignore_dual_punch) { + return; + } + + Glib::RefPtr<Action> action = ActionManager::get_action ("Transport", "TogglePunch"); + + if (action) { + + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(action); + + if (!tact) { + return; + } + + /* drive the other two actions from this one */ + + Glib::RefPtr<Action> in_action = ActionManager::get_action ("Transport", "TogglePunchIn"); + Glib::RefPtr<Action> out_action = ActionManager::get_action ("Transport", "TogglePunchOut"); + + if (in_action && out_action) { + Glib::RefPtr<ToggleAction> tiact = Glib::RefPtr<ToggleAction>::cast_dynamic(in_action); + Glib::RefPtr<ToggleAction> toact = Glib::RefPtr<ToggleAction>::cast_dynamic(out_action); + tiact->set_active (tact->get_active()); + toact->set_active (tact->get_active()); + } } } @@ -1062,8 +1097,14 @@ ARDOUR_UI::parameter_changed (const char* parameter_name) ActionManager::map_some_state ("options", "ToggleTapeMachineMode", &Configuration::get_tape_machine_mode); } else if (PARAM_IS ("punch-out")) { ActionManager::map_some_state ("Transport", "TogglePunchOut", &Configuration::get_punch_out); + if (!Config->get_punch_out()) { + unset_dual_punch (); + } } else if (PARAM_IS ("punch-in")) { ActionManager::map_some_state ("Transport", "TogglePunchIn", &Configuration::get_punch_in); + if (!Config->get_punch_in()) { + unset_dual_punch (); + } } else if (PARAM_IS ("clicking")) { ActionManager::map_some_state ("Transport", "ToggleClick", &Configuration::get_clicking); } else if (PARAM_IS ("jack-time-master")) { |