From e35621772ee93f7fbadeac5ff636d2c83eb6780f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 23 Jan 2007 22:29:45 +0000 Subject: [PATCH] add transition_to_{roll,reverse} git-svn-id: svn://localhost/ardour2/trunk@1376 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour.bindings | 2 ++ gtk2_ardour/ardour.menus | 3 +++ gtk2_ardour/ardour_ui_ed.cc | 16 ++++++++++++++++ gtk2_ardour/editor.h | 1 + gtk2_ardour/editor_ops.cc | 24 ++++++++++++++++++++++++ gtk2_ardour/public_editor.h | 1 + 6 files changed, 47 insertions(+) diff --git a/gtk2_ardour/ardour.bindings b/gtk2_ardour/ardour.bindings index 6ebd9b284c..1297a98266 100644 --- a/gtk2_ardour/ardour.bindings +++ b/gtk2_ardour/ardour.bindings @@ -257,6 +257,8 @@ ; (gtk_accel_path "/Main/Snapshot" "") ; (gtk_accel_path "/Transport/ToggleVideoSync" "") (gtk_accel_path "/Transport/ToggleRoll" "space") +(gtk_accel_path "/Transport/TransitionToRoll" "uparrow") +(gtk_accel_path "/Transport/TransitionToReverse" "downarrow") ; (gtk_accel_path "/RegionList/SortBySourceFilesystem" "") (gtk_accel_path "/Common/ToggleColorManager" "c") ; (gtk_accel_path "/Common/About" "") diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus index 075a526693..7bb75ed94b 100644 --- a/gtk2_ardour/ardour.menus +++ b/gtk2_ardour/ardour.menus @@ -47,6 +47,9 @@ + + + diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 2ebcb765c3..c2e8740789 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -233,6 +233,22 @@ ARDOUR_UI::install_actions () ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop + Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); + + /* these two behave as follows: + + - if transport speed != 1.0 or != -1.0, change speed to 1.0 or -1.0 (respectively) + - otherwise do nothing + */ + + ActionManager::register_action (transport_actions, X_("TransitionToRoll"), _("Transition To Roll"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), true)); + ActionManager::session_sensitive_actions.push_back (act); + ActionManager::session_sensitive_actions.push_back (act); + + ActionManager::register_action (transport_actions, X_("TransitionToReverse"), _("Transition To Reverse"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), false)); + ActionManager::session_sensitive_actions.push_back (act); + ActionManager::session_sensitive_actions.push_back (act); + + act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 94d85f976c..43f170f679 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -171,6 +171,7 @@ class Editor : public PublicEditor void separate_region_from_selection (); void separate_regions_using_location (ARDOUR::Location&); void toggle_playback (bool with_abort); + void transition_to_rolling (bool forward); /* undo related */ diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 3b053d7042..bdae9dca66 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1911,6 +1911,30 @@ Editor::edit_envelope () /* PLAYBACK */ +void +Editor::transition_to_rolling (bool fwd) +{ + if (!session) { + return; + } + + switch (Config->get_slave_source()) { + case None: + case JACK: + break; + default: + /* transport controlled by the master */ + return; + } + + if (session->is_auditioning()) { + session->cancel_audition (); + return; + } + + session->request_transport_speed (fwd ? 1.0f : -1.0f); +} + void Editor::toggle_playback (bool with_abort) { diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index dcc9a3b3ab..2e00b632b7 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -86,6 +86,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway virtual void new_region_from_selection () = 0; virtual void separate_region_from_selection () = 0; virtual void toggle_playback (bool with_abort) = 0; + virtual void transition_to_rolling (bool fwd) = 0; virtual nframes_t unit_to_frame (double unit) = 0; virtual double frame_to_unit (nframes_t frame) = 0; virtual double frame_to_unit (double frame) = 0;