void set_loop_from_selection (bool play);
void set_punch_from_selection ();
void set_punch_from_region ();
+ void set_punch_from_loop ();
+ void setup_loop_record ();
+
void set_session_start_from_playhead ();
void set_session_end_from_playhead ();
void set_session_extents_from_selection ();
void marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void tempo_or_meter_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void new_transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
- void build_range_marker_menu (bool, bool);
+ void build_range_marker_menu (bool, bool, bool);
void build_marker_menu (ARDOUR::Location *);
void build_tempo_or_meter_marker_menu (bool);
void build_new_transport_marker_menu ();
reg_sens (editor_actions, "set-punch-from-edit-range", _("Set Punch from Selection"), sigc::mem_fun(*this, &Editor::set_punch_from_selection));
reg_sens (editor_actions, "set-session-from-edit-range", _("Set Session Start/End from Selection"), sigc::mem_fun(*this, &Editor::set_session_extents_from_selection));
+ reg_sens (editor_actions, "set-punch-from-loop", _("Set Punch from Loop"), sigc::mem_fun(*this, &Editor::set_punch_from_loop));
+ reg_sens (editor_actions, "setup-loop-record", _("Setup Loop Record"), sigc::mem_fun(*this, &Editor::setup_loop_record));
+
/* this is a duplicated action so that the main menu can use a different label */
reg_sens (editor_actions, "main-menu-play-selected-regions", _("Play Selected Regions"), sigc::mem_fun (*this, &Editor::play_selected_region));
reg_sens (editor_actions, "play-from-edit-point", _("Play From Edit Point"), sigc::mem_fun(*this, &Editor::play_from_edit_point));
if (loc == transport_loop_location() || loc == transport_punch_location() || loc->is_session_range ()) {
if (transport_marker_menu == 0) {
- build_range_marker_menu (loc == transport_loop_location() || loc == transport_punch_location(), loc->is_session_range());
+ build_range_marker_menu (loc == transport_loop_location(), loc == transport_punch_location(), loc->is_session_range());
}
marker_menu_item = item;
} else if (loc->is_range_marker()) {
if (range_marker_menu == 0) {
- build_range_marker_menu (false, false);
+ build_range_marker_menu (false, false, false);
}
marker_menu_item = item;
range_marker_menu->popup (1, ev->time);
}
void
-Editor::build_range_marker_menu (bool loop_or_punch, bool session)
+Editor::build_range_marker_menu (bool loop, bool punch, bool session)
{
using namespace Menu_Helpers;
- bool const loop_or_punch_or_session = loop_or_punch | session;
+ bool const loop_or_punch_or_session = loop | punch | session;
Menu *markerMenu = new Menu;
if (loop_or_punch_or_session) {
items.push_back (MenuElem (_("Play Range"), sigc::mem_fun(*this, &Editor::marker_menu_play_range)));
items.push_back (MenuElem (_("Locate to Marker"), sigc::mem_fun(*this, &Editor::marker_menu_set_playhead)));
items.push_back (MenuElem (_("Play from Marker"), sigc::mem_fun(*this, &Editor::marker_menu_play_from)));
- items.push_back (MenuElem (_("Loop Range"), sigc::mem_fun(*this, &Editor::marker_menu_loop_range)));
+
+ if (!loop) {
+ items.push_back (MenuElem (_("Loop Range"), sigc::mem_fun(*this, &Editor::marker_menu_loop_range)));
+ } else {
+ items.push_back (MenuElem (_("Setup Loop Record"), sigc::mem_fun(*this, &Editor::setup_loop_record)));
+ }
items.push_back (MenuElem (_("Set Marker from Playhead"), sigc::mem_fun(*this, &Editor::marker_menu_set_from_playhead)));
if (!Profile->get_sae()) {
set_punch_range (start, end, _("set punch range from selection"));
}
+void
+Editor::set_punch_from_loop ()
+{
+ if (_session == 0) {
+ return;
+ }
+
+ Location* tll;
+
+ if ((tll = transport_loop_location()) == 0) {
+ return;
+ }
+
+ set_punch_range (tll->start(), tll->end(), _("set punch range from loop"));
+}
+
+void
+Editor::setup_loop_record ()
+{
+ if (_session == 0) {
+ return;
+ }
+
+ Location * looploc = _session->locations()->auto_loop_location();
+
+ if (!looploc) {
+ return;
+ }
+
+ set_punch_range (looploc->start(), looploc->end(), _("setup loop recording"));
+
+ 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 (true);
+ toact->set_active (true);
+ }
+ }
+}
void
Editor::set_session_extents_from_selection ()
{