summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-02-27 15:11:24 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-02-27 15:11:24 +0000
commitf6f9c8975d90fb1c783cae972688bfd130955a02 (patch)
treeb0f37fd5a4d300fe2a564dac8df83beee42044d8
parentb6776d1102d06a1119f0d3445549cf2f97b59db3 (diff)
fix up dual punch action logic
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3128 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/ardour-sae.menus1
-rw-r--r--gtk2_ardour/ardour_ui.cc1
-rw-r--r--gtk2_ardour/ardour_ui.h2
-rw-r--r--gtk2_ardour/ardour_ui_options.cc51
4 files changed, 50 insertions, 5 deletions
diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus
index dbfdeb2607..c5d3a26e27 100644
--- a/gtk2_ardour/ardour-sae.menus
+++ b/gtk2_ardour/ardour-sae.menus
@@ -108,6 +108,7 @@
</menu>
<separator/>
+ <menuitem action='TogglePunch'/>
<menuitem action='TogglePunchIn'/>
<menuitem action='TogglePunchOut'/>
<menuitem action='ToggleAutoInput'/>
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index d74e7d4210..01c5a9dee8 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -198,6 +198,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
_will_create_new_session_automatically = false;
session_loaded = false;
last_speed_displayed = -1.0f;
+ ignore_dual_punch = false;
last_configure_time.tv_sec = 0;
last_configure_time.tv_usec = 0;
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 3e58e98c38..93d1c58150 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -240,6 +240,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_auto_play ();
void toggle_auto_input ();
void toggle_punch ();
+ void unset_dual_punch ();
+ bool ignore_dual_punch;
void toggle_punch_in ();
void toggle_punch_out ();
void toggle_auto_return ();
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")) {