add a method to cancel a pending play_range. this is needed when we are modifying the range with keyboard commands.

This commit is contained in:
Ben Loftis 2014-07-02 17:34:49 -05:00
parent 0f1c7b1d71
commit a1c8e67e50
6 changed files with 18 additions and 54 deletions

View File

@ -63,8 +63,8 @@ Editor::keyboard_selection_finish (bool add)
selection->set (start, end);
//if session is playing a range, cancel that
// if (_session->get_play_range())
// _session->request_cancel_play_range();
if (_session->get_play_range())
_session->request_cancel_play_range();
}
}
@ -99,61 +99,10 @@ Editor::keyboard_selection_begin ()
//if session is playing a range, cancel that
if (_session->get_play_range())
_session->request_transport_speed ( 1.0 );
//if join playhead, locate to the newly selected start
// if ( !_session->transport_rolling() && Config->get_join_play_range() )
// _session->request_cancel_play_range();
_session->request_cancel_play_range();
}
}
/*
void
Editor::keyboard_selection_finish (bool add)
{
if (_session && have_pending_keyboard_selection) {
framepos_t end;
bool ignored;
if (_session->transport_rolling()) {
end = _session->audible_frame();
} else {
if (!mouse_frame (end, ignored)) {
return;
}
}
if (add) {
selection->add (pending_keyboard_selection_start, end);
} else {
selection->set (pending_keyboard_selection_start, end);
}
have_pending_keyboard_selection = false;
}
}
void
Editor::keyboard_selection_begin ()
{
if (_session) {
if (_session->transport_rolling()) {
pending_keyboard_selection_start = _session->audible_frame();
have_pending_keyboard_selection = true;
} else {
bool ignored;
framepos_t where; // XXX fix me
if (mouse_frame (where, ignored)) {
pending_keyboard_selection_start = where;
have_pending_keyboard_selection = true;
}
}
}
}*/
void
Editor::keyboard_paste ()
{

View File

@ -763,6 +763,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
/* ranges */
void request_play_range (std::list<AudioRange>*, bool leave_rolling = false);
void request_cancel_play_range ();
bool get_play_range () const { return _play_range; }
void maybe_update_session_range (framepos_t, framepos_t);

View File

@ -54,6 +54,7 @@ public:
Audition,
InputConfigurationChange,
SetPlayAudioRange,
CancelPlayAudioRange,
RealTimeOperation,
AdjustPlaybackBuffering,
AdjustCaptureBuffering,

View File

@ -369,6 +369,7 @@ setup_enum_writer ()
REGISTER_CLASS_ENUM (SessionEvent, Audition);
REGISTER_CLASS_ENUM (SessionEvent, InputConfigurationChange);
REGISTER_CLASS_ENUM (SessionEvent, SetPlayAudioRange);
REGISTER_CLASS_ENUM (SessionEvent, CancelPlayAudioRange);
REGISTER_CLASS_ENUM (SessionEvent, StopOnce);
REGISTER_CLASS_ENUM (SessionEvent, AutoLoop);
REGISTER (_SessionEvent_Type);

View File

@ -1142,6 +1142,10 @@ Session::process_event (SessionEvent* ev)
set_play_range (ev->audio_range, (ev->speed == 1.0f));
break;
case SessionEvent::CancelPlayAudioRange:
unset_play_range();
break;
case SessionEvent::RealTimeOperation:
process_rtop (ev);
del = false; // other side of RT request needs to clean up

View File

@ -227,6 +227,14 @@ Session::request_play_range (list<AudioRange>* range, bool leave_rolling)
queue_event (ev);
}
void
Session::request_cancel_play_range ()
{
SessionEvent* ev = new SessionEvent (SessionEvent::CancelPlayAudioRange, SessionEvent::Add, SessionEvent::Immediate, 0, 0);
queue_event (ev);
}
void
Session::realtime_stop (bool abort, bool clear_state)
{